win7下使用Taste实现协同过滤算法
如果要实现Taste算法,必备的条件是:
1) JDK,使用1.6版本。需要说明一下,因为要基于Eclipse构建,所以在设置path的值之前要先定义JAVA_HOME变量。
2) Maven,使用2.0.11版本或以上。在eclipse上安装maven插件—m2eclipse。
3)Apache Mahout,使用0.5版本。
Apache Mahout -Taste Documentation中的安装步骤:
- 4. Demo
- To build and run the demo, follow the instructions below, which are written for Unix-like
- operating systems:
- 1. Obtain a copy of the Mahout distribution, either from SVN or as a downloaded archive.
- 2. Download the "1 Million MovieLens Dataset" from http://www.grouplens.org/.
- 3. Unpack the archive and copy movies.dat and ratings.dat to
- trunk/taste-web/src/main/resources/org/apache/mahout/cf/taste/example/
- under the Mahout distribution directory.
- 4. Navigate to the directory where you unpacked the Mahout distribution, and navigate
- totrunk.
- 5. Runmvn install, which builds and installs Mahout core to your local repository
- 6. cd taste-web
- 7. cp ../examples/target/grouplens.jar ./lib
- 8. Edit recommender.properties and fill in therecommender.class:
- recommender.class=org.apache.mahout.cf.taste.example.grouplens.GroupLe
- 9. mvn package
- 10.mvn jetty:run-war. You may need to give Maven more memory: in a bash shell,
- export MAVEN_OPTS=-Xmx1024M
- 11.Get recommendations by accessing the web application in your browser:
- http://localhost:8080/RecommenderServlet?userID=1
- This will produce a simple preference-item ID list which could be consumed by a client
- application. Get more useful human-readable output with the debug parameter:
- http://localhost:8080/RecommenderServlet?userID=1&debug=true
- Incidentally, Taste's web service interface may then be found at:
- http://localhost:8080/RecommenderService.jws
- Its WSDL file will be here...
- http://localhost:8080/RecommenderService.jws?wsdl
- ... and you can even access it in your browser via a simple HTTP request:
- .../RecommenderService.jws?method=recommend&userID=1&howMany=10
一、在window上安装maven
现在Java新架构的不断出现,例如Struts,Spring,Hibernate等,项目的配置文件的增多,给开发人员带来很大麻烦。在实际的开发当中,Myeclipse中的project越来越庞大,所依赖的第三方Jar包越来越多,这显得Project很臃肿,给项目管理带来了很大不便,尤其是在一些大型项目。为了解决上述问题,Apache开源组织发布了Maven,它适用于大的Java项目。
有关maven介绍见《Maven权威指南》 ,下载地址:http://www.juvenxu.com/mvn-def-guide/
安装步骤:
1、下载包,见http://maven.apache.org/download.html
2、解压缩,将其中的bin目录设置到windows Path环境变量中,maven也是依赖jdk的,先装好jdk,在环境变量里面配置好jdk。
2.1、设置JAVA_HOME(顾名其意该变量的含义就是java的安装路径),找到path,然后点编辑,path变量的含义就是系统在任何路径下都可以识别java命令,则变量值为“.;%JAVA_HOME%\bin”,
2.2、新建变量名:M2_HOME,变量值:E:\maven\apache-maven-2.2.1,注意这里不含bin的路径。2、在path后追加;%M2_HOME%\bin,注意这里到bin目录
3、测试安装是否成功:开始->运行->cmd->mvn -version
注意:当提示mvn提示不是内部命令或外部命令,是因为在设置环境变量path的时候,可能覆盖了原先设置着的变量,只要在path后面添加变量:%SystemRoot%\system32;
4、在eclipse中安装maven插件http://she.iteye.com/blog/1217812、http://www.cnblogs.com/freeliver54/archive/2011/09/07/2169527.html
5、使用links管理eclipse插件http://blog.csdn.net/cfyme/article/details/6099056/
二、在windows上构建Apache Mahout环境
Apache Mahout 是 Apache Software Foundation (ASF) 开发的一个全新的开源项目,其主要目标是创建一些可伸缩的机器学习算法,供开发人员在 Apache 在许可下免费使用。该项目已经发展到了它的最二个年头,目前只有一个公共发行版。Mahout 包含许多实现,包括集群、分类、CP 和进化程序。
详细内容见:
1、Apache Mahout 简介http://www.ibm.com/developerworks/cn/java/j-mahout/
2、Maven 2.0:编译、测试、部署、运行http://www.ideagrace.com/html/doc/2006/06/14/00847.html
开始构建:
1、基于 Apache Mahout 构建社会化推荐引擎http://www.ibm.com/developerworks/cn/java/j-lo-mahout/
本文是由此篇文章引申而来,所以具体就是实现了“Taste的安装于简单的Demo实现”。
2、使用mvn搭建Mahout环境 http://anqiang1900.blog.163.com/blog/static/1141888642010380255296/
简单来说就是将Mahout源码从官网上下载下来后,在dos下切换到根文件夹后执行mvn install。
3、在Eclipse中构建Mahout http://www.cnblogs.com/dlts26/archive/2011/09/13/2174889.html
就是将Mahout源码导入Eclipse从而形成Maven工程。再在mahout文件夹下执行maven install(如果上一步没做这个的话)。
三、运行Apache Mahout中的Taste Webapp例子
Taste 是 Apache Mahout 提供的一个协同过滤算法的高效实现,它是一个基于 Java 实现的可扩展的,高效的推荐引擎。
1.修改mahout-taste-webapp工程的pom.xml,添加对mahout-examples的依赖
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>mahout-examples</artifactId>
<version>0.5</version>
</dependency>
2.在mahout-taste-webapp工程的recommender.properties中添加
recommender.class=org.apache.mahout.cf.taste.example.grouplens.GroupLensRecommender
3.从http://www.grouplens.org/node/73上下载数据文件,我下载的是1M Ratings Data Set (.tar.gz)经过测试验证通过,其他数据文件请自行验证。解压以后将ratings.dat复制到mahout-taste-webapp工程的/org/apache/mahout/cf/taste/example/grouplens/下,至于为什么是这个路径?请大家去看这个类GroupLensDataModel。
4.现在准备工作基本完成了,cd到taste-web我们来运行一把
mvn jetty:run-war
5.访问一下http://localhost:8080/RecommenderServlet?userID=1就能看到效果,这个servlet还支持其他参数请参看RecommenderServlet的javadoc说明
详细内容见http://seanhe.iteye.com/blog/1124682
四、遇到的问题
1、在Eclipse中配置Maven时遇到的问题
启动eclipse的时候会提示warning:找不到jdk啥的,解决办法:
在eclipse.ini文件中加入如下两行(vm指向javaw.exe的位置,或者直接到bin那里也可以):
-vm
D:\Development\Java\jdk1.5.0_16\bin\javaw.exe(注意这两行加到-startup与-launcher.library之间)
2、在windows上构建mahout环境时出现的问题:
2.1在mahout目录下,运行"mvn install"时,遇到以下错误
Cannot run program "chmod": CreateProcess error=2
chmod是linux命令,此错误是由于 Cygwin + Hadoop 跑在 Windows 上出现的。
也就是说如果当前在windows下进行mahout编译,一定要确保正确安装了Cygwin(按照下面的教程装上Cygwin便可,后面hadoop的配置可以不用全部完成!)
这里用几个比较好的教材,讲解如何在windows下安装Hadoop Cluster(
http://ebiquity.umbc.edu/Tutorials/Hadoop/00%20-%20Intro.html
http://hayesdavis.net/2008/06/14/running-hadoop-on-windows/)
下载 hadoop-0.19.1在 http://archive.apache.org/dist/hadoop/core/hadoop-0.19.1/
2.2在Cygwin中运行命令ssh localhost连接不成功时出现Connection closed by ::1错误
Cygwin,耗时近xxxx个小时,查遍中文外文文献,终于将此题目解决。问题描述:在Win7下Cygwin中,使用sshlocalhost命令, 出现Connectionclosedby127.0.0.1的问题。解决方案:1、开端——运行——services.msc2、右键 CYGWINsshd——属性——登录选项卡——选择“此账户”——浏览——高级——立即查找——选择你的账户名(必须为治理员权限)——输进密码(必须 要有,空密码不承受,且和电脑登录密码相同)——确定。3、重启CYGWINsshd效劳即可。这样就以你的账户的名义启动了这个效劳。而后sshlocalhost成功。这样 做的一个缺点可能是你要给电脑设个密码
详见:http://blog.sina.com.cn/s/blog_4abbf0ae0100r8hh.html
3、运行Taste Webapp时遇到的问题
在Eclipse中配置好mahout后,就可以在mahout中运行taste-webapp算法了。
文中1,2步骤由于前面已经配置好,就直接从第3步开始配置mahout-taste-webapp中的内容。
出现的问题:
在浏览器栏输入http://localhost:8080/RecommenderServlet?userID=1后出现错误:
HTTP ERROR: 404
Problem accessing /RecommenderServlet. Reason:
Not Found
Powered by Jetty://
仔细查看第7步mvn jetty:run-war时,发现其中出现错误:
WARN::FAILED taste-recommender: java.lang.OutOfMemoryError: Java heap space
表明出现maven工程内存溢出。
解决办法:
Windows环境中
在Maven安装目录中找到文件%M2_HOME%\bin\mvn.bat ,这就是启动Maven的脚本文件,在该文件中你能看到有一行注释为:
@REM set MAVEN_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE...
它的意思是你可以设置一些Maven参数,我们就在注释下面加入一行:
set MAVEN_OPTS=-Xmx1024M
或者,在执行mvn jetty:run-war命令之前,执行
F:\mahout-distribution-0.5\taste-web>set MAVEN_OPTS=-Xmx1024M
我们看到,配置的Maven选项生效了,OutOfMemoryError也能得以相应的解决。
win7下使用Taste实现协同过滤算法的更多相关文章
- Spark机器学习之协同过滤算法
Spark机器学习之协同过滤算法 一).协同过滤 1.1 概念 协同过滤是一种借助"集体计算"的途径.它利用大量已有的用户偏好来估计用户对其未接触过的物品的喜好程度.其内在思想是相 ...
- Collaborative Filtering(协同过滤)算法详解
基本思想 基于用户的协同过滤算法是通过用户的历史行为数据发现用户对商品或内容的喜欢(如商品购买,收藏,内容评论或分享),并对这些喜好进行度量和打分.根据不同用户对相同商品或内容的态度和偏好程度计算用户 ...
- Slope one—个性化推荐中最简洁的协同过滤算法
Slope One 是一系列应用于 协同过滤的算法的统称.由 Daniel Lemire和Anna Maclachlan于2005年发表的论文中提出. [1]有争议的是,该算法堪称基于项目评价的non ...
- Mahout实现基于用户的协同过滤算法
Mahout中对协同过滤算法进行了封装,看一个简单的基于用户的协同过滤算法. 基于用户:通过用户对物品的偏好程度来计算出用户的在喜好上的近邻,从而根据近邻的喜好推测出用户的喜好并推荐. 图片来源 程序 ...
- mahout协同过滤算法各接口
Mahout协同过滤算法 Mahout使用了Taste来提高协同过滤算法的实现,它是一个基于Java实现的可扩展的,高效的推荐引擎.Taste既实现了最基本的基于用户的和基于内容的推荐算法,同时也提供 ...
- Spark MLlib协同过滤算法
算法说明 协同过滤(Collaborative Filtering,简称CF,WIKI上的定义是:简单来说是利用某个兴趣相投.拥有共同经验之群体的喜好来推荐感兴趣的资讯给使用者,个人透过合作的机制给予 ...
- 基于Python协同过滤算法的认识
Contents 1. 协同过滤的简介 2. 协同过滤的核心 3. 协同过滤的实现 4. 协同过滤的应用 1. 协同过滤的简介 关于协同过滤的一个最经典的例子就是看电影,有时候 ...
- 吴裕雄--天生自然HADOOP操作实验学习笔记:协同过滤算法
实验目的 初步认识推荐系统 学会用mapreduce实现复杂的算法 学会系统过滤算法的基本步骤 实验原理 前面我们说过了qq的好友推荐,其实推荐算法是所有机器学习算法中最重要.最基础.最复杂的算法,一 ...
- spark机器学习从0到1协同过滤算法 (九)
一.概念 协同过滤算法主要分为基于用户的协同过滤算法和基于项目的协同过滤算法. 基于用户的协同过滤算法和基于项目的协同过滤算法 1.1.以用户为基础(User-based)的协同过滤 用相似统 ...
随机推荐
- CAP原则(CAP定理)、BASE理论
CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼. CA ...
- 0xWS2812 STM32 driver for WS2812(B) RGB LEDs
0xWS2812 STM32 driver for WS2812(B) RGB LEDs 0xWS2812 pronounced "hex-WS2812" This code ai ...
- [Deepin 15] 编译安装 MySQL-5.6.35
在 Ubuntu 下,先前一直是 二进制包解压安装,详情参考: http://www.cnblogs.com/52php/p/5680906.html 现改为 源码编译安装: #!/bin/bash ...
- NSLineBreakMode 的区别
typedef enum { UILineBreakModeWordWrap = 0, UILineBreakModeCharacterWrap, UILineBreakMod ...
- 解决SVN CONNOT VERIFY LOCK ON PATH NO MATCHING LOCK-TOKEN AVAILABLE
最近使用SVN,开发项目的时候,璞玉遇到一个问题.就是: connot verify lock on path no matching lock-token available connot v ...
- NSNotificationCenter消息注册与撤销
苹果的消息机制是个非常好用的东西,当需要在类的各个实例之间传递消息或者写一些事件驱动的程序时,绝对是个不错的工具.但是使用时一不小心就会造成引用已经被dealloc的对象的错误,引起程序崩溃.于是,在 ...
- HDU 1575 Tr A(矩阵高速幂)
题目地址:HDU 1575 矩阵高速幂裸题. 初学矩阵高速幂.曾经学过高速幂.今天一看矩阵高速幂,原来其原理是一样的,这就好办多了.都是利用二分的思想不断的乘.仅仅只是把数字变成了矩阵而已. 代码例如 ...
- Unity5中新的Shader体系简析
一.Unity5中新的Shader体系简析 Unity5和之前的书写模式有了一定的改变.Unity5时代的Shader Reference官方文档也进一步地变得丰满. 主要需要了解到的是,在原来的Un ...
- iTunes Connect开发者指南中的一个疑问
iTunes Connect Developer Guide 避免app版本出现在iClound中,我的疑问是对已经上架的版本不能设置,那么这个功能的真正意义在哪里? 大部分用户去应用页面下载 ...
- Android之文件搜索工具类
/** * @detail 搜索sdcard文件 * @param 需要进行文件搜索的目录 * @param 过滤搜索文件类型 * */ private void search(File file, ...