1.mahout in Action2.2第一个例子
 
Running a first recommender engine
 
数据:
第一个数字是用户ID 第二个是书的ID,第三个是用户对书的评分,1-5 越高,表示用户越喜欢
1,101,5.0
1,102,3.0
1,103,2.5
 
2,101,2.0
2,102,2.5
2,103,5.0
2,104,2.0
 
3,101,2.5
3,104,4.0
3,105,4.5
3,107,5.0
 
4,101,5.0
4,103,3.0
4,104,4.5
4,106,4.0
 
5,101,4.0
5,102,3.0
5,103,2.0
5,104,4.0
5,105,3.5
5,106,4.0
 
1-5 用户对不同书的喜好程度如下图所示:
 
 
直觉上看这个图,用户1和用户5喜好很相似,都喜欢101,对102,103只是喜欢那么一点点。可以说非常相似。1和4其次,也很相似,都很喜欢101,不怎么喜欢103。
1和2的喜好貌似完全相反,1喜欢101,而2不喜欢。等等。。。
 
那么。考察用户1,我们推荐什么书给他呢?
 
101 102 103他已经知道了,在剩下的书中,我们选取哪几个呢?直觉告诉我们,1和4,5号用户很相似,因此,我们应该用4.5的喜好推测1的喜好,进行推荐。那么4,5都很喜欢104,106,我们就应该推荐这两本书给1.
 
人的内心是这么思考的,代码怎么表示出来呢?
 
 
 
public static void main(String[] args) throws Exception {
File modelFile = null;
if (args.length > 0)
modelFile = new File(args[0]);
if(modelFile == null || !modelFile.exists())
modelFile = new File("intro.csv");加载文件
if(!modelFile.exists()) {
System.err.println("Please, specify name of file, or put file 'input.csv' into current directory!");
System.exit(1);
}
DataModel model = new FileDataModel(modelFile);
 
UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
UserNeighborhood neighborhood =
new NearestNUserNeighborhood(2, similarity, model);
 
Recommender recommender = new GenericUserBasedRecommender(
model, neighborhood, similarity);
 
List<RecommendedItem> recommendations =
recommender.recommend(1, 1);推荐,对于用户1 推荐一个
 
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}
 
}
 
 
 
 
程序输出:
 
RecommendedItem [item:104, value:4.257081]
 
结果说明 推荐104 因为相应的评分为4.25
 
下一章节讲述怎么评价这个结果,这个和我们做生物研究实验一样,就是检验自己的结果的可信性。如果检验可信度高,就可以认为我们的理论是正确的。我们生物经常用到的是T检验,K检验等等,都是经典的理论。

mahout in Action研读(1)-给用户推荐图书的更多相关文章

  1. 【Machine Learning】Mahout基于协同过滤(CF)的用户推荐

    一.Mahout推荐算法简介 Mahout算法框架自带的推荐器有下面这些: l  GenericUserBasedRecommender:基于用户的推荐器,用户数量少时速度快: l  GenericI ...

  2. mahout in Action2.2-给用户推荐图书(1)-直观分析和代码

    This chapter covers  What recommenders are, within Mahout  A first look at a recommender in action ...

  3. mahout in Action2.2-给用户推荐图书(2)-分析对用户推荐书目的结果

    2.2.3 Analyzing the output 在之前的程序运行结果中我们得到的结果输出是: RecommendedItem [item:104, value:4.257081] 程序要求选择一 ...

  4. mahout in Action2.2-给用户推荐图书(3)-评价推荐系统

    推荐系统引擎是一个工具,一种回答问题的手段,"对用户来讲什么是最好的推荐?",在研究回答的前先研究一下这个问题.一个好的推荐的准确含义是什么?如何知道推荐系统是如何生成推荐的?下面 ...

  5. 推荐算法之用户推荐(UserCF)和物品推荐(ItemCF)对比

    一.定义 UserCF:推荐那些和他有共同兴趣爱好的用户喜欢的物品 ItemCF:推荐那些和他之前喜欢的物品类似的物品 根据用户推荐重点是反应和用户兴趣相似的小群体的热点,根据物品推荐着重与用户过去的 ...

  6. 【推荐图书】+ 基于Nios II的嵌入式SoPC系统设计与Verilog开发实例+C#入门经典等

    [推荐图书]+ 基于Nios II的嵌入式SoPC系统设计与Verilog开发实例+C#入门经典等 3赞 发表于 2016/7/4 21:14:12 阅读(1921) 评论(3) 初次接触FPGA,到 ...

  7. Mahout之(二)协同过滤推荐

    协同过滤 —— Collaborative Filtering 协同过滤简单来说就是根据目标用户的行为特征,为他发现一个兴趣相投.拥有共同经验的群体,然后根据群体的喜好来为目标用户过滤可能感兴趣的内容 ...

  8. 在controller的action内, 得到用户发过来的请求地址和参数url

    class PController extends Controller{ public function Log() { echo $_SERVER["HTTP_HOST"] . ...

  9. 推荐图书-《SQL Server 2008商业智能完美解决方案》

    内容简介 <SQL Server 2008商业智能完美解决方案>介绍如何使用Microsoft SQL Server 2008开发商业智能(BI)解决方案.<SQL Server 2 ...

随机推荐

  1. Node.js初接触(一)

    本来还在纠结着到底要学哪一种后台语言呢,突然发现node.js很火,既然能被这么多人推崇,自然是有他的优势的.去百度百科看了一眼,或许是我理解能力太差,并没有了解到很多关于node.js的东西,大概就 ...

  2. FunnelWeb 开源Blog引擎介绍

    FunnelWeb is an open source blog engine, built by developers for developers. Instead of fancy quotes ...

  3. 分享知识-快乐自己:HashMap 与 HashTable 的区别

    特性: HashMap 与 Hashtable 的分析: 1):HashMap简介 1.底层数组+链表实现,可以存储null键和null值,线程不安全 2.HashMap 不是线程安全的 3.Hash ...

  4. filter原理

    index.jsp: <a href="product-input.action">input</a> <form action="prod ...

  5. dyci——IOS动态代码注入

    有时候用xib,更改了布局需要重新运行才可以看到效果,对于比较复杂的应用尤其浪费时间,下面介绍一个工具dyci-不需要重Run应用,也能看到效果 yci的网址:https://github.com/D ...

  6. nginx中关于并发数的问题worker_connections,worker_processes

    我认为,要搞清楚这个公式是否正确,以及如何计算的,那首先要对nginx的各个配置说明有清晰的认识: 从用户的角度,http 1.1协议下,由于浏览器默认使用两个并发连接,因此计算方法: nginx作为 ...

  7. (转)Linux sort命令

    Linux 的 ‘sort’命令的14个有用的范例(一) 2015-5-2 10:29    评论: 3 收藏: 10 编译自:http://www.tecmint.com/sort-command- ...

  8. 寻找数组中第K大数

    1.寻找数组中的第二大数 using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...

  9. 洛谷 P1655 小朋友的球

    题目描述 @发源于 小朋友最近特别喜欢球.有一天他脑子抽了,从口袋里拿出了N个不同的球,想把它们放到M个相同的盒子里,并且要求每个盒子中至少要有一个球,他好奇有几种放法,于是尝试编程实现,但由于他天天 ...

  10. vue-router导航守卫

    导航守卫 译者注 “导航”表示路由正在发生改变. 正如其名,vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航.有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件 ...