IBk具有自定义相似功能作为推荐系统

时间:2015-07-08 12:35:59

标签: java machine-learning weka recommendation-engine knn

我试图基于基于内容的相似性函数(使用描述逻辑)来实现推荐系统。 使用此相似性函数,我为数据集的所有项构建了相似度矩阵。 我决定使用这种信息来实现KNN分类器。

我正在使用Weka的KNN实现,我实现了扩展NormalizableDistance的相似度函数。 它只是得到两个实例之间的距离得分并返回它,因为已经计算

使用此函数以这种方式构造我的分类器:

IBk knn = new IBk(numNeigh);
knn.getNearestNeighbourSearchAlgorithm().setDistanceFunction(new MyCustomFunction());

在这种情况下,我无法理解应该如何使用我的数据集。 我的数据集格式为:

 (user_id, item_id)

其中每对代表用户看过一个项目(隐式反馈)。

如果我尝试使用我拥有的数据集构建 Instances 对象,我无法正确运行KNN算法,因为每个实例都不是可以使用的项目相似度函数。

所以我应该创建一个只包含项目的数据集。用户喜欢的所有项目的ID,并仅使用此项目构建分类器。

这是对的还是我做错了什么?

1 个答案:

答案 0 :(得分:0)

您似乎需要为每个用户使用一个分类器,例如一个SVM。可以使用用户看到的所有项目的描述来训练它。这些可以通过其与包围它们的超球面(半径)的内部距离来排序。距离越远,排名越大。因此,不推荐超球外的物品。如果您有额外的元数据表明用户对每个看到的项目感兴趣(例如观察时间),则可以使用此信息来缩减项目或甚至丢弃异常值。