mahout 实用教程之一

标签: mahout 程之 | 发表时间:2013-05-19 12:21 | 作者:comaple
出处:http://blog.csdn.net

mahout 实用教程 (一)

                                                                            —by comaple.zhang

 

本文力求把mahout从使用的角度为读者建立一个框架,为后续的使用打下基础。本文为原创文章转载请注明原网址 http://blog.csdn.net/comaple,谢谢。下面首先给出源代码svn地址以及用于测试的公共数据集,大家可以下载并测试。

mahout svn仓库地址: http://svn.apache.org/repos/asf/mahout/trunk

movie length 数据地址:http://www.grouplens.org/system/files/ml-100k.zip

1.    mahout简介

The Apache Mahout™ machine learning library's goal is to build scalable machine learning libraries.

Classification

Logistic Regression (SGD)

Bayesian

Support Vector Machines (SVM)

Perceptron and Winnow

Neural Network

Random Forests

Restricted Boltzmann Machines

Online Passive Aggressive

Boosting

Hidden Markov Models 

Clustering

Canopy Clustering

K-Means Clustering

Fuzzy K-Means

Expectation Maximization (EM)

Mean Shift Clustering

Hierarchical Clustering

Dirichlet Process Clustering

Latent Dirichlet Allocation

Spectral Clustering

Minhash Clustering

Top Down Clustering

Pattern Mining

Parallel FP Growth Algorithm

Dimension reduction

Singular Value Decomposition and other Dimension Reduction Techniques

Stochastic Singular Value Decomposition with PCA workflow

Principal Components Analysis

Independent Component Analysis

Gaussian Discriminative Analysis

Recommenders / Collaborative Filtering

Non-distributed recommenders ("Taste")

Distributed Item-Based Collaborative Filtering

Collaborative Filtering using a parallel matrix factorization 

2.    应用于推荐系统(item-based/user-based/slopone)

2.1小型网站直接集成即可使用(user-based/item-based)

协同过滤主要分为:计算相似度è预测评分è产生推荐

 Preferenceinferre 0.8版本变为capper,他的作用是:评估用户的缺失评分值:

2.1.1 User-based的实现

                                                                        

用户u对第i个商品的评分预测:u为当前用户,v­ i为第i个用户,p(v i)为第i个用户对当前item的评分。

protected float doEstimatePreference(long theUserID, long[] theNeighborhood, long itemID) throws TasteException {

    if (theNeighborhood.length == 0) {

      return Float.NaN;

    }

    DataModel dataModel = getDataModel();

    double preference = 0.0;

    double totalSimilarity = 0.0;

    int count = 0;

    for (long userID : theNeighborhood) {

      if (userID != theUserID) {

        // See GenericItemBasedRecommender.doEstimatePreference() too

        Float pref = dataModel.getPreferenceValue(userID, itemID);

        if (pref != null) {

          double theSimilarity = similarity.userSimilarity(theUserID, userID);

          if (!Double.isNaN(theSimilarity)) {

            preference += theSimilarity * pref;

            totalSimilarity += theSimilarity;

            count++;

          }

        }

      }

}

 

2.1.2 Item-based的实现

                                                

 

第i个item被用户u评分预测,sim(i,j)第i个商品与第j个商品的相似度,p(v j,u)表示用户u对第j个商品的评分。

protected float doEstimatePreference(long userID, PreferenceArray preferencesFromUser, long itemID)

    throws TasteException {

    double preference = 0.0;

    double totalSimilarity = 0.0;

    int count = 0;

    double[] similarities = similarity.itemSimilarities(itemID, preferencesFromUser.getIDs());

    for (int i = 0; i < similarities.length; i++) {

      double theSimilarity = similarities[i];

      if (!Double.isNaN(theSimilarity)) {

        // Weights can be negative!

        preference += theSimilarity * preferencesFromUser.getValue(i);

        totalSimilarity += theSimilarity;

        count++;

      }

}

 

Mathout中实现的相似度度量

PearsonCorrelationSimilarity皮尔逊距离

皮尔森相关系数等于两个变量的协方差除于两个变量的标准差。

                                            

缺点:没有考虑(take into account)用户间重叠的评分项数量对相似度的影响;

 

                                               

EuclideanDistanceSimilarity 欧几里德距离

                                                                              

                                                                                   

缺点:

CosineMeasureSimilarity   余弦距离(0.7变成了 UncenteredCosineSimilarity

                                                                                 

 

                                                                     

标准余弦相似度对方向敏感但对数值不敏感,比如用户对内容评分,5分制,X和Y两个用户对两个内容的评分分别为(1,2)和(4,5),使用余弦相似度得出的结果是0.98,两者极为相似,但从评分上看X似乎不喜欢这2个内容,而Y比较喜欢,为了修正这种不合理性,就出现了调整余弦相似度,Mahout给出了调整余弦相似度的实现。即所有维度上的数值都减去一个均值。

SpearmanCorrelationSimilarity斯皮尔曼等级相关

TanimotoCoefficientSimilarity谷本相关系数

LogLikelihoodSimilarity 对数似然相似度

CityBlockSimilarity基于曼哈顿距离

2.2离线计算,基于中间数据再开发(item-based/slopone)

2.2.1 mahout的源代码结构

                                                              

 

Item-based和slopone都有hadoop实现和单机版实现。User-based没有。

Item-based recommender使用命令:

mahout org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -i input -o output --maxPrefsPerUser 100 -- numRecommendations 20

-s SIMILARITY_COSINE

 

Item-item 相似商品:

mahout org.apache.mahout.cf.taste.hadoop.similarity.item.ItemSimilarityJob --input user-item --output similarity --similarityClassname SIMILARITY_PEARSON_CORRELATION --maxSimilaritiesPerItem 120 --maxPrefsPerUser 1200 --minPrefsPerUser 2 

 

3应用于机器学(贝叶斯/模式挖掘/聚类等…)

3.1快速建模/模型评估

                                                                     

$MAHOUT_HOME/bin/mahout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job

将该数据放到testdata目录下,算法的输出放到output目录下:、

可以采用 mahout clusterdump来查看结果数据也可以输出到本地文件。

Recommender的评估

RecommenderEvaluator evaluator = new AverageAbsoluteDifferenceRecommenderEvaluator();

                                                     

Cluster的模型评估可以参考:

http://nlp.stanford.edu/IR-book/html/htmledition/evaluation-of-clustering-1.html

 

创建seqdirectory

./bin/mahout seqdirectory \
    -i ${WORK_DIR}/20news-all \
    -o ${WORK_DIR}/20news-seq

 

将seqdirectory转换为向量

./bin/mahout seq2sparse \
    -i ${WORK_DIR}/20news-seq \
    -o ${WORK_DIR}/20news-vectors  -lnorm -nv  -wt tfidf

3.2例如PFPGrowth

mahout fpg -i pfp/order_01.txt -o pfp/patterns/output.txt -k 50 -method mapreduce -regex '[\ ]' -s 2

 

pfpgrowth论文参照: http://infolab.stanford.edu/~echang/recsys08-69.pdf

结果示例:

Key: 0: Value: ([0],14), ([368, 0],7), ([0, 53],5), ([368, 0, 53],4), ([950, 0],4), ([682, 826, 523, 950, 277, 475, 0],3), ([682, 826, 523, 950, 475, 0],3), ([183, 0],3), ([168, 0],3), ([682, 826, 523, 168, 950, 277, 475, 0],2), ([368, 684, 401, 428, 0, 53],2), ([368, 871, 239, 0, 257],2), ([368, 766, 183, 0, 831],2), ([368, 684, 401, 428, 0],2), ([937, 57, 450, 0],2), ([710, 173, 0, 731],2), ([368, 871, 239, 0],2), ([368, 766, 183, 0],2), ([710, 173, 0],2), ([419, 581, 0],2), ([368, 4, 0],2), ([368, 242, 0],2), ([183, 366, 0],2), ([676, 0],2), ([460, 0],2), ([35, 0],2), ([298, 0],2), ([171, 0],2), ([10, 0],2)

作者:comaple 发表于2013-5-19 20:21:00 原文链接
阅读:123 评论:0 查看评论

相关 [mahout 程之] 推荐:

mahout 实用教程之一

- - CSDN博客云计算推荐文章
mahout 实用教程 (一). 本文力求把mahout从使用的角度为读者建立一个框架,为后续的使用打下基础. 本文为原创文章转载请注明原网址 http://blog.csdn.net/comaple,谢谢. 下面首先给出源代码svn地址以及用于测试的公共数据集,大家可以下载并测试. mahout svn仓库地址: http://svn.apache.org/repos/asf/mahout/trunk.

Mahout介绍

- - 互联网 - ITeye博客
Mahout 是机器学习和数据挖掘的一个分布式框架,区别于其他的开源数据挖掘软件,它是基于hadoop之上的; 所以hadoop的优势就是Mahout的优势. http://mahout.apache.org/ 上说的Scalable就是指hadoop的可扩展性. Mahout用map-reduce实现了部分数据挖掘算法,解决了并行挖掘的问题.

mahout部署实践

- - CSDN博客云计算推荐文章
一 下载mahout并解压. JAVA_HOME mahout运行需指定jdk的目录. MAHOUT_JAVA_HOME指定此变量可覆盖JAVA_HOME值. HADOOP_HOME  如果配置,则在hadoop分布式平台上运行,否则单机运行. HADOOP_CONF_DIR指定hadoop的配置文件目录.

Mahout: SVDRecommender SVD推荐算法

- -

Mahout实现的机器学习算法

- - ITeye博客
使用命令:mahout -h.   在Mahout实现的机器学习算法见下表:. EM聚类(期望最大化聚类). 并行FP Growth算法. 并行化了Watchmaker框架. 非Map-Reduce算法. 扩展了java的Collections类. Mahout最大的优点就是基于hadoop实现,把很多以前运行于单机上的算法,转化为了MapReduce模式,这样大大提升了算法可处理的数据量和处理性能.

[转]Mahout推荐算法基础

- - 小鸥的博客
Mahout推荐算法分为以下几大类. 2.相近的用户定义与数量. 2.用户数较少时计算速度快. 1.基于item的相似度. 1.item较少时就算速度更快. 2.当item的外部概念易于理解和获得是非常有用. 1基于SlopeOne算法(打分差异规则). 当item数目十分少了也很有效. 需要限制diffs的存储数目否则内存增长太快.

Apache Mahout 0.8 发布,机器学习库

- - 开源中国社区最新新闻
Apache Mahout 0.8 发布了,Apache Mahout 是 Apache Software Foundation (ASF) 开发的一个全新的开源项目,其主要目标是创建一些可伸缩的机器学习算法,供开发人员在 Apache 在许可下免费使用. 该项目已经发展到了它的最二个年头,目前只有一个公共发行版.

基于Mahout的电影推荐系统

- - CSDN博客推荐文章
Apache Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序. 经典算法包括聚类、分类、协同过滤、进化编程等等,并且,在 Mahout 中还加入了对Apache Hadoop的支持,使这些算法可以更高效的运行在云计算环境中.

使用Mahout实现协同过滤 spark

- - zzm
Mahout使用了Taste来提高协同过滤算法的实现,它是一个基于Java实现的可扩展的,高效的推荐引擎. Taste既实现了最基本的基 于用户的和基于内容的推荐算法,同时也提供了扩展接口,使用户可以方便的定义和实现自己的推荐算法. 同时,Taste不仅仅只适用于Java应用程序,它 可以作为内部服务器的一个组件以HTTP和Web Service的形式向外界提供推荐的逻辑.

Mahout推荐算法API详解

- - zzm
Mahout推荐算法API详解. Hadoop家族系列文章, 主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项目包括,YARN, Hcatalog, Oozie, Cassandra, Hama, Whirr, Flume, Bigtop, Crunch, Hue等.