浏览 4540 次
锁定老帖子 主题:推荐系统的评价指标
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2013-08-04
-------------------------- 评价一个推荐系统的好坏,有很多种方式,项亮的《推荐系统实践》中已经有比较全面的描述。书中给出了十种评价的维度,其中准确率、召回率、多样性这三种指标可以通过离线实验计算得出。其余的用户满意度、信任度等指标则需要通过问卷调查和在线实验得出。 在《Recommender Systems Handbook》中,论述的更加详细,对实验设计、各种评测指标的来源都很学术化,如推荐物品覆盖程度的测量中,用到了基尼系数(Gini Index)和香农熵(Shannon entropy),这些货太过于高端大气上档次,等有时间再看吧。(不过看得出来《推荐系统实践》写作时参考了《Recommender Systems Handbook》)。 实际工程中可使用Mahout的实现来进行离线数据评测,Mahout提供了一套评价器用来做这个事情。评价器分别实现了RecommenderEvaluator和RecommenderIRStatsEvaluator接口,RecommenderEvaluator接口提供了evaluate方法 double evaluate(RecommenderBuilder recommenderBuilder, DataModelBuilder dataModelBuilder, DataModel dataModel, double trainingPercentage, double evaluationPercentage) throws TasteException; 这个评测器是拿一部分数据做训练集,一部分数据做测试集,返回的是训练集推荐结果与测试集实际结果的差异评测值(即偏好度的差异)。 RecommenderIRStatsEvaluator类似 IRStatistics evaluate(RecommenderBuilder recommenderBuilder, DataModelBuilder dataModelBuilder, DataModel dataModel, IDRescorer rescorer, int at, double relevanceThreshold, double evaluationPercentage) throws TasteException; 这个接口会返回更详细的测评结果IRStatistics。 public interface IRStatistics { double getPrecision(); double getRecall(); double getFallOut(); double getF1Measure(); double getFNMeasure(double n); double getNormalizedDiscountedCumulativeGain(); double getReach(); } IRStatistics中包含的指标就是上边接口列出来的内容,mahout已经很贴心的给出了这些指标在维基上的定义。可以看出来,所有指标都是信息检索(Information_retrieval)这个学科用到的,并不是专门为推荐系统定义的。 下边详细看一下指标含义: Precision:准确率,有的地方又叫查准率。不贴公式了,直接看计算代码 // Precision precision.addDatum((double) intersectionSize / (double) numRecommendedItems); intersectionSize 的定义见下边: int intersectionSize = 0; List<RecommendedItem> recommendedItems = recommender.recommend(userID, at, rescorer); for (RecommendedItem recommendedItem : recommendedItems) { if (relevantItemIDs.contains(recommendedItem.getItemID())) { intersectionSize++; } } 很明显,intersectionSize 就是推荐结果里边被用户实际点到的数量。而准确率就是实际点到的数量除以推荐的总数量。有5个推荐结果,用户点了一个,准确率就是20%。 Recall:召回率 // Recall recall.addDatum((double) intersectionSize / (double) numRelevantItems); 召回率是推荐中用户实际点到的数量除以用户点击的总数量。用户一共点了5次,其中一次是推荐系统给出的,召回率是20%. Recall:到达率,比较简单,就是有推荐的人数占总人数比率,(double) numUsersWithRecommendations / (double) numUsersRecommendedFor) Fall-out:不知道怎么翻译,计算方式是 fallOut.addDatum((double) (numRecommendedItems - intersectionSize) / (double) (numItems - numRelevantItems)); 推荐的物品中用户没点击的数量除以 用户每点击的总数量。比较奇怪的一个指标。 NormalizedDiscountedCumulativeGain参见http://blog.163.com/bit_runner/blog/static/5324221820115206420604/ 。好吧,其实我没看懂 最后F1Measure是准确率和召回率的一个加权平均,是一个对准确率和召回率的综合衡量指标。不多说了。可参考:http://www.cnblogs.com/bluepoint2009/archive/2012/09/18/precision-recall-f_measures.html 但是。。这些指标里边没有流行度、多样性、新颖性的计算指标。要实现还得自己来。推荐系统的评价指标 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |