Mahout是一个机器学习,推荐引擎的开源软件。官网地址:http://mahout.apache.org/
推荐原理可以参考:http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy2/index.html
1. 推荐原理
基于用户的 CF(User CF)(Collaborative Filtering, 简称 CF),
基于用户的 CF 的基本思想相当简单,基于用户对物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。计算上,就是将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,找到 K 邻居后,根据邻居的相似度权重以及他们对物品的偏好,预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表作为推荐。图 2 给出了一个例子,对于用户 A,根据用户的历史偏好,这里只计算得到一个邻居 - 用户 C,然后将用户 C 喜欢的物品 D 推荐给用户 A。
首先从官网上下载mahout的发布包,当前版本是0.7.
2. 创建用户喜好文件
参考mahout in action, 创建一个用户(User)和商品(Item)的喜好文件intro.csv, 一行一条:
用户id,ItemID, 喜好程度 1,101,5.0 #用户1对101的打分为5.0 1,102,3.0 1,103,2.5 2,101,2.0 #用户2对101的打分为2.0 。。。
喜好关系见图,具体见附件
3. 创建工程
创建一个pom工程的文件,在pom.xml中添加依赖
<dependency> <groupId>org.apache.mahout</groupId> <artifactId>mahout-core</artifactId> <version>0.7</version> <type>jar</type> <scope>compile</scope> </dependency>
主程序:
public class RecommenderIntro { /** * @param args * @throws IOException * @throws TasteException */ public static void main(String[] args) throws IOException, TasteException { //Load the data file DataModel model = new FileDataModel(new File("src/main/resources/intro.csv")); UserSimilarity similarity = new PearsonCorrelationSimilarity(model); UserNeighborhood neighborhood = new NearestNUserNeighborhood (2, similarity, model); //reate the recommender engine Recommender recommender = new GenericUserBasedRecommender( model, neighborhood, similarity); //For user 1, recommend 2 item List<RecommendedItem> recommendations = recommender.recommend(1, 2); for (RecommendedItem recommendation : recommendations) { System.out.println(recommendation); } } }
4 运行结果输出:
RecommendedItem[item:104, value:4.257081] RecommendedItem[item:106, value:4.0]
表示对用户1的推荐为104,106.