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

最近因为公司项目的需要,进入了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过程中第一个动手写的程序,另带附件,数据排列格式亦有说明。这是一个简单的实例,因为实际推荐系统的训练数据集都是海量的,通过机器学习能得到更加值得信赖的结果。 


intro.txt   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 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.

你可能感兴趣的:(Mahout)