【问题标题】:Recommendations without ratings (Azure ML)没有评级的建议 (Azure ML)
【发布时间】:2016-08-16 21:34:13
【问题描述】:

我正在尝试构建一个实验来创建推荐(使用电影评级示例数据库),但不使用评级。我只是认为,如果用户对某些电影进行了评分,那么他会对其他已被也评价过他的电影的用户评分的电影感兴趣。

例如,我可以考虑评级为 1(存在于数据库中)或 0(不存在),但在这种情况下,我如何转换初始数据以反映这一点?

我找不到任何关于这种情况的示例或教程,我真的不知道如何继续。我应该在将数据注入算法之前对其进行转换吗?和/或有什么我应该使用的特定算法?

【问题讨论】:

  • “转换初始数据”是什么意思?评级的二进制表示 - 例如您建议的评级 - 对于一个简单的实验来说就足够了(一个很好的)。从那里你可以研究一个简单的协同过滤实现。
  • 我的困惑更多地与我如何将值与不存在的数据相关联有关,因为数据库中的所有评级都将是“1”,这是获得评级的唯一方法“0”是因为它不存在于数据中......
  • 您可以将值存储在稀疏矩阵中(用户 X 电影)。这样你就不需要代表0了
  • 是否可以在 Azure ML Studio 本身内转换为稀疏矩阵?

标签: machine-learning azure-machine-learning-studio


【解决方案1】:

如果您希望在 AML 中使用 Matchbox Recommender,那么您是正确的,您需要识别一些 原始数据集中不存在的用户电影对,并将它们添加到评分为零。 (我假设您已经将所有真实的用户-电影对设置为评级为 1,如上所述。)

我建议生成一些随机候选对,并在执行 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");

或者,您可以尝试association rule learning 之类的方法,该方法不需要您添加虚假的零评级。 Martin Machac 在 Cortana 智能库中发布了 nice example,介绍如何在 R/AML 中执行此操作。

【讨论】:

  • 但是,如果不是所有组合的数据都存在,那么默认行为是什么?只是通过 Azure ML 修复了 rating=1 ,仅此而已..,无需计算并添加到行数据集(rating=0)
猜你喜欢
  • 2010-11-01
  • 1970-01-01
  • 2020-06-07
  • 2022-08-19
  • 2015-05-17
  • 2017-09-03
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
相关资源
最近更新 更多