一、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,对其进行编辑。

作为初次尝试,肯定要选比较简单的算法,这里我采用的是基于用户的协同过滤算法来计算推荐商品。完整代码如下:

 package com.mine.mahout.practice;

 import java.io.File;
import java.util.List; import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
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.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity; public class App
{
public static void main( String[] args )
{
try {
// 从文件加载数据
DataModel model = new FileDataModel(new File("e:\\data.csv"));
// 指定用户相似度计算方法,这里采用皮尔森相关度
UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
// 指定用户邻居数量,这里为2
UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model);
// 构建基于用户的推荐系统
Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
// 得到指定用户的推荐结果,这里是得到用户1的两个推荐
List<RecommendedItem> recommendations = recommender.recommend(1, 2);
// 打印推荐结果
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}
} catch (Exception e) {
System.out.println(e);
}
}
}

上面的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包即可。

(本文已移至个人网站freefalcon.cn)

零基础学习Mahout之-----搭建单机环境的更多相关文章

  1. 零基础学习Linux(一)环境搭建

    从本文开始我会为大家介绍一下linux环境下详细的集群环境安装.配置.部署到实例演示的整个过程.在此过程中会给大家详细介绍一下Linux的操作技巧和一些工具的使用.今天开始第一步——环境搭建. 第一步 ...

  2. 零基础学习Linux(三)linux与windows文件共享

    上次的博文零基础学习Linux(一)环境搭建中我们已经将linux环境部署完毕了,接下来我们就可以在linux上进行软件的安装和环境的配置.但在进行这些操作之前,我们还需要解决一个问题——Linux与 ...

  3. 零基础学习Linux(二)网页乱码问题

    上次的博文零基础学习Linux(一)环境搭建中我们已经将Linux环境搭建完毕了,接下来我们就可以进行相关的操作了,在进行操作之前,我们先来看一下大家可能遇到的中文网页乱码问题. 1.问题演示 a)输 ...

  4. 【零基础学习FreeRTOS嵌入式系统】之一:FreeRTOS环境搭建

    [零基础学习FreeRTOS嵌入式系统]之一:FreeRTOS环境搭建 一:FreeRTOS系统下载 在官网上https://www.freertos.org/,找到下载入口. 或直接进入下载地址ht ...

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

    AspectJ基础学习之二搭建环境(转载) 一.下载Aspectj以及AJDT 上一章已经列出了他的官方网站,自己上去download吧.AJDT是一个eclipse插件,开发aspectj必装,他可 ...

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

    零基础学习前端1-1配置node及npm环境变量 ## 1-1配置node及npm环境变量 首先:下载node 可以直接去官方网站下载 1.首先从官网下载安装包 https://nodejs.org/ ...

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

    零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...

  8. 零基础学习Hadoop

    零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...

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

    零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...

随机推荐

  1. MySQL优化器功能开关optimizer_switch

    MySQL 8.0新增特性 use_invisible_indexes:是否使用不可见索引,MySQL 8.0新增可以创建invisible索引,这一开关控制优化器是否使用invisible索引,on ...

  2. ZR#317.【18 提高 2】A(计算几何 二分)

    题意 Sol 非常好的一道题,幸亏这场比赛我没打,不然我估计要死在这个题上qwq 到不是说有多难,关键是细节太多了,我和wcz口胡了一下我的思路,然后他写了一晚上没调出来qwq 解法挺套路的,先提出一 ...

  3. 【Django】Django中datetime的处理(strftime/strptime)

    strftime<将date,datetime,timezone.now()类型处理转化为字符串类型> strftime()函数是用来格式化一个日期.日期时间和时间的函数,支持date.d ...

  4. java中如何设置HTTP协议的头信息(header)

    首先,我们先看一下http的头信息到底是什么:HTTP(HyperTextTransferProtocol) 即超文本传输协议,目前网页传输的的通用协议.HTTP协议采用了请求/响应模型,浏览器或其他 ...

  5. 使用vscode开发vue cli 3项目,配置eslint以及prettier

    初始化项目时选择eslint-config-standard作为代码检测规范,vscode安装ESLint和Prettier - Code formatter两个插件,并进行如下配置 { " ...

  6. videojs的使用

    [官网]http://www.videojs.com/ videojs就提供了这样一套解决方案,他是一个兼容HTML5的视频播放工具,早期版本兼容所有浏览器,方法是:提供三个后缀名的视频,并在不支持h ...

  7. 绘制矩形:描边矩形imagerectangle()、填充矩形imagefilledrectangle()

    <?php //1. 绘制图像资源(创建一个画布) $image = imagecreatetruecolor(500, 300); //2. 先分配一个绿色 $green = imagecol ...

  8. 数据追踪系统Zipkin 及其 Zipkin的php客户端驱动hoopak

    Zipkin是Twitter的一个开源项目,是一个致力于收集Twitter所有服务的监控数据的分布式跟踪系统,它提供了收集数据,和查询数据两大接口服务.Zipkin 是一款开源的分布式实时数据追踪系统 ...

  9. JZOJ 4269. 【NOIP2015模拟10.27】挑竹签

    4269. [NOIP2015模拟10.27]挑竹签 (File IO): input:mikado.in output:mikado.out Time Limits: 1000 ms  Memory ...

  10. 循环(while、for)

    写重复的代码是程序员最不耻的行为,那么如何做到不用写重复代码又能让程序重复一段代码多次呢,循环语句就派上用场拉…… 一.while 循环 # while 语法结构 while 条件: 执行代码.... ...