mahout in action推荐系统阅读笔记(1)
来源:互联网 发布:百鸟朝凤影评知乎 编辑:程序博客网 时间:2024/04/30 00:13
第二章:推荐系统介绍
一些概念介绍
寻找你喜欢的item,可以通过和你有相同taste的人来寻找(这就是为啥mahout的前身叫taste的原因吧),也可以通过你已经喜欢的item来寻找相似的。前面的推荐叫user-based,后面的推荐叫item-based,它们都属于collaborative filtering--协同过滤。
协同过滤特点:推荐的产生是基于,而且仅仅基于users和items的关系,不需要知道items的属性(这里有一个疑问,怎么知道item之间是相似的呢?难道不需要知道属性就能推出相似?留着这个疑问到后面理解吧!3月28日补充,item之间的相似性不是通过item属性来得知的,而是通过用户对item的选择来获取的,比如用户购买A物品的时候多数时候也会购买B物品,这样当某个用户购买了A物品,就可以推荐B物品给他,这里不涉及物品任何属性,仅仅是他们一起被购买)
和协同过滤不一样,content based的推荐是和item的属性相关的,内容推荐是domain-specific方法,需要确定哪些属性是需要使用的,使用到什么程度,一个domain的不能翻译到另一个domain,比如推荐书的和推荐pizza的就不一样。
mahout实现的是协同过滤,content based的涉及不多
一个小例子
类型:user based
输入:mahout的术语就叫preferences,这个preferences是user是到items的preferences,一个preference如下表示
userid -- itemid -- preference value
如1,101,5.0代表一个preference,以逗号分隔,preference value越大,代表user对item有更强的正向偏好
userid和itemid通常都是整数
有个疑问,在推荐时候,高和低的preference value对推荐结果都有什么影响,对判断用户是否相似影响多大?这个疑问以后解决,需要看算法和源代码
例子代码
import java.io.File;import java.util.List;import org.apache.mahout.cf.taste.model.DataModel;import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;import org.apache.mahout.cf.taste.similarity.UserSimilarity;import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;import org.apache.mahout.cf.taste.recommender.Recommender;import org.apache.mahout.cf.taste.recommender.RecommendedItem;import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;class RecommenderIntro { public static void main(String[] args) throws Exception { DataModel model = new FileDataModel (new File("intro.csv")); 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); for (RecommendedItem recommendation : recommendations) { System.out.println(recommendation); } }}
数据
1,101,5.01,102,3.01,103,2.52,101,2.02,102,2.52,103,5.02,104,2.03,101,2.53,104,4.03,105,4.53,107,5.04,101,5.04,103,3.04,104,4.54,106,4.05,101,4.05,102,3.05,103,2.05,104,4.05,105,3.55,106,4.0
编译过程:
javac -classpath /opt/workspace/mahout-core-0.5.jar:/opt/workspace/mahout-math-0.5.jar:/opt/workspace/mahout-collections-1.0.jar -d classes/ src/RecommenderIntro.java
jar -cvfm recommendintro.jar MANIFEST.MF -C classes/ .
MANIFEST.MF内容:
Manifest-Version: 1.0Created-By: hedaMain-Class: RecommenderIntroClass-Path: lib/mahout-collections-1.0.jar lib/mahout-core-0.5.jar lib/mahout-math-0.5.jar lib/slf4j-api-1.6.4.jar lib/slf4j-jdk14-1.6.4.jar lib/slf4j-nop-1.6.1.jar lib/guava-r09.jar lib/uncommons-maths-1.2.jar
运行命令和结果:
java -jar recommendintro.jar
RecommendedItem[item:104, value:4.257081]
代码初解读
目前的介绍还不足以完全了解代码,不过可以从大面上先了解下
DataModel存储user,item,preference等计算中需要数据,并提供访问接口
UserSimilarity提供如何计算两个user相似的方法
UserNeighborhood提供如何计算用户的相近组
Recommender利用上面三个对象计算对某个用户的推荐
- mahout in action推荐系统阅读笔记(1)
- mahout in action推荐系统阅读笔记(2)
- mahout in action推荐系统阅读笔记(3)
- mahout in action推荐系统阅读笔记(4)
- mahout in action推荐系统阅读笔记(5)
- mahout in action推荐系统阅读笔记(6)
- mahout in action推荐系统阅读笔记(7)
- Mahout in Action 读书笔记chapter2 推荐系统
- mahout in action推荐系统代码解释
- mahout in action[中文] 第2章 推荐系统简介
- Mahout in action读书笔记&Mahout学习笔记
- mahout in action 笔记---初识
- mahout in action[中文] 第一部分 推荐
- mahout in action 2.3 推荐器考核
- Mahout in Action 读书笔记chapter4 进行推荐
- [mahout in action]mahout中用于推荐引擎的数据结构(一)
- [mahout in action]mahout中用于推荐引擎的数据结构(二)
- mahout in action 1 初识Mahout
- 学习笔记_第四章
- 车道检测模块
- Oracle安装错误ora-00922(缺少或无效选项)
- java 模拟get请求
- [Leetcode] Reverse Linked List II
- mahout in action推荐系统阅读笔记(1)
- select()函数以及有关fd_set宏的用法
- jsp页面动态显示服务器时间
- Adapter报错:The content of the adapter has changed
- Drawing a Color Hue Wheel with C#
- 备份,我们对客户最神圣的承诺
- 我是程序员,我为自己代言
- DOS命令备份MSSQL并RAR压缩
- Android OTA 升级之二:脚本 ota_from_target_files