Рекомендации без оценок (Azure ML)
Я пытаюсь построить эксперимент для создания рекомендаций (используя пример базы данных Movie Ratings), но без использования рейтингов. Я просто считаю, что если пользователь оценил определенные фильмы, то он был бы заинтересован другими фильмами, которые были оценены пользователями, которые также оценили его фильмы.
Например, я могу считать, что рейтинги равны 1 (существует в базе данных) или 0 (не существует), но как в этом случае преобразовать исходные данные, чтобы отразить это?
Я не мог найти какие-либо примеры или учебные пособия по этому сценарию, и я действительно не знаю, как поступить. Должен ли я преобразовать данные, прежде чем вводить их в алгоритм? И / или есть какой-то конкретный алгоритм, который я должен использовать?
1 ответ
Если вы надеетесь использовать Рекомендатор Matchbox в AML, вы правы в том, что вам нужно идентифицировать некоторые пары пользовательского фильма, которых нет в наборе необработанных данных, и добавить их с нулевым рейтингом. (Я предполагаю, что вы уже установили для всех реальных пар пользователь-фильм рейтинг один, как описано выше.)
Я бы порекомендовал сгенерировать несколько случайных пар кандидатов и подтвердить их отсутствие в обучающих данных в модуле Script Execute R (или Python). Я не знаю имен функций вашего набора данных, но вот какой-то псевдокод в R для этого:
library(dplyr)
df <- maml.mapInputPort(1) # input dataset of observed user-movie pairs
all_movies <- unique(df[['movie']])
all_users <- unique(df[['user']])
n <- 30 # number of random pairs to start with
negative_observations <- data.frame(movie = sample(all_movies, n, replace=TRUE),
user = sample(all_users, n, replace=TRUE),
rating = rep(0, n))
acceptable_negative_observations <- anti_join(unique(negative_observations), df, by=c('movie', 'user'))
df <- rbind(df, acceptable_negative_observations)
maml.mapOutputPort("df");
В качестве альтернативы вы можете попробовать метод, подобный изучению правил ассоциации, который не потребует добавления в рейтинг с фальшивым нулем. Мартин Мачак опубликовал хороший пример того, как сделать это в R/AML в Cortana Intelligence Gallery.