二、安装Eclipse
这个没啥说的,再怎么零基础,也要会用Eclipse吧。
Eclipse的下载地址为: http://www.eclipse.org/downloads/ ,选择标准版就行。
安装完后运行Eclipse,为后续的安装做好准备。
三、安装Maven
Maven又是什么?这里只需要知道它是一个项目管理工具就行,有了它,可以非常方面的安装Mahout和相关依赖组件。
Maven的官方网站为: http://maven.apache.org/ ,它是一个命令行工具,这里我们安装的是它的Eclipse插件版本(m2eclipse),其地址为: http://www.eclipse.org/m2e/ ,已安装Maven的朋友可以跳过本小节。
下面是m2eclipse的安装方法。
进入的下载页面: http://www.eclipse.org/m2e/download/
安装m2eclipse方法有两种,一种是在上面的Install图标上按下鼠标,然后拖动到Eclipse的窗口(看哪里能够释放鼠标就拖到哪里,比如标题栏),稍后就会弹出如下对话框,点击“Confirm”即可。
第二种方法是通过Eclipse帮助菜单下的安装新软件(Install New Software)安装:
点了上面菜单后,会弹出如下对话框,点击Add按钮,然后输入Name和Location(http://download.eclipse.org/technology/m2e/releases),Location是从前面的网页里面复制而来。
确定后,会显示如下内容,选择所有项目,然后点击Next
同意授权,点击Finish,Maven插件就会自动被安装。
安装完毕后,可通过Help > About > Installation Details确认已安装的插件。
四、使用Maven构建Mahout项目
运行Eclipse,通过菜单File > New > Project新建项目,选择Maven Project
直接Next
选择maven-archetype-quickstart
输入GroupId和ArtifactId,可以根据自己喜好随便命名:
点了Finish后,Eclipse便会创建如下一个工程:
双击pom.xml,在右边的面板中选择Dependencies,点击Add,在弹出的对话框中输入mahout,Maven便会搜索相关包,选择mahout-core,确定。
然后按Ctrl+S保存 pom.xml,maven便会下载相关jar包,在项目的Dependencies目录下可以看到这些jar包。
到此,我们的环境就已搭建完毕,接下来便是编写代码。
五、编写代码,运行程序
双击App.java,对其进行编辑。
作为初次尝试,肯定要选比较简单的算法,这里我采用的是基于用户的协同过滤算法来计算推荐商品。完整代码如下:
1 package com.mine.mahout.practice;
2
3 import java.io.File;
4 import java.util.List;
5
6 import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
7 import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
8 import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
9 import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
10 import org.apache.mahout.cf.taste.model.DataModel;
11 import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
12 import org.apache.mahout.cf.taste.recommender.RecommendedItem;
13 import org.apache.mahout.cf.taste.recommender.Recommender;
14 import org.apache.mahout.cf.taste.similarity.UserSimilarity;
15
16
17 public class App
18 {
19 public static void main( String[] args )
20 {
21 try {
22 // 从文件加载数据
23 DataModel model = new FileDataModel(new File("e:\\data.csv"));
24 // 指定用户相似度计算方法,这里采用皮尔森相关度
25 UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
26 // 指定用户邻居数量,这里为2
27 UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model);
28 // 构建基于用户的推荐系统
29 Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
30 // 得到指定用户的推荐结果,这里是得到用户1的两个推荐
31 List<RecommendedItem> recommendations = recommender.recommend(1, 2);
32 // 打印推荐结果
33 for (RecommendedItem recommendation : recommendations) {
34 System.out.println(recommendation);
35 }
36 } catch (Exception e) {
37 System.out.println(e);
38 }
39 }
40 }
上面的e:\data.csv为数据文件,数据的第一列为用户ID,第二列为商品ID,第三列为用户对商品的评分:
1,101,5 1,102,3 1,103,2.5 2,101,2 2,102,2.5 2,103,5 2,104,2 3,101,2.5 3,104,4 3,105,4.5 3,107,5 4,101,5 4,103,3 4,104,4.5 4,106,4 5,101,4 5,102,3 5,103,2 5,104,4 5,105,3.5 5,106,4
(备注:上面的代码和测试数据均参考自这篇博文: http://blog.csdn.net/aidayei/article/details/6626699 )
接下来就可以运行程序了,选择Java Application:
选择App,或者前面直接对App.java执行运行,而不用对整个项目执行运行。
最后得到输出结果如下:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
RecommendedItem[item:104, value:4.257081]
RecommendedItem[item:106, value:4.0]
可以看到,Mahout为用户1提供了两个推荐商品,分别是104和106。
这样,我们便完成了第一个Mahout程序,整个过程还算简单吧?希望对“零基础”的朋友有所帮助。
补充:前面的运行结果显示三行红字,说是slf4j里面的StaticLoggerBinder加载失败,虽说它不影响程序运行结果,但看着实在烦人,解决办法是再次编辑pom.xml的dependencies,添加一个slf4j-nop包即可。