mahout入门之评估查准率与查全率
2014-12-24 10:29
337 查看
查全率与查准率的定义如下:R(查全率)=(检出的相关文献数量/检索系统中相关文献总量)x100%,,P(查准率)=(检出的相关文献数量/检出的文献总量)x100%
例如:在一次检索中,共检出文献100篇,经过专家判定,其中与提问相关的文献为60篇,其余的40篇为误检文献,那么按照上述公式,本次检索的查准率P就等于(60/100)×100%即60%。假如检索系统中还有90篇相关文献,由于各种原因而未被检出(漏检),那么按照上述公式,本次检索的查全率就等于(60/60+90)×100%即40%。
我们从中也能发现一些问题,就是查准率和查全率的测试的有效性完全依赖于怎样定义“好的推荐”,即上面举例中说的“经过专家判定”。
一般思维是偏好值高的物品(超过一定阀值)为好的推荐,其他则不是。
系统会为每个用户都取一个阀值,这个阀值的计算公式为:用户阀值=用户的平均偏好值+标准方差
例如:在一次检索中,共检出文献100篇,经过专家判定,其中与提问相关的文献为60篇,其余的40篇为误检文献,那么按照上述公式,本次检索的查准率P就等于(60/100)×100%即60%。假如检索系统中还有90篇相关文献,由于各种原因而未被检出(漏检),那么按照上述公式,本次检索的查全率就等于(60/60+90)×100%即40%。
我们从中也能发现一些问题,就是查准率和查全率的测试的有效性完全依赖于怎样定义“好的推荐”,即上面举例中说的“经过专家判定”。
一般思维是偏好值高的物品(超过一定阀值)为好的推荐,其他则不是。
系统会为每个用户都取一个阀值,这个阀值的计算公式为:用户阀值=用户的平均偏好值+标准方差
标准方差就是方差的平方根:一组数据中的每一个数与这组数据的平均数的差的平方的和再除以数据的个数,取平方根既是。
下面是评估代码实现:
package com.besttone.mahout.demo.recommender; import java.io.File; import java.io.IOException; import org.apache.mahout.cf.taste.common.TasteException; import org.apache.mahout.cf.taste.eval.IRStatistics; import org.apache.mahout.cf.taste.eval.RecommenderBuilder; import org.apache.mahout.cf.taste.eval.RecommenderIRStatsEvaluator; import org.apache.mahout.cf.taste.impl.eval.GenericRecommenderIRStatsEvaluator; 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.impl.recommender.GenericUserBasedRecommender; import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity; import org.apache.mahout.cf.taste.model.DataModel; import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood; import org.apache.mahout.cf.taste.recommender.Recommender; import org.apache.mahout.cf.taste.similarity.UserSimilarity; import org.apache.mahout.common.RandomUtils; public class TestIRStatsEvaluator { /** * @param args * @throws IOException * @throws TasteException */ public static void main(String[] args) throws IOException, TasteException { // TODO Auto-generated method stub RandomUtils.useTestSeed();//保证每次运行时训练数据和测试数据选取的都一样,保证每次评估结果都一样 DataModel dataModel = new FileDataModel(new File( MyFirstRecommender.class.getResource("intro.txt").getPath())); //创建评估器 RecommenderIRStatsEvaluator evaluator = new GenericRecommenderIRStatsEvaluator(); //构建推荐引擎 RecommenderBuilder recommenderBuilder = new RecommenderBuilder() { public Recommender buildRecommender(DataModel dataModel) throws TasteException { // TODO Auto-generated method stub UserSimilarity similarity = new PearsonCorrelationSimilarity( dataModel); UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, dataModel); return new GenericUserBasedRecommender(dataModel, neighborhood, similarity); } }; int at = 2;// 评估推荐两个ITEM时的查准率和查全率 //开始评估查准率和查全率 IRStatistics statistics = evaluator.evaluate(recommenderBuilder, null, dataModel, null, at, GenericRecommenderIRStatsEvaluator.CHOOSE_THRESHOLD, 1.0); System.out.println("precision at " + at + " 查准率:" + statistics.getPrecision()); System.out .println("recall at " + at + " 查全率:" + statistics.getRecall()); } }
相关文章推荐
- mahout推荐3-评估查准率和查全率
- mahout利用布尔型数据评估查准率和查全率
- mahout实现查准率和查全率评估的配置与运行
- mahout推荐8-利用布尔型数据评估查准率和查全率
- 《机器学习》第二章 模型评估与选择 笔记3 查准率、查全率
- mahout入门之对推荐结果进行评估
- mahout推荐入门之评估GroupLens数据集
- mahout 0.8入门
- Mahout 入门构建一个推荐引擎
- mahout评估一个简单的推荐程序
- 查准率与查全率(precision and recall) 的个人理解
- mahout入门学习
- Mahout学习之Mahout简介、安装、配置、入门程序测试
- 使用Mahout搭建推荐系统之入门篇3-Mahout源码初探
- 斯坦福大学机器学习笔记——机器学习系统设计(误差分析、查全率和查准率、F1值)
- 手把手入门lenskit 算法评估(2)
- mahout:推荐系统入门学习(一)
- 使用Mahout搭建推荐系统之入门篇1-搭建REST风格简单推荐系统
- 使用Mahout搭建推荐系统之入门篇2-玩转你的数据1
- mahout入门之推荐系统