• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

尼古拉斯豆

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

利用mahout实现推荐引擎demo1

转自:http://woshiwzy.iteye.com/blog/898115

==========================================================

学习这些高端的东西,有时候真的连怎么运行都不知道,只有代码。

做这个实验只要在eclipse里创建一个java工程,然后写一个java文件,在src下创建一个mahout_data.txt数据文件(代码中指定路径)。然后导入mahout版本.tar.gz解压出来的目录里的jar包就可以运行了。

如果运行时选择run as->java application,则会在本地目录中生成结果文件,如果run as->run on hadoop,则会在hdfs中生成文件。

 

这个例子在mahout in action 中的2.2.1章节有详细介绍。在我的博客mahout in action中文版中会有,建议先看完,再来做这个。

==========================================================

需要的元数据:(这些元数据通常应该来自日志文件,数量可能很大,可能有时候需要集群处理,有时间再和大家讨论。) 

如果把这些数据当做是某网上书店的推荐引擎 

第一列数据可以理解为用户ID,第二列可以理解为书籍ID,第三列可以理解为喜好程度。推荐引擎是学习元数据达到推荐能力,具体到编程中就是 DataMode ,通过对DataMode 的分析,得道一个合理的结果,mahout 本身封装了复杂的统计学,人工神经网络,机器学习相关算法! 

假设 C:\\mahout_data.txt 的内容如下,这些数据作为本次Demo的元数据 

1,101,5.0 
1,102,3.0 
1,103,2.5 

2,101,2.0 
2,102,2.0 
2,103,5.0 
2,104,2.0 

3,101,2.5 
3,104,4.4 
3,105,4.5 
3,107,5.0 

4,101,5.0 
4,102,3.0 
4,103,4.5 
4,105,4.0 

5,101,4.0 
5,102,4.0 
5,103,2.0 
5,104,4.0 
5,105,4.5 
5,106,4.0 


下面是代码 


import org.apache.mahout.cf.taste.impl.model.file.*; 
import org.apache.mahout.cf.taste.impl.neighborhood.*; 
import org.apache.mahout.cf.taste.impl.recommender.*; 
import org.apache.mahout.cf.taste.impl.similarity.*; 
import org.apache.mahout.cf.taste.model.*; 
import org.apache.mahout.cf.taste.neighborhood.*; 
import org.apache.mahout.cf.taste.recommender.*; 
import org.apache.mahout.cf.taste.similarity.*; 
import java.io.*; 
import java.util.*; 

class RecommenderIntro { 
   public static void main(String[] args) throws Exception { 
      DataModel model = new FileDataModel(new   File("C:\\mahout_data.txt")); //加载数据模型,供机器学习使用 
   UserSimilarity similarity = new PearsonCorrelationSimilarity(model);//用户相似度/关联度,这是一种推荐方式 
      UserNeighborhood neighborhood =new NearestNUserNeighborhood(2, similarity, model); 
      Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); //建立一、、个recommender 
         List<RecommendedItem> recommendations =recommender.recommend(1, 1); //给ID为1的顾客推荐一本书
        for (RecommendedItem recommendation : recommendations) { 
        System.out.println(recommendation); 
         } 
     } 
} 

 



程序输出结果 
2011-1-27 11:41:21 org.slf4j.impl.JCLLoggerAdapter info 
信息: Creating FileDataModel for file C:\mahout_data.txt 
2011-1-27 11:41:21 org.slf4j.impl.JCLLoggerAdapter info 
信息: Reading file info... 
2011-1-27 11:41:21 org.slf4j.impl.JCLLoggerAdapter info 
信息: Read lines: 21 
2011-1-27 11:41:21 org.slf4j.impl.JCLLoggerAdapter info 
信息: Reading file info... 
2011-1-27 11:41:21 org.slf4j.impl.JCLLoggerAdapter info 
信息: Read lines: 21 
2011-1-27 11:41:21 org.slf4j.impl.JCLLoggerAdapter info 
信息: Processed 5 users 
RecommendedItem[item:104, value:4.257081] 
        结果应该看最后一句,其他是日志信息,为1推荐了id为104的一本书,推荐度是 value:4.257081,大家一定要明白这个地方推荐的含义: 
      整个过程可以这样理解,这里的推荐显然是给别人介绍他们没有接触过的东西,但是如何推荐呢,就看看和他有相同爱好的人都看了什么书,和他有相同爱好的人看的书,才具有推荐意义,mahout里推荐过程大概就是这样解释的,当然这只是推荐的一种方式.

posted on 2012-05-28 14:11  尼古拉斯豆  阅读(292)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3