利用mahout实现推荐引擎demo1
转自:http://woshiwzy.iteye.com/blog/898115
==========================================================
学习这些高端的东西,有时候真的连怎么运行都不知道,只有代码。
做这个实验只要在eclipse里创建一个java工程,然后写一个java文件,在src下创建一个mahout_data.txt数据文件(代码中指定路径)。然后导入mahout版本.tar.gz解压出来的目录里的jar包就可以运行了。
如果运行时选择run as->java application,则会在本地目录中生成结果文件,如果run as->run on hadoop,则会在hdfs中生成文件。
这个例子在mahout in action 中的2.2.1章节有详细介绍。在我的博客mahout in action中文版中会有,建议先看完,再来做这个。
==========================================================
需要的元数据:(这些元数据通常应该来自日志文件,数量可能很大,可能有时候需要集群处理,有时间再和大家讨论。)
如果把这些数据当做是某网上书店的推荐引擎
第一列数据可以理解为用户ID,第二列可以理解为书籍ID,第三列可以理解为喜好程度。推荐引擎是学习元数据达到推荐能力,具体到编程中就是 DataMode ,通过对DataMode 的分析,得道一个合理的结果,mahout 本身封装了复杂的统计学,人工神经网络,机器学习相关算法!
假设 C:\\mahout_data.txt 的内容如下,这些数据作为本次Demo的元数据
1,101,5.0
1,102,3.0
1,103,2.5
2,101,2.0
2,102,2.0
2,103,5.0
2,104,2.0
3,101,2.5
3,104,4.4
3,105,4.5
3,107,5.0
4,101,5.0
4,102,3.0
4,103,4.5
4,105,4.0
5,101,4.0
5,102,4.0
5,103,2.0
5,104,4.0
5,105,4.5
5,106,4.0
下面是代码
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("C:\\mahout_data.txt")); //加载数据模型,供机器学习使用 UserSimilarity similarity = new PearsonCorrelationSimilarity(model);//用户相似度/关联度,这是一种推荐方式 UserNeighborhood neighborhood =new NearestNUserNeighborhood(2, similarity, model); Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); //建立一、、个recommender List<RecommendedItem> recommendations =recommender.recommend(1, 1); //给ID为1的顾客推荐一本书 for (RecommendedItem recommendation : recommendations) { System.out.println(recommendation); } } }
程序输出结果
2011-1-27 11:41:21 org.slf4j.impl.JCLLoggerAdapter info
信息: Creating FileDataModel for file C:\mahout_data.txt
2011-1-27 11:41:21 org.slf4j.impl.JCLLoggerAdapter info
信息: Reading file info...
2011-1-27 11:41:21 org.slf4j.impl.JCLLoggerAdapter info
信息: Read lines: 21
2011-1-27 11:41:21 org.slf4j.impl.JCLLoggerAdapter info
信息: Reading file info...
2011-1-27 11:41:21 org.slf4j.impl.JCLLoggerAdapter info
信息: Read lines: 21
2011-1-27 11:41:21 org.slf4j.impl.JCLLoggerAdapter info
信息: Processed 5 users
RecommendedItem[item:104, value:4.257081]
结果应该看最后一句,其他是日志信息,为1推荐了id为104的一本书,推荐度是 value:4.257081,大家一定要明白这个地方推荐的含义:
整个过程可以这样理解,这里的推荐显然是给别人介绍他们没有接触过的东西,但是如何推荐呢,就看看和他有相同爱好的人都看了什么书,和他有相同爱好的人看的书,才具有推荐意义,mahout里推荐过程大概就是这样解释的,当然这只是推荐的一种方式.