认识Mahout下的云计算机器学习

认识Mahout下的云计算机器学习

Apache Mahout 是 ApacheSoftware Foundation (ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序,并且,在 Mahout 的最近版本中还加入了对Apache Hadoop 的支持,使这些算法可以更高效的运行在云计算环境中。

在Mahout实现的机器学习算法见下表:

算法类

算法名

中文名

分类算法

Logistic Regression

逻辑回归

Bayesian

贝叶斯

SVM

支持向量机

Perceptron

感知器算法

Neural Network

神经网络

Random Forests

随机森林

Restricted Boltzmann Machines

有限波尔兹曼机

聚类算法

Canopy Clustering

Canopy聚类

K-means Clustering

K均值算法

Fuzzy K-means

模糊K均值

Expectation Maximization

EM聚类(期望最大化聚类)

Mean Shift Clustering

均值漂移聚类

Hierarchical Clustering

层次聚类

Dirichlet Process Clustering

狄里克雷过程聚类

Latent Dirichlet Allocation

LDA聚类

Spectral Clustering

谱聚类

关联规则挖掘

Parallel FP Growth Algorithm

并行FP Growth算法

回归

Locally Weighted Linear Regression

局部加权线性回归

降维/维约简

Singular Value Decomposition

奇异值分解

Principal Components Analysis

主成分分析

Independent Component Analysis

独立成分分析

Gaussian Discriminative Analysis

高斯判别分析

进化算法

并行化了Watchmaker框架

 

推荐/协同过滤

Non-distributed recommenders

Taste(UserCF, ItemCF, SlopeOne)

Distributed Recommenders

ItemCF

向量相似度计算

RowSimilarityJob

计算列间相似度

VectorDistanceJob

计算向量间距离

非Map-Reduce算法

Hidden Markov Models

隐马尔科夫模型

集合方法扩展

Collections

扩展了java的Collections类

Mahout最大的优点就是基于hadoop实现,把很多以前运行于单机上的算法,转化为了MapReduce模式,这样大大提升了算法可处理的数据量和处理性能。

 

Mahout下个性化推荐引擎Taste介绍

Taste是 Apache Mahout 提供的一个个性化推荐引擎的高效实现,该引擎基于java实现,可扩展性强,同时在mahout中对一些推荐算法进行了MapReduce编程模式转化,从而可以利用hadoop的分布式架构,提高推荐算法的性能。

 

在Mahout0.5版本中的Taste, 实现了多种推荐算法,其中有最基本的基于用户的和基于内容的推荐算法,也有比较高效的SlopeOne算法,以及处于研究阶段的基于SVD和线性插值的算法,同时Taste还提供了扩展接口,用于定制化开发基于内容或基于模型的个性化推荐算法。

 

Taste 不仅仅适用于 Java 应用程序,还可以作为内部服务器的一个组件以 HTTP 和 Web Service 的形式向外界提供推荐的逻辑。Taste 的设计使它能满足企业对推荐引擎在性能、灵活性和可扩展性等方面的要求。

 

下图展示了构成Taste的核心组件:

 

 

 

从上图可见,Taste由以下几个主要组件组成:

 

DataModel:DataModel是用户喜好信息的抽象接口,它的具体实现支持从指定类型的数据源抽取用户喜好信息。在Mahout0.5中,Taste 提供JDBCDataModel 和 FileDataModel两种类的实现,分别支持从数据库和文件文件系统中读取用户的喜好信息。对于数据库的读取支持,在Mahout 0.5中只提供了对MySQL和PostgreSQL的支持,如果数据存储在其他数据库,或者是把数据导入到这两个数据库中,或者是自行编程实现相应的类。

 

    UserSimilarit和ItemSimilarity:前者用于定义两个用户间的相似度,后者用于定义两个项目之间的相似度。Mahout支持大部分驻留的相似度或相关度计算方法,针对不同的数据源,需要合理选择相似度计算方法。

 

    UserNeighborhood:在基于用户的推荐方法中,推荐的内容是基于找到与当前用户喜好相似的“邻居用户”的方式产生的,该组件就是用来定义与目标用户相邻的“邻居用户”。所以,该组件只有在基于用户的推荐算法中才会被使用。

     Recommender:Recommender是推荐引擎的抽象接口,Taste 中的核心组件。利用该组件就可以为指定用户生成项目推荐列表。

 

Mahout源码目录说明

mahout项目是由多个子项目组成的,各子项目分别位于源码的不同目录下,下面对mahout的组成进行介绍:
1、mahout-core:核心程序模块,位于/core目录下;
2、mahout-math:在核心程序中使用的一些数据通用计算模块,位于/math目录下;
3、mahout-utils:在核心程序中使用的一些通用的工具性模块,位于/utils目录下;
上述三个部分是程序的主题,存储所有mahout项目的源码。
另外,mahout提供了样例程序,分别在taste-web和examples目录下:
4、taste-web:利用mahout推荐算法而建立的基于WEB的个性化推荐系统demo;
5、examples:对mahout中各种机器学习算法的应用程序;
6、bin:bin目录下只有一个名为mahout的文件,是一个shell脚本文件,用于在hadoop平台的命令行下调用mahout中的程序;
在buildtools、eclipse和distribution目录下,有mahout相关的配置文件
7、buildtools目录下是用于核心程序构建的配置文件,以mahout-buildtools的模块名称在mahout的pom.xml文件中进行说明;
8、eclipse下的xml文件是对利用eclipse开发mahout的配置说明;
9、distribution目录下有两个配置文件:bin.xml和src.xml,进行mahou安装时的一些配置信息。
(在开发的时候一般很少对这个目录下的文件进行修改,所以不用太关注,知道大体什么意思就ok)

另 外,在mahout的下载地址下可以看到有个文件夹与mahout处于同一级别,它是mahout项目的分支项目—mahout- collections,用于实现了核心程序中使用的集合类操作,该模块独立于mahout进行开发,是对标准jdk中关于集合类的修改,使其可以适应数 据密集型项目的开发。

在windows xp下利用Eclipse构建Mahout

1. Mahout构建的先决条件

1) JDK,使用1.6版本。需要说明一下,因为要基于Eclipse构建,所以在设置path的值之前要先定义JAVA_HOME变量。

2) Maven,使用2.0.11版本或以上。在eclipse上安装maven插件—m2eclipse。

2. mahout源码获取

与其他Apache下开源项目类似,可以有两种获取源码的方法:

一是通过Subversion检出,检出命令和地址如下

svn co http://svn.apache.org/repos/asf/mahout/trunk

二是直接下载发行版本,下载地址:http://apache.etoak.com//mahout/,打开该地址,可以看到如下目录组织:

到发文为止mahout的发行版本到0.5,点击进入0.5/,进入源码页,如下图:

红色框中的就是mahout的源码压缩文件,可以根据安装的解压工具选择任意一个进行下载。

另外,下载发行版也可以到maven的在线资源库中下载,地址如下:

http://repo2.maven.org/maven2/org/apache/mahout/

3. mahout构建

1)解压mahout源码压缩文件,了解目录结构

利用解压工具把下载的压缩包解压到当前目录,点击进入,可以看到如下目录结构(使用subversion检出的可以在检出的当前目下看到如下目录结构):

2)把源码导入eclipse中

打开eclipse,点击file->import 在开打的对话框中,选择导入maven项目如下图,然后点击next

通过浏览方式,确定mahout源码的根目录,如下图,然后点击finish:

至此,通过eclipse的package explore 可以查看导入的mahout项目的组成,如下图:

3)运行编译

运行时,点开mahout-distribution-0.5,选中其下的pom.xml文件,然后右键选择run as项,就可以对mahout进行构建、编译、测试以及安装等操作。

如果只是要对某个子项目进行操作,可以点击子项目的pom.xml进行运行。

posted on 2011-12-22 11:16 wentingtu 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/wentingtu/archive/2011/12/22/2297496.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361778.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xshell常用的命令

Xshell查看所有的进程:ps -ef|grep tomcat查询该目录下所有的项目:lsXshell查看所有的zookeeper进程:ps -ef|grep zoo 进入到bin目录下 然后启动:./zkServer.sh startchmod命令大全及其解释 https://jingyan.baidu.com/article/5d…

NetBeans 8.0的五个新性能提示

NetBeans 8.0引入了几个新的Java提示 。 尽管有许多与Java Persistence API相关的新提示,但我还是关注Performance类别中的五个新提示。 NetBeans 8.0引入的五个新的“性能提示”是: 已装箱价值的装箱 冗余String.toString() …

centos找不到IFCONFIG命令

# ifconfig  提示命令不存在  使用 # /sbin/ifconfig 即可  原因: 系统默认的环境变量设置不对  在 普通用户 和root用户下分别执行echo $PATH,PATH里少了四个地址:/sbin:/usr/sbin:/usr/local/sbin:/usr/kerberos/sbin  而&#x…

机智云小程序启蒙:WebSocket网页控制

机智云小程序启蒙:WebSocket网页控制 机智云Web版的JS远程控制设备,是调用了机智云开放的Open API和WebSocket API来实现的。这个是设计小程序最好的基础,也可以使无安卓设备的用户用网页远程控制设备。 其中,Open API用到的接口…

js 数据类型判断

判断type类型 isString (o) { //是否字符串return Object.prototype.toString.call(o).slice(8, -1) String }isNumber (o) { //是否数字return Object.prototype.toString.call(o).slice(8, -1) Number }isBoolean (o) { //是否booleanreturn Object.prototype.toString.cal…

Maven排除所有传递依赖项

“ 传递依赖项是Maven 2.0中的新功能。 这样一来,您就可以避免发现和指定自己的依赖项所需的库,并自动将它们包括在内。” 我遇到了一个问题,其中一些依赖项在运行时可用,但在公共关系存储库中不可用。 例如,Hibernate…

Web service 超过了最大请求长度错误解决

Web service 超过了最大请求长度错误解决 System.Web.Services.Protocols.SoapException: 运行配置文件中指定的扩展时出现异常。 ---> System.Web.HttpException: 超过了最大请求长度。 在 System.Web.HttpRequest.GetEntireRawContent() 在 System.Web.HttpRequest.ge…

Hibernate关联映射(一对多/多对多)

版权声明:翀版 https://blog.csdn.net/biggerchong/article/details/843401053. Hibernate关联映射上接Hibernate持久化类:https://blog.csdn.net/biggerchong/article/details/84260707 目录3. Hibernate关联映射 3.1 数据库表之间的关系 3.1.1 一对多…

微信小程序适配iphonex

// 在app.js中判断是否是哪种设备 globalData: { isIphoneX: false, userInfo: null }, onShow:function(){ let that this; wx.getSystemInfo({ success: res>{ // console.log(手机信息res res.model) let modelmes res.model; if (modelmes.search(iPho…

Java Minor发布计划再次进行了调整

2013年,Oracle宣布了Java SE –版本编号方案更改 。 该公告指出,将使用特定的版本号方案来发行受限更新版本(那些“包括新功能和非安全修复程序”)和关键补丁更新(CPU)“那些仅包含安全漏洞修复程序”。 特…

asp.net服务器端跳转页面的三种方法

asp.net服务器端跳转页面的三种方法1、Response.Redirect这个跳转页面的方法跳转速度不快,因为它要走2次回发(postback)。 它可以跳转到任何页面,没有站点页面限制(可以由baidu跳转到google),但不能跳过登录保护。 速度慢是其最大缺陷&#x…

动态规划--图像压缩

<算法设计与分析> --王晓东 题目描述和解析参照&#xff1a;http://blog.csdn.net/liufeng_king/article/details/8648195 他在那里分析得非常的详细。我也是按照这种思路来解的&#xff0c;而且算法设计与实现的课件上也是这么个解法。 主要是理解这个公式&#xff0c;…

如何安全使用SWT的显示器asyncExec

大多数用户界面&#xff08;UI&#xff09;工具包都是单线程的&#xff0c; SWT也不例外。 这意味着必须仅从单个线程&#xff08;即所谓的UI线程&#xff09;访问UI对象。 另一方面&#xff0c;应在后台线程中执行长时间运行的任务&#xff0c;以使UI保持响应。 这使得后台线程…

解决添加Com引用 生成的Interop.*.dll 版本号永远是1.0的问题

在项目里面&#xff0c;添加对COM的引用时&#xff0c;自动生成了Interop.*.dll&#xff0c;但是这个dll的版本号永远是1.0. 如果使用InstallShield 制作安装包&#xff0c;进行修改安装时&#xff0c;这个dll不会被更新&#xff0c;就因为版本号永远是1.0 想修改这个版本号&am…

web页面全角半角

根据Unicode编码&#xff0c;全角空格为12288&#xff0c;半角空格为32 &#xff1b; 其他字符半角(33-126)与全角(65281-65374)的对应关系是&#xff1a;均相差65248 全角-->半角函数 //半角转换为全角函数 function ToBCD(str) { var tmp ""; for(var i0;…

Cannot find module '@babel/plugin-proposal-class-properties'

cnpm install --save-dev babel/plugin-proposal-class-properties转载于:https://www.cnblogs.com/qq917937712/p/11226922.html

可选和对象:空指针救星!

没有人喜欢空指针异常 &#xff01; 我们有办法摆脱它们吗&#xff1f; 也许 。 。 。 这篇文章中讨论了几种技术&#xff1a; 可选类型&#xff08;Java 8中的新增功能&#xff09; 对象类&#xff08;旧的Java 7东西&#xff01;&#xff09; Java 8中的可选类型 它是什…

oracle 存储过程的基本语法 及注意事项

oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字( 参数1 IN NUMBER, 参数2 IN NUMBER) IS变量1 INTEGER :0;变量2 DATE;BEGIN END 存储过程名字2.SELECT INTO STATEMENT 将select查询的结果存入到变量中&#xff0c;可以同时将多个列存…

function——函数声明头的提升和预解析

函数&#xff1a; 即function语句的集合&#xff0c;就是将多个语句封装到一起&#xff1b; 函数的执行要会自己遍历&#xff0c;遇见函数 a&#xff08;&#xff09;&#xff1b;执行语句&#xff0c;就要移交控制权&#xff0c;函数执行完毕之后&#xff0c;控制权又移交回…

在JDeveloper 12.1.3中将Java API用于WebSockets

介绍 最新版本的JDeveloper 12c&#xff08;12.1.3.0&#xff09;和WebLogic Server 12.1.3一起提供了一些新的Java EE 7功能。 其中之一是对用于WebSocket的JSR 356 Java API的支持。 实际上&#xff0c;从12.1.2.0版本开始就支持WebSocket协议&#xff08;RFC 6455&#xff0…