0

我试图从训练模型中找到新用户和现有用户之间的相似性(从 graphlab 的推荐方法生成训练模型)。因此,尝试在 graphalb 中使用最近邻相似性方法(查询选项)以这种方式进行。//data 是包含 100 个用户及其项目评分的数据集

model = graphlab.nearest_neighbors.create(data)
qry=graphlab.SFrame({'UserId':[101,101,101,101,101,101,101,101,101,101,101],
                'ItemId':["activity1","activity2","activity3","activity4","activity5","activity6","activity7","activity8","activity9","activity10","activity11"],
                'Rating':[3,9,8,5,7,4,8,6,6,3,7]})
 qry.swap_columns('UserId','ItemId')
 qry.swap_columns('ItemId','Rating')
 qry.print_rows()
 kn=model.query(qry)

基本上,我在查询方法中传递了新的 userId(101)数据,这些活动的 itemIds 和相应的评级。这些 itemId 和评级实际上只是我传递给新用户的现有用户的项目评级,以便检查新用户是否与现有用户相似。

使用 query() 的预期输出是它应该返回一个包含四列的 SFrame:查询标签、参考标签、距离和参考点在查询点最近邻中的排名(根据 Graphlab 文档)。但是我得到了这样的东西-

| 查询点 | # 对 | % 完全的。| 已用时间 |

| 0 | 11 | 0.0909091 | 624us | | 完成 | | 100 | 3.68ms |

任何人都可以帮助解释为什么这不能产生正确的输出吗?

4

1 回答 1

0

GraphLab Create 的最近邻模型期望每一行都对应一个用户的参考数据和查询数据,因此对于查询用户 101,所有评级都需要“未堆叠”到一行中:

qry = qry.unstack(['ItemId', 'Rating'], new_column_name='Rating')

带有评级的列确实需要与参考数据中的相应列具有相同的名称。

另一个注意事项是您看到的输出只是进度打印。要查看实际结果,请检查kn对象:

print kn
于 2016-05-06T17:17:14.857 回答