mahout入门指南之mahout单机版推荐算法,mahout入门指南


mahout入门指南之mahout单机版推荐算法

 

鄙人最近在研究mahout,网上找了一些入门资料来看,发现都整理的比较乱。折腾了一番,终于搞清楚了。为了让新手们较快入门,决定总结分享一下,写此入门指南。

 

mahout是什么?

mahout是一个机器学习库,里面实现了一些算法,比如推荐算法,聚类算法。

实现方式有单机内存版,也有分布式(hadoop和spark)。

                                   

mahout如何快速入门?

个人觉得单机版的mahout推荐系统demo比较适合初学者。网上有一些入门资料其实也是单机版的算法,但是那些资料都要配置很多“不必要的”的环境,让人瞎折腾,其实只要简单配置一下,了解核心部分就行了。文章最后我会介绍如何跑一个单机版的推荐算法。

 

mahout的学习顺序是?

1 熟悉单机版mahout推荐算法

了解到mahout推荐流程(以基于用户为例):

DataModel读取输入数据,可以是文本,可以是数据库(比如mysql),

定义相似性算法,定义相邻用户的算法,将上面三者给Recommender处理推荐。

2 熟悉分布式版本推荐算法(hadoop或者spark)

区别于单机版:输入输出都在hdfs,运算过程是分布式的。

3 熟悉其他机器学习算法(分类,聚类等)

4 在mahout上开发自己的分布式算法

 

如何跑一个单机版的推荐算法?

这里跑的推荐算法是单机版的user-based的协同过滤算法。

user-based即基于用户的推荐算法,通俗来说,就是推荐相似用户喜好的物品。比如向用户A推荐,先找到用户A的相似用户,假如取Top1,找到用户B,然后把用户B所喜欢但是用户A没有接触过的物品推荐给用户A。

推荐算法有很多种,大家可以网上了解。鄙人是从《大数据-互联网大规模数据挖掘与分布式处理》这本书了解的。

 

好了,终于到了跑代码的环节了。其实有两种方式。

1 下载mahout,解压出各种jar包,Java程序直接调用这些jar的函数

2 安装maven,定义mahout依赖,然后maven会自动下载jar包

 

最方便的是方法1,下面的讲解也是方法1的。

 

预安装环境:

1 Java环境

2 Eclipse

注意,单机版的mahout算法不需要Hadoop环境。

 

 

上面两个环境安装这里不说明,大家网上自己找。

环境安装好后,到mahout官网,下载mahout,解压,可以看到各种jar包。

在Eclipse新建一个Java工程,通过add external jars来导入一些jar包。

 

准备测试数据:

创建一个文本文件,存储用户ID,商品ID,评分,将文件保存为dataset.csv。

第一列为UserID ,第二列为ItemID,第三列为Preference Value 即评分。

1,10,1.0

1,11,2.0

1,12,5.0

1,13,5.0

1,14,5.0

1,15,4.0

1,16,5.0

1,17,1.0

1,18,5.0

2,10,1.0

2,11,2.0

2,15,5.0

2,16,4.5

2,17,1.0

2,18,5.0

3,11,2.5

3,12,4.5

3,13,4.0

3,14,3.0

3,15,3.5

3,16,4.5

3,17,4.0

3,18,5.0

4,10,5.0

4,11,5.0

4,12,5.0

4,13,0.0

4,14,2.0

4,15,3.0

4,16,1.0

4,17,4.0

4,18,1.0

 

代码:

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.UserBasedRecommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;

public class RecUserBasedExample {

	public static void main(String[] args) throws IOException, TasteException {
		// TODO Auto-generated method stub

		DataModel model = new FileDataModel(new File("/home/linger/j2ee-workspace/linger/data/dataset.csv"));
		UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
		UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model);
		UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
		
		//If we wanted to get three items recommended for the user with userID 2, we would do it like this:
		List<RecommendedItem> recommendations = recommender.recommend(2, 3);
		for (RecommendedItem recommendation : recommendations) {
		  System.out.println(recommendation);
		}
	}

}


 

运行代码即可看到推荐结果。

 

参考:

http://mahout.apache.org/users/recommender/userbased-5-minutes.html

mahout官网教程:基于用户的推荐demo

 

http://blog.fens.me/hadoop-mahout-maven-eclipse/

Maven构建Mahout项目

 

http://blog.sina.com.cn/s/blog_6dc9c7cb0101bmch.html

eclipse跑mahout环境搭建和样例代码(有点坑,文章说要先配置好hadoop,其实单机也能跑。)

 

http://www.ibm.com/developerworks/cn/java/j-lo-mahout/(mysql存储数据,tomcat网页交互)


本文作者:linger

本文链接:http://blog.csdn.net/lingerlanlan/article/details/41775509



相关内容