mahout in action 2中文版(转) 推荐器介绍

mahout in action 2 推荐器介绍

本章包括: 
。介绍第一个Recommender 
。推荐引擎的精确度评估 
。评估一个引擎的准确度和召回 
。在一个现实的例子Grouplens上评估一个Recommender 
      每天我们都形成对许多事情的看法,这些事情有我们喜欢的,不喜欢的,甚至不关心的。这是在不知不觉中发生的。当你在收音机上听到一首歌,你注意它,要么因为它引人注意,要么因为它听起来很糟糕,要么可能完全没有注意它。T恤,色拉,发型,滑雪场,容颜,电视节目都是相同的事情。 
      虽然大家的品味经常在变,但他们都遵循一定的模式。人们往往喜欢的事情,类似于他们喜欢的其他事情。因为我喜欢吃熏肉、生菜、番茄组成的三明治,你可以猜到我想吃总会三明治,它们通常是拥有一样的火鸡的三明治。同样,大家往往喜欢大家喜爱的类似的事情。当一个朋友进入设计学校的时候,他看到几乎所有其他设计专业的学生,都拥有一台苹果电脑,这并不令人惊讶,因为她已经是一个终生Mac用户 
      其实我们可以利用这些模式来预测,某些喜欢的和不喜欢的事情。如果我们让一个陌生人站在你的面前,问你是否知道她喜欢第三部《Lord of the Rings film》?除了猜测,你可能没有更好的办法。但是,如果她告诉你,她喜欢前两部电影。如果她不喜欢第三部,那是不可能的。换一句话,如果她说她讨厌这部电影,或者我们会问“天哪,怎么可能”。你可以直接猜到第三部电影肯定在她喜欢的列表上。推荐器几乎可以预测到这些模式,并利用他们来发现你不了解的新的,令人满意的事情。

mahout in action 2.1 什么是推荐器

      因为某种原因你从书架上取到这本书。也许你是在知道的其他书本,看到了这本书, 并觉的它有用。或者觉得书店把它放在这个位置,是因为喜欢这些书的人也喜欢这本书。也或许你在一个同事的书架上看到这本书,这位同事与你一样对机器学习很有兴趣。也有可能他可能直接推荐你看这本书。 
      在这一章,我们将会深入研究人们产生推荐,发现新事物的一些方法。当然还有这些进程,在软件中如何利用mahout实施.我们已经设计了一些方法:发现我们可能喜欢的项目,从而可以留心相似品味的人,看看他们喜欢的东西。换句话说,我们可以算出什么样的项目,会像我们以前喜欢的项目。另外我们可以通过留心观察其他人的选择。这些描述了推荐引擎算法的两个主要类别:“基于用户(user-based)” 和 “基于项目(item-based)”推荐器。


2.1.1基于内容(content-based)的协同过滤推荐算法 
       严格的说,这里有协同过滤(CF)的例子。根据也只能根据,用户与项目的关系的知识,从而产生推荐器。这些技术并不需要识别项目本身的属性。这在某种程度上这是一个优势。推荐器框架根本不关心,这个项目是否是书本、主题公园、花、或者是其他的人,因为它们的属性中没有任何一个会被当作输入的。 
      这里有根据项目属性而成立的其他方法,通常被认为是“基于内容(content-based)”推荐算法。例如,如果有一个朋友把这本书推荐给你,是因为这是一本Manning出版书,这位朋友喜欢其他的Manning出版的书,那么这位朋友正在从事的事情,大概就是“content-based”推荐器算法。这个算法是依据这本书的一个属性:出版商。Mahout推荐框架不直接实施这种算法,虽然它提供了一些方法,把项目属性信息加入它的计算。同样的,它可能在技术上被认为是一个协同筛选框架。 
      这些算法没有问题;相反的是,它们同样可以表现的相当好。但是它们必要是特定领域的方法,试图编纂进一个框架将是相当困难的。建立一个有效的content-based书本推荐算法,人们将必须决定一本书中的哪个属性:页数,作者,出版商,颜色,字体,那个是有意义的,并达到那种程度。这种知识中没有一个是可以翻译成另外一个领域的;预定这种方式的推荐器,对选择那个是更好的披萨没有帮助。 
也就是因为这个原因,Mahout将不会太多讨论这种形式的推荐器。这些观点被锁定在Mahout提供的事情中,并置入高阁;在本章将会举个例子,我们会为一个日期网站建立一个推荐器。在随后介绍的Mahout为基于协同过滤推荐算法进行的实施后,我们将会更详细的讨论它们与contene—based算法的关系。


2.1.2 主流推荐算法 
      到目前为止,很多人可能已经了解到,如amazon或netflix这样的网站,在现实中实施的推荐算法:根据浏览和购买历史,网站会生产一个产品列表,它的推荐可能会吸引你。这种类型的推荐引擎自从1900就已开始出现,但直到最近它才进入大量的计算机研究领域,被精心设计和研究。随着这些技术变得越来越主流,对它们的要求也不断增加,提供的开源实现也同样如此。随着日益增加的,可理解的,低层本的运算能力,意味着推荐引擎正变的越来越易理解并广泛使用。 
      事实上,推荐技术对客户来说不仅仅是像DVD这类推荐的事物。这种方法通常估计大量众多的事物之间的相互关联。一个人可以用相同的技术把DVD推荐给客户,估计那个客户最有可能喜欢某个DVD.在一个社会网络中,一个推荐器可以把人推荐给别外一些人。

mahout in action 2.2 运行首个推荐引擎

       Mahout包含一个推荐引擎的几种类型,事实上包含传统的基于用户(user-based),基于项目(item-based)推荐算法,也包括基于“slope-one”技术的实现(这一个新的有效的方法)。 
        你将根据实验,基于单机版的(SVD)初步实现。在下面的章节里,我们将会在Mahout的背景下和一些现实生活中的例子,来回顾上面的观察结果。我们将会考虑如何代表数据,如何进行有效的推荐算法,如何评估推荐器的效果,如何为一个特殊的问题调研和定制推荐器,最后考虑如何分布计算。


2.2.1 创建输入 
          我们将会以一个简单的例子,开始对Mahout中的推荐器认识。首先,我们需要给出推荐器的输入数据。在Mahout中称为“偏好(preferences)”的表单。因为最流行的推荐引擎,把需要推荐的项目推荐给用户,从用户到上面提到的关联items,作为一个关联最方便选择讨论。这些用户和项目可以成为任何东西。包含一个userID和一个itemID,通常用一个数字来表达用户和选项的喜好强度(preference)。在Mahout中的ID通常是数字,事实上总是int。这一项的值可以代表任意值,preference值越大,代表关联度越强。例如,这个值可能是从1到5的范围内的等级。在这里,用户分配“1”,则表示他不能忍受这个项目,分配“5”表示他很喜欢这个项目。 
创建一个文本文件,包含相关用户,简单的命名“1”到“5”。为四本书的偏好,我们将会称它们为“101”到“104”。在现实生活中,这些可能是用户ID和产品ID列表,它们来自于一个公司的数据库;Mahout仅仅需要数字命名的用户和项目!我们将会简单的用逗号分割数值的格式,来记他们。把下面的复制到一个文件里,并把它作为intro.csv保留下来: 
列表2.1 推荐器的输入文件intro.csv 


 

       通过上面的学习,我们可能已经注意到。用户1和5看起来有相似的品味。他们都喜欢book101,其次喜欢book102,然后都喜欢book103。同样的问题存在于用户1和4,因为它们看起来都喜欢101和103(虽然没有说用户4喜欢102).换句话说,通过运行计数,发现用户1和用户2喜欢的看起来相似:1喜欢101,而用户2不喜欢,用户1喜欢103,而用户2刚好相反。用户1和用户3没有很多重叠。双方同时喜欢书101的就很难。看图2.1,可能会想象用户和项目之间的关系,既有肯定的又有否定的。 




图2.1 用户1到用户5,与项目101到项目107的关系。 
虚划线代表否定的关联,用户看起来很不喜欢这个项目,但也表达了与这个项目的关系。

 
2.2.2创建一个推荐器 
       之所以选择这本书,我们推荐给用户1?而不是101,102,也不是103。是因为他明显的已经知道了这些书,推荐器是着力与发现新事物。感觉建议,因为用户4和用户5与用户1看起来相似,我们应该推荐一些用户4或用户5喜欢的东西。把104,105和106当作可能的推荐器。总体来说,根据为项目104的喜好值4.5和4.0的判断来看,104看起来可能性最大。现在,运行下面的代码: 
列表2.2 Mahout上简单的user-based推荐算法程序 
Java代码  
package mia.recommender.ch02;    
import org.apache.mahout.cf.taste.impl.model.file.*;    
import org.apache.mahout.cf.taste.impl.neighborhood.*;    
import org.apache.mahout.cf.taste.impl.recommender.*;    
import org.apache.mahout.cf.taste.impl.similarity.*;    
import org.apache.mahout.cf.taste.model.*;    
import org.apache.mahout.cf.taste.neighborhood.*;    
import org.apache.mahout.cf.taste.recommender.*;    
import org.apache.mahout.cf.taste.similarity.*;    
import java.io.*;    
import java.util.*;    
class RecommenderIntro {    
public static void main(String[] args) throws Exception {    
DataModel model = new FileDataModel(new File("intro.csv")); //A    
UserSimilarity similarity = new PearsonCorrelationSimilarity(model);    
UserNeighborhood neighborhood =    
new NearestNUserNeighborhood(2, similarity, model);    
Recommender recommender = new GenericUserBasedRecommender(    
model, neighborhood, similarity); //B    
List<RecommendedItem> recommendations =    
recommender.recommend(1, 1); //C    
for (RecommendedItem recommendation : recommendations) {    
System.out.println(recommendation);    
}    
}    
}  

package mia.recommender.ch02;   import org.apache.mahout.cf.taste.impl.model.file.*;   import org.apache.mahout.cf.taste.impl.neighborhood.*;   import org.apache.mahout.cf.taste.impl.recommender.*;   import org.apache.mahout.cf.taste.impl.similarity.*;   import org.apache.mahout.cf.taste.model.*;   import org.apache.mahout.cf.taste.neighborhood.*;   import org.apache.mahout.cf.taste.recommender.*;   import org.apache.mahout.cf.taste.similarity.*;   import java.io.*;   import java.util.*;   class RecommenderIntro {   public static void main(String[] args) throws Exception {   DataModel model = new FileDataModel(new File("intro.csv")); //A   UserSimilarity similarity = new PearsonCorrelationSimilarity(model);   UserNeighborhood neighborhood =   new NearestNUserNeighborhood(2, similarity, model);   Recommender recommender = new GenericUserBasedRecommender(   model, neighborhood, similarity); //B   List<RecommendedItem> recommendations =   recommender.recommend(1, 1); //C   for (RecommendedItem recommendation : recommendations) {   System.out.println(recommendation);   }   }   }


A 加载数据文件 
B 创建数据引擎 
C 为用户1推荐1个项目 
       为了更清楚,可以通过下面章节更多的例子。这里我们将会缺省导入,类声明和类函数声明,而不只是重复程序声明本身。为了帮助认识,基础组件之间的关系,看图2.2。并不是所有的基于Mahout的推荐器,看起来都像这个样子。某些将会采用不同的组件,有不同的关系。但这可以给我们一个初步的认识,在我们这个例子中表现出来的组件。 
        图2.2 简单的说明在Mahout中基于用户(user-based)推荐器各个组件的相互关系 
       因为在下面的两节里,我们将会更详细的讨论这个内容中的每一项,并总结每一个组件的作用。一个DataModel的实现是计算中需要的首个因素,提供用户和项目数据储存的入口。一个UserSimiliarity的实现提供了两个用户如何表示相似的概念;这将会以所有可能的度量或计算中的一个为依据。一个UserSimiliarity的实施定义了一组用户的概念,这些用户与一个已知的用户很相似。最后,一个Recommender的实现把所有的内容拉在一起,把项目推荐给用户,和相关的功能。


2.2.3 分析输出数据 
        通过你喜欢的IDE,编译和运行。在终端或IDE上运行的程序,输出数据应该是: 
RecommendedItem[item:104, value:4.257081] 
       我们曾经希望寻找并使用一个优秀的推荐器。这个推荐引擎把book104推荐给了user1.进一步说,推荐引擎也是这么做的,因为它估计到user1对book104的分值大约是4.3,而且它是所有对推荐器筛选的项目中分值最高的。 
        那不算太坏。我们没有得到107,它也是值得推荐的,但只与不同品味的user有关联。我们从106中挑选出104,当你注意到104是所有book中的选择比例非常高的,这是有意义的。进一步的说,对于user1有多喜欢项目104,我们已经得到了一个合理的估计:user4和user5所表达的介于4.0和4.5之间的比值。 
        从数据上来看,这个正确答案并不明显。但是推荐引擎对它做了一些适当的调整,并得到了一个更有说服力的答案。通过看到这个简单的程序,这个程序就是从一小堆数据中得到一个有用的并且不明显的答案,如果你从中得到了一次令人愉快的兴奋,那么这个机器学习的世界正是为你而存在的。 
       简单的说,像上面的构建在小型数据集合上推荐器并不重要。在现实生活中,数据量是巨大的,并且它们是很杂乱的。例如,想象一下,把一个新闻文章推荐给读者的一个畅销的新闻点,分值从文章的点击得到的。但是,许多分值可能是假的,也可能一个读者点击了他并不喜欢的一篇文章,或者说点击了一个错误的故事。可能许多点击已经出现了,但并没有生效,所以与user没有关联。在试想一下这样规模的数据量:可能在一个月内就有数以亿计的点击量。 
       从这些数据中快速产生一个正确的推荐数据,这是相当重要的。稍后,我们将会介绍一个Mahout工具,通过案例的方法研究,我们可以用Mahout工具攻克这一系列问题。它们将会显示出标准的方法,如何生产差劲的推荐数据或者消耗得大量的内存和CPU时间,并且如何安装和配置Mahout来改进。 

mahout in action 2.3 推荐器考核 
     这是一个推荐引擎的工作,用来解释下面的问题:“对用户来说,怎么的推荐数据才是最好的”。在搞清楚这个的答案之前,我们首先应该解决这个问题。一个好的推荐数据精度指的是什么?我们需要知道产出一个怎么样的推荐器来产生他们?本节的下面部分将会探讨对一个推荐器的考核。因为它是一个工具,当我们开始思考特殊的推荐系统时,它将会是很有用的。 
      最优秀的推荐器,能够感知你的心灵。它以某种方式知道你可能很喜欢某个的项目,而这些项目你还没有看过或表达过任何喜好。一个优秀的推荐器可以预测所有的分值,并且根据未来的分值和已经打的分值进行排序,从而推荐出最有可以的项目 
      确实,大部分的推荐引擎也试图通过一些或所有其他的项目估计比率来工作。所以,考核一个推荐器的推荐能力的一种方法,就是考核它估计分值的质量:考核估计分值与实际分值的相似程度。


2.3.1 训练数据和打分 
      这些实际的分值虽然并不存在。当然没有人知道你在未来会如何喜欢一些新的项目(包括你自己)。通过把一小部分的真实数据集合置于一旁,把它们当作试验数据,这可以模仿一个推荐引擎。这些试验分值不存在于训练数据中,训练数据是为考核过的推荐引擎提供参考:它是除了试验数据的所有数据。相反,这个推荐器是为漏掉的试验数据估计分值,考核就是让它与真实值对比。 
       在这里,为推荐器生成一个“分值”是相当简单的。例如,在估计分值和实际分值中可以计算出平均差异。这种类型的得分,低一点的分值是比较好的,因为那意味着估算与真实值的差异是相当小的。0.0是完全匹配值,即在估计值和实际值之间没有一点不同。 
      有时差异的均方根是非常有用的: 在实际值和估计值之间差异值的平均值的平方根。这个值依然是越低越好。 

项目1项目2项目3
真实值3.05.04.0
估计值3.52.05.0
差值0.53.01.0
差值的平均值= (0.5 + 3.0 + 1.0) / 3 = 1.5
均方根=√((0.52 + 3.02 + 1.02) / 3) = 1.8484


表2.1 平均差异和均平方根算法的一个演示 
       上面的表格显示了一组真实值和估计值之间的差异,以及它们如何形成的得分。最重要的是均方根可以除去那些尚有很大差距的估计值,如这里的项目2,这个结果还是很令人满意的。例如,被2点分开的估计值可能比两倍还多,这和被1点分开的估计值是一样的糟糕。因为这个简单的平均差异可能理解起来更直观,更容易,我们将会在下面的例子中使用它。


2.3.2运行RecommenderEvaluator 
     让我们再来看一下例子中的代码,评估一个简单的推荐器,这个推荐器是我们在较少的数据集合上创造的: 
列表2.3配置运行一个推荐器的一个评估 
Java代码 
 
RandomUtils.useTestSeed(); //A   
DataModel model = new FileDataModel(new File("intro.csv"));   
RecommenderEvaluator evaluator =   
new AverageAbsoluteDifferenceRecommenderEvaluator();   
RecommenderBuilder builder = new RecommenderBuilder() { //B   
@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);   
}   
};   
double score = evaluator.evaluate(   
builder, null, model, 0.7, 1.0); //C   
System.out.println(score);  

RandomUtils.useTestSeed(); //A  DataModel model = new FileDataModel(new File("intro.csv"));  RecommenderEvaluator evaluator =  new AverageAbsoluteDifferenceRecommenderEvaluator();  RecommenderBuilder builder = new RecommenderBuilder() { //B  @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);  }  };  double score = evaluator.evaluate(  builder, null, model, 0.7, 1.0); //C  System.out.println(score);


A 只用在可重复结果的例子中 
B 建立下面的推荐器 
C 用百分之七十的数据来训练;余下的百分之三十来测试 
       大部分的action发生在evaluate()。在RecommenderEvaluator内部把数据分成一个训练和测试集合,建立一个新的训练模型(DataModel)和推荐器来试验,把它的估计值和实际的试验数据对比。 
       注意我们不会通过这种方法否定一个推荐器。这是因为,这个方法内部将需要围绕一个最新创造的训练模型(DataModel)来建立一个推荐器。所以我们必须提供一个对象,这个对象可以建立一个来自与数据模型(DataModel)的推荐器,既一个推荐器的构造者(recommenderbuilder).在这里我们进行了一个如同我们在第一节里努力进行的实施。


2.3.3 评估结果 
       程序执行后会在输出一个结果:分数,它可以表示这个推荐器是效果。这样你就可以简单的看结果: 1.0。虽然存在随机性,在evaluator内部选择使用的测试数据,但是这个结果应该是一致性。因为它都是调用RandomUtils.useTestSeed(),每一次生成的数据的随机性是一致的。这仅仅是在这种例子和单元测试中使用,来保证可重复的结果。所以请不要在你实际的代码中使用。 
      这里,这个值意味着什么,依赖于我们使用的实现AverageAbsoluteDifferenceRecommenderEvaluator。通常,结果1.0又意外着,推荐器估计一个值,这个值偏离实际值为1.0。 
      在1到5的范围内,1.0这个值不算大,但一些小数据从这里开始。你的结果可能与数据集合随机分解的不同,因此training和test的集合在每次运算中都可能不同。 
这个技术可以适用于任何的Recommender和DataModel。用均方根分值,代替有RMSRecommenderEvaluator的实施的AverageAbsoluteDifferenceRecommenderEvaluator 
      对evaluate()的0参数也可以代替为DataModelBuilder的一个实例,这可以被用于控制training DataModel是如何从training数据创建起来的。通常这个默认值就是很好的;如果在部署上你正在使用DataModel的一个专门的实施,那这是不可能的。一个DataModelBuilder是你如何把它加入评估过程。 
      1.0参数在最终控制了在所有的输入数据中有多少被使用。这里是百分之百。这可以被用来生产一个quicker,如果少一点精确,只用一个潜在的巨大的数据集合的一小部分来评估。例如,0.1将意味着百分之十的数据被使用,而百分之九十的数据别忽视。当对一个recommender快速地试验小部分的改变,这是很有用的。


mahout in action 2.4 评估的精确和调用

       我们也可以得到一个关于recommender问题的更宽广的看法:对生产recommendations我们不用必须估计首选项值。没必要总是对用户提供估计的首选项值。在很多情况下,我们所想要的是一个recommendations的从最好到最差的排序列表。事实上,在有些情况下,我们不是很关心列表的精确排序:一组有点好的recommendations是好的。 
      用更一般的看法,我们也可以把经典的信息检索测量应用到评估recommenders:精度和调用。这些项目代表性的应用于像搜索引擎这样的程序,这为许多可能结果的查询返回一些最好的结果。

mahout in action 2.5 评估GroupLens数据集合

       用这些在进行中的工具,我们将可能不仅讨论速度,也讨论我们创造和修改的推荐引擎的质量。虽然大量真实数据的例子仍然要过几章才能讲到,我们将花一些时间在一个小型数据集合上去快速评估性能。


2.5.1 提取推荐器输入数据 
       GroupLens (http://grouplens.org/)是一个研究项目,它提供几个不同型号的数据集合,每一个都来自于真实的用户对电影的评分。这是几个有效的大型的真实世界的数据库中之一,在这本书中我们将会探究更多这种数据集合。从grouplens.org查找并下载“100K data set”,当前在 http://www.grouplens.org/node/73上可以得到。反归档(你下载的文件),在它内部,这个文件被称为ua.base。这是一个具有user IDs,item IDs,评级(首选项值)和一些额为信息的用tab键分隔的文件。 
      这个文件将会起作用吗?Tabs不是用逗号分开它的域,而且它也在终点包含一个额外的信息域。是的,这个FileDataModel的文件会起作用的。返回到listing 2.3中的以前的代码,在listing 2.3中我们建立了一个RecommenderEvaluator,努力进入ua.base的位置,用它来代替我们构造的这个小的数据文件。再一次运行它。这时,评估应该要花几分钟时间,因为它现在是基于100000的首选项值,而不是少数的首选项值。 
      最后,你应该得到0.9左右的数字。那并不算坏,虽然这个数字由于某种原因远离1到5这个规模上的一个整点,这个整点也不算好。难道我们尝试的这个独特的Recommender对这类数据来说并不是最好的? 
     让我们在这个数据库上test-drive一个“slope-one” recommender,在即将到来的这节里,我们将会在recommender algorithms自身上讨论一个简单的算法。这像替换RecommenderBuilder一样容易。这个RecommenderBuilder用org.apache.mahout.cf.taste.impl.recommender.slopeone.SlopeOneRecommeder,像这样: 
      Listing 2.6 改变评估项目去运行一个SlopeOneRecommender

2.6小结

在这章里,我们介绍了推荐引擎的概念。通过一个少量输入,创建一个简单的Mahout recommender,通过一个简单的计算来运行并解释了这个结果。 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
brief contents 1 ■ Meet Apache Mahout 1 PART 1 RECOMMENDATIONS ...................................................11 2 ■ Introducing recommenders 13 3 ■ Representing recommender data 26 4 ■ Making recommendations 41 5 ■ Taking recommenders to production 70 6 ■ Distributing recommendation computations 91 PART 2 CLUSTERING .............................................................115 7 ■ Introduction to clustering 117 8 ■ Representing data 130 9 ■ Clustering algorithms in Mahout 145 10 ■ Evaluating and improving clustering quality 184 11 ■ Taking clustering to production 198 12 ■ Real-world applications of clustering 210 Licensed to Jianbin Dai vi BRIEF CONTENTS PART 3 CLASSIFICATION ........................................................225 13 ■ Introduction to classification 227 14 ■ Training a classifier 255 15 ■ Evaluating and tuning a classifier 281 16 ■ Deploying a classifier 307 17 ■ Case study: Shop It To Me 341 Licensed to Jianbin Dai vii contents preface xvii acknowledgments xix about this book xx about multimedia extras xxiii about the cover illustration xxv 1 Meet Apache Mahout 1 1.1 Mahout’s story 2 1.2 Mahout’s machine learning themes 3 Recommender engines 3 ■ Clustering 3 ■ Classification 4 1.3 Tackling large scale with Mahout and Hadoop 5 1.4 Setting up Mahout 6 Java and IDEs 7 ■ Installing Maven 8 ■ Installing Mahout 8 ■ Installing Hadoop 9 1.5 Summary 9 PART 1 RECOMMENDATIONS...........................................11 2 Introducing recommenders 13 2.1 Defining recommendation 14 Licensed to Jianbin Dai viii CONTENTS 2.2 Running a first recommender engine 15 Creating the input 15 ■ Creating a recommender 16 Analyzing the output 17 2.3 Evaluating a recommender 18 Training data and scoring 18 ■ Running RecommenderEvaluator 19 ■ Assessing the result 20 2.4 Evaluating precision and recall 21 Running RecommenderIRStatsEvaluator 21 ■ Problems with precision and recall 23 2.5 Evaluating the

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值