Java mhout中的Tanimoto系数仅返回1.0作为预测值
我尝试运行mahout框架,并在一组项上使用Tanimoto系数。幸运的是,它与我一起工作,但是,它为所有预测项返回值1.0,代码如下:Java mhout中的Tanimoto系数仅返回1.0作为预测值,java,mahout,recommendation-engine,mahout-recommender,collaborative-filtering,Java,Mahout,Recommendation Engine,Mahout Recommender,Collaborative Filtering,我尝试运行mahout框架,并在一组项上使用Tanimoto系数。幸运的是,它与我一起工作,但是,它为所有预测项返回值1.0,代码如下: public static void main(String[] args) throws Exception { DataModel model = new FileDataModel(new File("stack.csv")); //load data from file needed for
public static void main(String[] args) throws Exception {
DataModel model = new FileDataModel(new File("stack.csv")); //load data from file needed for computation
UserSimilarity similarity = new TanimotoCoefficientSimilarity(model); //log likelihood similarity will be used for making recommendation .
/*To use TanimotoCoefficientSimilarity replace “LogLikelihoodSimilarity” with TanimotoCoefficientSimilarity”.
UserSimilarity implementation provides how similar two two users are using LoglikehoodSimilarity */
UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model); //Define a group of user most similar to a given user . 2 define a group of 2 user having most similar preference
Recommender recommender = new GenericUserBasedRecommender( model, neighborhood, similarity); // creates a recommendation engine
List<RecommendedItem>recommendations = recommender.recommend(3, 5);
/*one recommendation for user with ID 4 . In Mahout it always take Integer value i.e It will always take userId and number of item to be recommended */
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}
}
[main] INFO org.apache.mahout.cf.taste.impl.model.file.FileDataModel - Creating FileDataModel for file stack.csv
[main] INFO org.apache.mahout.cf.taste.impl.model.file.FileDataModel - Reading file info...
[main] INFO org.apache.mahout.cf.taste.impl.model.file.FileDataModel - Read lines: 696
RecommendedItem[item:589, value:1.0]
RecommendedItem[item:380, value:1.0]
RecommendedItem[item:2916, value:1.0]
RecommendedItem[item:3107, value:1.0]
RecommendedItem[item:2028, value:1.0]
Part of my data file is as follow:
1 3408
1 595
1 2398
1 2918
1 2791
1 2687
1 3105
.
.
.
据我所知,Tanimoto系数值通常在0和1.0之间,但这里只显示了1.0,这是我认为不可能的。那么,有人知道如何解决这个问题吗?有什么门槛我可以改变吗
非常感谢您在这方面的任何帮助
非常感谢。Tanimoto系数,或也称为Jaccard系数,完全忽略偏好值,只考虑用户喜欢这些项目,仅此而已。它是如何计算的?最后一个值是两个用户表示某种偏好的项目数(换句话说,只有like)除以两个用户表示某种偏好的项目数 请在此处阅读有关Jaccard系数的更多信息:
阅读本书中有关Mahout实现的更多信息
TanimotoCoefficientSimilarity
。感谢@Dragan Milcevski的回复。我以前读过,但在这种情况下,我的预测偏好值总是得到1,所以在上面的示例中,我无法确定第5个用户更喜欢哪个项目589或380,并且所有项目对用户都具有相同的优先级,我不确定这是否正确。基于Tanimoto系数的值,预测值通常不是1.0,它可以小于该值,因为它从0到1.0开始。非常感谢。是的,你说得对。我将编辑我的答案。不过我想你也有很多类似的。尝试获取前100条建议,看看这些值是否会改变。非常感谢Dragan Milcevski的建议。我已经尝试过了前100条建议,并尝试将类似项目的数量从2项改为5项和10项。但不幸的是,预测值仍然为1.0。我不知道为什么:(我只能假设你有很多类似的用户。试着用更高的数字,即1000和50来生成推荐和NN。