Mahout in action 中文版-2.推荐器的介绍-2.3

2.3 评估推荐器

???????? 推荐器是一个工具,它用来解决"如何为一个用户给出最好的推荐"这样的问题。在得出结果之前,最好先弄清楚问题。究竟怎样才是一个好的推荐结果?我们如何才能得出这样的结果?这一章剩下的部分将停下来探索推荐器的评估,因为这是用来了解特定推荐器的有力工具。

???????? 最理想的推荐器会像巫师一样某明奇妙的猜到你所喜欢的东西。它可能会知道你有多喜欢一个东西,甚至你都没有见过它或者从未表达过你是否喜欢它。一个推荐器能够精确的得出你对于每个项目的偏好指数,然后按照偏好指数排名罗列出来,这就是一个好的推荐。

???????? 确实,为一些或者全部的项目打分评级是推荐引擎常见做法。所以,评估推荐器的一种方案就是评估它所产生的偏好指数——也就是评估偏好指数与真实喜好程度的匹配程度。

2.3.1 训练数据与打分

???????? 那些所谓的"真实喜好程度"其实并不存在。没有人会知道它具体的值(包括你)。其实我们可以通过把真实数据中的一小部分当作测试数据(Testing Data)来进行模拟,剩下的则是训练数据(Training Data)。除了用来训练的偏好指数,其余的偏好指数都用来预测这些被去掉的偏好指数。

???????? 如此,为推荐器打分就变得十分简单了。例如,我们可以计算所有预测值和真实值差值的平均值。如果把这个当作分数来看,那么肯定是越低越好。因为越低意味着差异越小,当然0是最完美的——预测和真实无任何差异。

???????? 有时,这些差值的均方根也被利用起来,当然这个值也是越低越好。详情见下表:

?表2.1 均差和钧方差试图

上表中显示了预测值和真实值的差异,以及这些差异如何转化为分数。均方差对出差错的项惩罚更加严厉,因为Item 2的存在。例如,Item 2的预测差了两个等级,那么均方差会去2的平方编程了4,而差了1则还是1。这样一下就差了2倍。由于简单的均差表达更为直接,在下一个例子中,我们还将使用它:

2.3.2 运行RecommenderEvaluator

清单2.3 推荐器评估程序的配置和运行

?

RandomUtils.useTestSeed(); A

DataModel model = new?FileDataModel(new?File("intro.csv"));

??
?

RecommenderEvaluator? evaluator =?

??new?AverageAbsoluteDifferenceRecommenderEvaluator();?

??
?

RecommenderBuilder? builder = new?RecommenderBuilder() { B

[email protected]

??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);

??}

};

??
?

double?score = evaluator.evaluate(builder, null, model, 0.7, 1.0); C

System.out.println(score);

A?使用例子中的可重复数据

B?建立一个和上述一样的推荐器

C 70%的数据作为训练集;30%的数据作为测试集

???????? 大多数的处理过程发生在evaluate()这个函数当中。RecommenderEvaluator负责将数据分为训练集和测试集,用训练集构建一个DataModel和Recommender用来进行测试活动,得到结果之后在于真实数据进行比较。

???????? 需要指出的是,这个方法中不会有Recommender。这是因为,这个方法需要根据训练集产生的DataModel构造一个Recommender,所以调用者需要提供一个能够利用DataModel产生Recommender的对象——RecommenderBuilder。他的构造方法和我们之前提到的方法一样。

2.3.3 评估结果

???????? 这个程序打印出评估结果:用一个分数(数字)代表Recommender的性能如何。你会看到这个程序的结果为1.0。即使你多次的随机选取,结果依然如此,因为你所调用的? RandomUtils.useTestSeed()函数每次产生的随机数序列是一样的。它仅仅被用在这样例子或者单元测试中,因为我们需要保证结果的可再现性。但是千万不要把它用在你实际的代码中。

???????? 这个值的意义如何取决于它被用到什么地方——AverageAbsoluteDifferenceRecommenderEvaluator。本次结果1.0代表测试结果平均和真实结果相差1.0。

???????? 在1到5这样的范围中,平均相差1不算很多,但是我们的数据太少了。如果每次都进行随机的切分(三七分),那么每次得到的结果可能都不相同。

???????? 这种评估技术可以用于任何的Recommender和DataModel。如果您想使用均方差进行评估,那么就将AverageAbsoluteDifferenceRecommenderEvaluator替换为RMSRecommenderEvaluator。

???????? DataModelBuilder可以控制DataModel从训练集中的建立。它可以作为evaluate()的参数替换掉上述的null。不过通常默认的就可以了,但是如果你自己使用了特定的DataModel,那就不可以替换成DataModelBuilder了。DataModelBuilder相当于是把训练集数据注入到评估过程的一个接口。

???????? 最后一个参数1.0控制了你要使用多少数据,这里它代表100%。如果你降低这个参数,可以更快的构建一个的精度的评估过程。比如你调成0.1,那么就用了10%的数据。这对于快速测试推荐器的微小的变化是十分实用的。

?
?

源文档 <http://www.cnblogs.com/colorfulkoala/archive/2012/07/22/2603353.html>

时间: 2024-10-24 14:24:37

Mahout in action 中文版-2.推荐器的介绍-2.3的相关文章

Mahout in action 中文版-2.推荐器的介绍-2.1~2.2

2?推荐器的介绍 本章概要: ???????? Mahout中的推荐器 ?????????推荐器实战一瞥 ?????????推荐引擎精度与质量评估 ?????????基于一个真实数据集的测试:GroupLens 每天我们都会对一些喜欢的.不喜欢的甚至不关心的事物进行一些评价.这中行为往往是无意识的.你在收音机上听到一首歌,你可能会因为它的美妙或者难听而注意到它,也可能直接忽略.这样的情形也会非常普遍的发生在人们对于T恤.沙拉酱.滑雪场.发型.脸型或者电视节目. ???????? 尽管人们的口味多

Mahout in action 中文版-2.推荐器的介绍-2.4~2.6

2.4 评估查准率(precision)和召回率(recall) 我们可以从更广义的角度去看待推荐问题:它并不是严格的要去估计偏好指数来提供推荐结果,也不总是要向用户提供准确的偏好指数的值.很多时候,我们只需从好到坏列出推荐排序,事实上,有些时候我们只需列出很少一部分排名考前的就可以了. ???????? 这样来看,我们也可以利用经典的信息检索中的度量方法去评估分类器:查准率和召回率.这些术语被典型的用在搜索引擎之中.而且,搜索引擎正是为一个查询返回一些排名较好的结果. ???????? 一个搜

Mahout in Action 学习---基于物品的分布式推荐算法(Wikipedia数据集)

文字总结自<Mahout in Action>中文版第六章的内容 1.1 数据集介绍 Wikipedia数据集:一篇文章到另外一篇文章的链接. 可以将文章看作是用户,将该文章指向的文章视为该源文章所喜欢的物品. 类型:单向布尔型偏好. 相似性评估算法:LogLikelihoodSimilarity 关于LogLikelihoodSimilarity具体算法思想见: 对数似然比相似度 - xidianycy - 博客频道 - CSDN.NET http://blog.csdn.net/u0143

Mahout各种推荐器主要特点

Mahout有很多推荐的实现,下面对各自特点进行介绍:1.GenericUserBasedRecommender: 基于用户的推荐,用户数量相对较少时速度较快. 2.GenericItemBasedRecommender: 基于物品的推荐,物品数量较少时速度较快,外部提供了物品相似度数据后会更加有效率. 3.SlopeOneRecommender: 基于slope-one算法(想想那个填空的表格吧)的推荐,在线推荐或更新比较快,需要先下大量的预处理运算.物品数量相对较少时使用比较合适. 4.SV

Solr In Action 中文版 第一章(四、五)

1.1             功能概览1. 4 最后,让我们再按照下面的分类,快速的过一下Solr的主要功能: ·用户体验 ·数据建模 ·Solr 4的新功能 在本书中,为你的用户提供良好的搜索体验会一直贯穿全书的主题.所以我们就从用户体验开始,看看Solr是如何让你的用户感觉到爽的. 1.4.1             用户体验类功能 Solr提供了一系列的重要功能来帮助你搭建一个易用的,符合用户直觉的,功能强大的搜索引擎.不过你需要注意的是Solr仅仅是提供了类REST风格的HTTP AP

自译Solr in action中文版

目录 Part 1 初识 SOLR 1 Solr 简介 2 开始熟悉 Solr 3 Solr 核心概念 4 配置 Solr 5 建立索引 6 文本分析 Part 2 Solr 核心功能 7 发起查询 和 处理结果 8 分类索引 9 命中结果高亮 10 查询建议引导 11 结果分组 合并域 12 将Solr产品化 Part 3 Solr 高级应用 13 扩展Solr云 14 多语言搜索 15 复杂数据操作 16 相关性的调整 17 跳出思维定势 附录: A 从源代码编译Solr B 玩转Solr社

Solr In Action 中文版 第一章(一)

1.1我到底需要一个搜索引擎吗? 第一章           Solr 简介 本章速览: ·搜索引擎处理的数据特性 ·常见搜索引擎用例 ·Solr核心模块介绍 ·选择Solr的理由 ·功能概述 伴随着社交媒体.云计算.移动互联网和大数据等技术的高速发展,我们正迎来一个令人激动的计算时代.软件架构师们开始面对的主要挑战之一,便是如何处理全球巨大的用户基数所产生及使用的海量数据.此外,用户们开始期待在线软件应用永远都是稳定可用的,并且能够一直保持响应,这对应用就提出了更高的可扩展性和稳定性需求.为了

Solr In Action 中文版 第一章 (二)

Solr到底是什么? 在本节中,我们通过从头设计一个搜索应用来介绍Solr的关键组件.这个过程将有助于你理解Solr的功能,以及设计这些功能的初衷.不过在我们开始介绍Solr的功能特性之前,还是要先澄清一下Solr并不具有的一些性质: 1)  Solr并不是一个像Google或是Bing那样的web搜索引擎 2)  Solr和网站优化中经常提到的搜索引擎SEO优化没有任何关系 好了,现在假设我们准备为潜在的购房客户设计一个不动产搜索的网络应用.该应用的核心用例场景是通过网页浏览器来搜索全美国范围

Solr In Action 中文版 第一章(三)

3.1              为什么选用Solr? 在本节中,我们希望可以提供一些关键信息来帮助于你判断Solr是否是贵公司技术方案的正确选择.我们先从Solr吸引软件架构师的方面说起. 3.1              软件架构师眼中的Solr 在评估一项新技术时,软件架构师必须要考虑一系列的因素,其中就包括系统的稳定性,可伸缩性,还有容错性.Solr在这三方面的得分都很不错. 说到稳定性,Solr是一个由活跃的开源社区和经验丰富的代码提交者共同维护的一项成熟技术.Solr和Lucene的