我是推荐系统的新手.我正在努力学习Mahout,到目前为止我认为我掌握了它.
但是,当我尝试使用Mahout in Action(清单2.4,第21页)中的示例计算Precision&Recall时,我遇到了一个相当奇怪的问题,为了更方便,我在这里复制粘贴主体:
RandomUtils.useTestSeed();
DataModel model = new FileDataModel (new File("intro.csv"));
RecommenderIRStatsEvaluator evaluator =
new GenericRecommenderIRStatsEvaluator ();
RecommenderBuilder recommenderBuilder = new RecommenderBuilder() {
@Override
public Recommender buildRecommender(DataModel model)
throws TasteException {
UserSimilarity similarity = new PearsonCorrelationSimilarity (model);
UserNeighborhood neighborhood =
new NearestNUserNeighborhood (2, similarity, model);
return
new GenericUserBasedRecommender (model, neighborhood, similarity);
}
};
IRStatistics stats = evaluator.evaluate(
recommenderBuilder, null, model, null, 2,
GenericRecommenderIRStatsEvaluator.CHOOSE_THRESHOLD,
1.0);
System.out.println(stats.getPrecision());
System.out.println(stats.getRecall());
Run Code Online (Sandbox Code Playgroud)
当我尝试使用书中的小数据集执行上述操作时,一切都应该如此.但是,当我尝试使用Movielens 1M或10M计算Precision&Recall时,结果非常低......例如,Precision和Recall @ 2等于:P:0.00573和R:0.005882
我没有想法,所以如果有人有或有过类似的问题,我会很高兴听到有解决方案......
Sea*_*wen 12
第2.4.2节涉及到解释:对于推荐者而言,精确度和召回测试并不那么有意义,因为您实际上并不知道哪些项目是"相关"结果.您可以猜测评分较高的项目是相关的,但您不知道未评级的项目是否相关.测试相当于找出建议与最高评级项目相交的程度,这与精确/召回需要做的不同.
所以你得分很低.实际上,10%还不错.现在,0.5%非常差,是的.这意味着这不是这个数据集的好算法.
平均精度或AUC可能会让您对结果的质量有更广泛的了解,因为他们正在研究更大范围的结果的行为.这些都没有在Mahout中实现(不管怎么说都不在代码的这一部分).
但他们在Myrrix.我知道Grouplens 10M数据集将获得25 +%精度/召回率和14 +%平均精度,因为有一个单元测试.(我是Mahout这一部分的作者,并将其商业化为Myrrix.)如果您正在寻找能够在开箱即用的数据方面做得很好的东西,我认为值得您花时间去看着.
| 归档时间: |
|
| 查看次数: |
2065 次 |
| 最近记录: |