Mahout推荐没有输出 - 关于输入文件格式

时间:2014-12-17 13:48:23

标签: mahout mahout-recommender

我正在使用mahout-distribution-0.9。我的程序有问题。

import java.io.File;
import java.util.List;

import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;


class RecommenderIntro {
    public static void main(String[] args) throws Exception {
            DataModel model =
            //new FileDataModel (new File("F:\\ml-10M100K\\intro.csv"));
            new FileDataModel (new File("F:\\ml-10M100K\\ratingsShort.dat"),"::");

            UserSimilarity similarity = new PearsonCorrelationSimilarity (model);
            UserNeighborhood neighborhood = new NearestNUserNeighborhood (2, similarity, model);
            Recommender recommender = new GenericUserBasedRecommender (model, neighborhood, similarity);
            List<RecommendedItem> recommendations = recommender.recommend(1, 2);
            for (RecommendedItem recommendation : recommendations) {
                    System.out.println(recommendation);
            }

    }
}

File intro.csv中的内容如下:

1,101,5.0
1,102,3.0
1,103,2.5
2,101,2.0
2,102,2.5
2,103,5.0

当我使用intro.csv来运行它时,它在eclipse中有输出:

RecommendedItem[item:104, value:4.257081]
RecommendedItem[item:106, value:4.0]

文件ratingsShort.dat中的内容如下:

1::122::5::838985046
1::185::5::838983525
1::231::5::838983392
1::292::5::838983421
2::733::3::868244562
2::736::3::868244698

或将ratings.short.dat的内容更改为:

1,539,5
1,589,5
2,110,5
2,151,3
2,733,3
2,802,2
2,1210,4
2,1544,3
3,1246,4
3,1408,3.5
3,1552,2
3,1564,4.5

当我使用ratingsShort.dat时,eclipse中没有输出。

FileDataModel(File dataFile, String delimiterRegex)

Mahout中的方法支持这种用法,但为什么它没有输出?

有人可以给我一些建议吗?非常感谢!

2 个答案:

答案 0 :(得分:0)

好的。我弄清楚了我的问题。我将我的电影镜头从ml-10m.zip改为ml-1m.zip。它确实有输出。

所以,这个问题是因为我拦截的DATASET不合适!来自互联网的intro.csv是

足以让mahout计算推荐值,但不能计算我切割的数据集。

答案 1 :(得分:0)

您需要将您的ID转换为Mahout ID。 Mahout将用户和商品ID视为评级的行号和列号。因此,行/用户的第一个ID将是&#34; 0&#34;,它对应于您的&#34; 1&#34;的ID,对于列/项ID是相同的。如果您的ID只是上面显示的ID,则需要将其转换为Mahout ID,如下所示:

0,2,5
0,3,5
1,0,5
1,1,3
1,4,3
1,5,2
1,6,4
1,10,3
2,7,4
2,8,3.5
2,9,2
2,11,4.5

将行/用户和列/项ID映射到mahout ID并不重要(我按照排序顺序进行了上述操作,但这不是必需的)但是Mahout ID必须是连续的非负整数。然后,当您获得建议时,必须将其翻译回您的ID。