我正在使用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中的方法支持这种用法,但为什么它没有输出?
有人可以给我一些建议吗?非常感谢!
答案 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。