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

尼古拉斯豆

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

公告

View Post

mahout:推荐系统入门学习(一)

转自:http://blog.chinaunix.net/uid-26711636-id-3085923.html

 

最近因为公司项目的需要,进入了mahout的相关学习,在hadoop论坛找到了一份入门级别的学习资料,在各大论坛mahout板块的介绍还是相当少,闲话不多说,直接切入正题。

    Mahout是一个基于Hadoop实现各种机器学习与数据挖掘的算法库,它由Lucene的几个代码贡献者发起成立,整个项目是从Taste这个项目发展起来的,目前Mahout已经发布0.6.0最新版本,实现了分布式协同过滤、聚类、分类等算法,已经和Hadoop整合到了一起,成为强大的分布式数据挖掘的工具。

    要想实现和运行代码,需要从apache官方下载mahout包,将其导入Eclipse Java项目中,下载地址为:http://labs.mop.com/apache-mirror//mahout/0.6/,apache mahout官网网址为:http://mahout.apache.org/。

下面代码是本人学习mahout过程中第一个动手写的程序,另带附件,数据排列格式亦有说明。这是一个简单的实例,因为实际推荐系统的训练数据集都是海量的,通过机器学习能得到更加值得信赖的结果。

 

1,101,5.0     // 第一列为用户ID,第二列为物品ID,第三列为该用户对对应物品的喜好程度
1,102,3.0    // 1表示讨厌,5表示非常喜爱,范围为1--5
1,103,2.5

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

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

4,101,5.0
4,103,3.0
4,104,4.5
4,106,4.0

5,101,4.0
5,102,3.0
5,103,2.0
5,104,4.0
5,105,3.5
5,106,4.0

  

 package com.loogn.chart02;

import org.apache.mahout.cf.taste.impl.model.file.*;//FileDataModel

import org.apache.mahout.cf.taste.model.*;//DAtaModel

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.neighborhood.*;

import org.apache.mahout.cf.taste.similarity.*;

import org.apache.mahout.cf.taste.recommender.*;

import java.io.*;

import java.util.*;

public class RecommenderIntro {

public static void main(String[] args) throws Exception{

        DataModel model = new FileDataModel(new

File("E:\\my own task\\mahout\\intro.csv")); //A

/**

         * A 加载数据文件

         */

        UserSimilarity similarity = new PearsonCorrelationSimilarity(model);

        UserNeighborhood neighborhood = new NearestNUserNeighborhood(2,similarity,model);

        Recommender recommender = new GenericUserBasedRecommender(

                model,neighborhood,similarity); // B 建立推荐系统

List<RecommendedItem> recommendations = recommender.recommend(1, 2); //C

/**

         * C为用户1,推荐两个物品

         */

for(RecommendedItem recommendation : recommendations) {

System.out.println(recommendation);// 按mapreduce键/值对的形式呈现推荐项目

}

}

}

 

最后运行结果如下:

RecommendedItem[item:104, value:4.257081]

RecommendedItem[item:106, value:4.0]

分析该运行结果,之所以没有给用户1推荐item107,是考虑到与用户1历史购买记录和用户4以及用户5具有更高的相似度,而107号物品只被用户3喜欢,而且从过往喜好来看,用户1和3存在较大差异,所以选择了具有在4.0和4.5数值的item104,也可以看出其被推荐的优先级高于106.

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

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