[推荐系统]mahout支持的对推荐引擎的评价方法
来源:互联网 发布:中国海洋大学 知乎 编辑:程序博客网 时间:2024/06/06 16:17
先说3种简单的评测方式
1,平均绝对误差,Average Absolute difference,越小越好
2,RMS,Root-mean-square,对偏离较大的值惩罚较大。也是越小越好
3,准确率和召回率
在有rating的评测里,要给 prcision 和 recall 设置一个 threashold 用于区分good recommendation和bad recommendation。如果没有明确指定,mahout这个framework会为每一个user设定一个threshold,就是user的平均rating ,加上标准差.
threshold = mu + sigma
这种评测方法可能面临一个问题:就是user 可能对某个item非常感兴趣,但是user从来没有看过它,而我们的推荐引擎 评测方法 并不会把这个推荐作为一个good recommendation。mahout能做的最好的就是随机选user 喜欢的item作为 good recommendation。
这种评测方法是有用的,但绝对不是完美的。
在boolean preference的推荐中,只有precision和recall可以用。所以我们要明白这种评测方法的局限性
*下面是使用平均绝对误差的例子
RandomUtils.useTestSeed(); // generate repeatable resultsDataModel model = new FileDataModel (new File("intro.csv"));RecommenderEvaluator evaluator =new AverageAbsoluteDifferenceRecommenderEvaluator ();RecommenderBuilder builder = new RecommenderBuilder() { // builds recommender@Overridepublic Recommender buildRecommender(DataModel model) throws TasteException {UserSimilarity similarity = new PearsonCorrelationSimilarity (model); UserNeighborhood neighborhood = new NearestNUserNeighborhood (2, similarity, model); return new GenericUserBasedRecommender (model, neighborhood, similarity); }};double score = evaluator.evaluate( builder, null, model, 0.7, 1.0);// trains with 70%, test with 30%System.out.println(score);
大部分工作都在evaluate里面发生,RecommenderEvaluator把数据分为 training 和test集合。
用training DataModel来做推荐,然后用test data对推荐结果进行评测
RandomUtils.useTestSeed() 使每次实现的随机数一样,这样保证分割数据不会出乱子。
但是这个只能用于unit test。不能出现在real code
这里使用的是 Average absolute difference,如果要使用root-mean-square,可以把 AverageAbsoluteDifferenceRecomenderEvaluator 改为 RMSRecommenderEvaluator
*下面是使用准确率和召回率的例子
RandomUtils.useTestSeed();DataModel model = new FileDataModel (new File("intro.csv"));RecommenderIRStatsEvaluator evaluator = new GenericRecommenderIRStatsEvaluator ();RecommenderBuilder recommenderBuilder = new RecommenderBuilder() { @Overridepublic 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());
0 0
- [推荐系统]mahout支持的对推荐引擎的评价方法
- [mahout in action]mahout中用于推荐引擎的数据结构(一)
- [mahout in action]mahout中用于推荐引擎的数据结构(二)
- 推荐系统的评价指标
- 推荐系统的评价指标
- 推荐系统的评价指标
- 推荐系统的评价参数
- 推荐系统评价方法
- mahout 推荐引擎的相关介绍
- mahout探索推荐引擎内部的秘密
- Mahout基于内存的DataMode 推荐引擎
- 基于内存的DataMode推荐 mahout推荐引擎 Demo2
- 基于Mahout的电影推荐系统
- 基于Mahout的电影推荐系统
- 基于Mahout的电影推荐系统
- 基于Mahout的电影推荐系统
- 基于Mahout的电影推荐系统
- 基于Mahout的电影推荐系统
- 节省Python开发者时间的操作
- hdu 4521(dp+线段树)
- 文件类型
- ubuntu下总提示认证失败怎么办
- Spring学习笔记(六):Rest的使用
- [推荐系统]mahout支持的对推荐引擎的评价方法
- 最长不下降子序列(n*logn)
- 介绍Python 和 Scikit-Learn 的机器学习
- 文件输入输出编程
- 文章列表
- 寒门再难出贵子(很现实,很残酷,慎入)
- 英语能力的提升:
- 浅析js中不同的height, top对比
- java的.jar包在eclipse下的源码关联