Java mhout中的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

我尝试运行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     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。