零基础学习Mahout之一:搭建单机环境

一、Mahout是什么?

Mahout是Apache的一个开源项目(http://mahout.apache.org/),提供了机器学习领域的若干经典算法,以便开发人员快速构建机器学习和数据挖掘方面的应用。

Mahout是基于Hadoop的。从名称上看也很有意思,Hadoop是一个大象的名字,而Mahout则是象夫、看象人,可见二者联系之紧密。(这让我自然联想到Sun和Eclipse...)

我此时是一个完全没用过Mahout的门外汉,对Hadoop也没有实际使用经验,算是真正的零基础。我的目标是希望以最简单的方式搭建起一个Mahout的开发环境,以最快的速度让Mahout工作起来,以方便后续的进一步学习。

于是,经过一番折腾,便有了本文。本文记录了Windows下Eclipse+Maven+Mahout单机环境的搭建过程。我不知道这是不是最简单的Mahout开发环境,但它应该算得上是比较简单的。

二、安装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包即可。

零基础学习Mahout之一:搭建单机环境

时间: 2024-08-09 21:46:31

零基础学习Mahout之一:搭建单机环境的相关文章

零基础学习Mahout之-----搭建单机环境

一.Mahout是什么? Mahout是Apache的一个开源项目(http://mahout.apache.org/),提供了机器学习领域的若干经典算法,以便开发人员快速构建机器学习和数据挖掘方面的应用. Mahout是基于Hadoop的.从名称上看也很有意思,Hadoop是一个大象的名字,而Mahout则是象夫.看象人,可见二者联系之紧密.(这让我自然联想到Sun和Eclipse...) 我此时是一个完全没用过Mahout的门外汉,对Hadoop也没有实际使用经验,算是真正的零基础.我的目标

零基础学习python-搭建python开发环境

不管用什么工具开发Python程序,都必须安装Python的运行环境.由于Python是跨平台的,所以在安装之前,先要确定在哪一个操作系统平台上安装,目前最常用的是Windows.Mac OS X和Linux三大平台,这里主要讲下Windows平台中搭建python环境. 1.Python的下载 首先需要去python官网下载python安装包 下载后,双击下载包,进入 Python 安装向导,安装非常简单,你只需要使用默认的设置一直点击"下一步"直到安装完成即可 2.环境变量配置 在

AspectJ基础学习之二搭建环境(转载)

AspectJ基础学习之二搭建环境(转载) 一.下载Aspectj以及AJDT 上一章已经列出了他的官方网站,自己上去download吧.AJDT是一个eclipse插件,开发aspectj必装,他可以提供语法检查,以及编译.这里要说一点重要的知识: aspectj不能使用传统的JDK编译,他的编译器扩展自JDK.AJDT提供的编译功能,就为我们省了很多事,当然你也可以用命令行自己去编译(不过我从来没有这么做过). 无论是apsectj的安装,还是AJDT网上还是有很多文章讲的.不会的同学可以自

零基础学习前端1-1配置node及npm环境变量

零基础学习前端1-1配置node及npm环境变量 ## 1-1配置node及npm环境变量 首先:下载node 可以直接去官方网站下载 1.首先从官网下载安装包 https://nodejs.org/ 我这里下载的是windows的 可以进去选择版本 下载后的安装包 2.下一步直接安装,可以选择对应的目录,建议不要选择默认的path 我这里的安装目录:E:\webyikeshuo\node 3.接下来去配置path,"我的电脑"-右键-"属性"-"高级系统

零基础学习 Hadoop 如何下手

想学习hadoop,可是苦于自己没有任何的基础,不知道该如何下手,也不知道自己能不能学会.其实零基础学习hadoop,没有想象的那么困难.曾经我也是一位小白,刚接触到云计算,想过培训,但是培训机构的选择也让我很纠结,就自己开始去摸索学习,现在我把自己的学习思路整理一下,希望对大家有帮助. 首先整体说一下学习过程给大家借鉴: 一.了解hadoop: 这里不具体阐述概念,有兴趣的同学可以自己上网去查.我们知道hadoop,有单机安装,伪分布安装和分布安装.同时hadoop的环境是Linux,所以我们

零基础学习hadoop到上手工作线路指导(编程篇)

问题导读:1.hadoop编程需要哪些基础?2.hadoop编程需要注意哪些问题?3.如何创建mapreduce程序及其包含几部分?4.如何远程连接eclipse,可能会遇到什么问题?5.如何编译hadoop源码? 阅读此篇文章,需要些基础下面两篇文章零基础学习hadoop到上手工作线路指导(初级篇) 零基础学习hadoop到上手工作线路指导(中级篇)如果看过的话,看这篇不成问题,此篇讲hadoop编程篇. hadoop编程,hadoop是一个Java框架,同时也是编程的一次革命,使得传统开发运

零基础学习hadoop到上手工作线路指导(中级篇)

此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结. 五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解: hadoop分为hadoop1.X.hadoop2.X,并且还有hadoop生态系统.这里只能慢慢介绍了.一口也吃不成胖子. hadoop 1.x分为 mapreduce与hdfs其中mapreduce是很多人都需要迈过去的槛,它比较难以理解,我们有时候即使写出了mapreduce程序,但是还是摸不着头脑. 我们不知

Android 零基础学习之路

第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和StringBuffer的使用.正则表达式. 3.面向对象的抽象,封装,继承,多态,类与对象,对象初始化和回收:构造函数.this关键字.方法和方法的参数传递过程.static关键字.内部类,Java的垃极回收机制,Javadoc介绍. 4.对象实例化过程.方法的覆盖.final关键字.抽象类.接口.继承的优点和缺点剖析:对象的多态性:子类和父类之间的转换.抽象类和接口在多态中的应用.多态带来的好处.

零基础学习hadoop到上手工作线路指导

问题导读: 1.hadoop编程需要哪些基础? 2.hadoop编程需要注意哪些问题? 3.如何创建mapreduce程序及其包含几部分? 4.如何远程连接eclipse,可能会遇到什么问题? 5.如何编译hadoop源码? 阅读此篇文章,需要些基础下面两篇文章 零基础学习hadoop到上手工作线路指导(初级篇) http://www.aboutyun.com/thread-6780-1-1.html 零基础学习hadoop到上手工作线路指导(中级篇) http://www.aboutyun.c