我试图从训练模型中找出新用户与现有用户之间的相似性(从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)
基本上,我在查询方法,itemIds和这些活动的相应评级中传递新的userId(101)数据。这些itemIds和评级实际上是我传递给新用户的现有用户的项目评级,以便在新用户与现有用户相似时检查相似性。
使用query()所期望的输出是它应该返回一个包含四列的SFrame:查询标签,参考标签,距离和查询点的最近邻居中参考点的等级(根据Graphlab文档) 。但我得到的是这样的东西 -
|查询点| #pairs | %完成。 |经过的时间|
| 0 | 11 | 0.0909091 | 624us | |完成| | 100 | 3.68ms |
有人可以帮助解决为什么这不能产生正确的输出吗?
答案 0 :(得分:0)
GraphLab Create的最近邻模型期望每一行对应于参考和查询数据的用户,因此对于查询用户101,所有评级都需要“取消堆叠”成一行:
qry = qry.unstack(['ItemId', 'Rating'], new_column_name='Rating')
具有评级的列确实需要与参考数据中相应列的名称相同。
另一个注意事项是,您看到的输出只是进度打印。要查看实际结果,请检查kn
对象:
print kn