我试图基于基于内容的相似性函数(使用描述逻辑)来实现推荐系统。 使用此相似性函数,我为数据集的所有项构建了相似度矩阵。 我决定使用这种信息来实现KNN分类器。
我正在使用Weka的KNN实现,我实现了扩展NormalizableDistance的相似度函数。 它只是得到两个实例之间的距离得分并返回它,因为已经计算。
使用此函数以这种方式构造我的分类器:
IBk knn = new IBk(numNeigh);
knn.getNearestNeighbourSearchAlgorithm().setDistanceFunction(new MyCustomFunction());
在这种情况下,我无法理解应该如何使用我的数据集。 我的数据集格式为:
(user_id, item_id)
其中每对代表用户看过一个项目(隐式反馈)。
如果我尝试使用我拥有的数据集构建 Instances 对象,我无法正确运行KNN算法,因为每个实例都不是可以使用的项目相似度函数。
所以我应该创建一个只包含项目的数据集。用户喜欢的所有项目的ID,并仅使用此项目构建分类器。
这是对的还是我做错了什么?
答案 0 :(得分:0)
您似乎需要为每个用户使用一个分类器,例如一个SVM。可以使用用户看到的所有项目的描述来训练它。这些可以通过其与包围它们的超球面(半径)的内部距离来排序。距离越远,排名越大。因此,不推荐超球外的物品。如果您有额外的元数据表明用户对每个看到的项目感兴趣(例如观察时间),则可以使用此信息来缩减项目或甚至丢弃异常值。