第一部分:

学习Mahout必需要知道的资料查找技能:

学会查官方帮助文档:

解压用于安装文件(mahout-distribution-0.6.tar.gz),找到例如以下位置。我将该文件解压到win7的G盘mahout目录下,路径例如以下所看到的:

G:\mahout\mahout-distribution-0.6\docs

学会查源码的凝视文档:

方案一:用maven创建一个mahout的开发环境(我用的是win7,eclipse作为集成开发环境,之后在Maven
Dependencies中找到对应的jar包《这些多是.class文件》,记得将源码文件解压到自己硬盘的一个目录中,之后填写源码的文件路径就可以)

方案二:直接用eclipse创建一个javaproject,将解压缩的源码文件加入到这个project。既能够查看。

Mahout官网:

http://mahout.apache.org/

https://builds.apache.org/job/Mahout-Quality/javadoc/

Mahout中的Shell命令进行操作:

/bin/mahout  方法名  -h

第二部分:

数据挖掘(机器学习)——聚类算法的简单介绍(如何使用各种聚类算法):

1. 选择聚类算法,所面临的常见问题又哪些?

)不同形状的数据集。不同形状的数据集。也须要採取不同的度量策略,或者不同的聚类算法。

)不同的数据次序。

同样数据集,但数据输入次序不同,也会造成聚类的结果的不同。

)噪声。不同的算法,对噪声的敏感程度不同。

2. 在高维的欧式空间,什么是“维数灾难”?

在高维下。全部点对的距离都差点儿相同(如欧式距离),或者是差点儿随意两个向量都是正交(利用夹角进行进行度量)。这样聚类就非常困难。

3. 常见的聚类算法的策略有哪些?

)层次或凝聚式聚类。採取合并的方式,将邻近点或簇合并成一个大簇。

)点分配。每次遍历数据集。将数据分配到一个临时适合的簇中,然后不断更新。

4. 层次聚类算法的复杂度是多少?

每次合并。都需计算出两个点对之间的距离,复杂度是O(n^2),兴许步骤的开销,分布正比与O((n-1)^2), O((n-2)^2)...,这样求和算下来,算法复杂度是O(n^3).

算法优化:

採用优先队列/最小堆来优化计算。优先队列的构建,第一步须要计算出每两个点的距离,这个开销是O(N^2).普通情况下,N个元素,单纯的优先队列的构建开销为O(N),若是N^2个距离值,则建堆的开销是O(N^2)。

第二步。合并,合并须要一个删除、计算和又一次插入的过程。由于合并一个簇对,就须要更新N个元素,开销为O(N*logN)。总的开销为O((N^2)
* logN).

所以。总的算法复杂度为O((N^2) * logN).

5. 欧式空间与非欧式空间下,常见的簇之间的距离度量有哪些?

欧式空间:

)两个簇之间的质心之间的距离最小

)两个簇中全部点之间的最短距离

)两个簇之间全部点对的平均距离

)将具有最小半径的两个簇进行合并。簇的半径:簇内的点到质心的最大距离

)将具有最小直径的两个簇进行合并。簇的直径:簇内随意两点间的最大距离

非欧式空间,簇的中心点定义,该点距离其它点的距离近期。怎样计算?

)该点到簇中其它全部点的距离之和(求和),1-范数

)该点到簇中其它点的最大距离(最大值),无穷-范数

)该点到簇中其它点的平方和(平方和),2-范数

6. k-means、k均值算法

点分配式的聚类算法。一般用于球形或凸集的数据集。

算法过程例如以下:

)初始化k个选择点作为最初的k个簇的中心

)计算每一个点分别到k个簇的中心。并将点分配到其距离近期的簇中

,继续算法,直到簇的中心变化小于某个阈值

7. k-means算法的两个问题?

)初始化选择点;经常使用的方式是尽量选择距离比較远的点(方法:依次计算出与已确定的点的距离,并选择距离最大的点),或者首先採取层次聚类的方式找出k个簇

)怎样选取k值;k值选取不当,会导致的问题?当k的数目低于真实的簇的数目时。平均直径或其它分散度指标会高速上升能够採用多次聚类。然后比較的方式。多次聚类,通常是採用1,
2, 4, 8...数列的方式,然后找到一个指标在v/2, v时,获取较好的效果,然后再使用二分法,在[v/2, v]之间找到最佳的k值。

8. CURE算法

使用场景:

不论什么形状的簇,如S形、环形等等,不须要满足正态分布,欧式空间。能够用于内存不足的情况

特征:

簇的表示不是採用质心。而是用一些代表点的集合来表示。

算法步骤:

)初始化。

抽取样本数据在内存中进行聚类。方法能够採用层次聚类的方式,形成簇之后,从每一个簇中再选取一部分点作为簇的代表点,而且每一个簇的代表点之间的距离尽量远。对每一个代表点向质心移动一段距离,距离的计算方法:点的位置到簇中心的距离乘以一个固定的比例,如20%。

)对簇进行合并。当两个簇的代表点之间足够近,那么就合并这两个簇,直到没有更足够接近的簇。

)点分配。

对全部点进行分配。即将点分配给与代表点近期的簇。

9. GRGPF算法

场景:

非欧式空间,可用于内存不足的情况(对数据抽样)

特征:

同一时候使用了层次聚类和点分配的的思想。

怎样表示簇?

数据特征:簇包括点的数目,簇中心点,离中心点近期的一些点集和最远的一些点集,ROWSUM(p)即点p到簇中其它店的距离平方和。

靠近中心的点集便于改动中心点的位置,而远离中心的点便于对簇进行合并。

簇的组织:类似B-树结构。首先。抽取样本点,然后做层次聚类。就形成了树T的结构。

然后,从树T中选取一系列簇。即是GRGPF算法的初始簇。然后将T中具有同样祖先的簇聚合,表示树中的内部节点。

点的分配:对簇进行初始化之后。将每一个点插入到距离近期的那个簇。

详细处理的细节更为复杂,假设对B-树比較了解,应该有帮助。

10. 流聚类,怎样对近期m个点进行聚类?

的个数。

的次幂,每一级桶的个数最多是b个。

)其次,对每一个桶内的数据进行聚类,如採用层次聚类的方法。

)当有新数据来临,须要新建桶,或者合并桶。这个类似于GDIM,但除了合并,还须要合并簇。当流内聚类的模型变化不是非常快的时候,能够採取直接质心合并的方式。

)查询应答:对近期的m个点进行聚类,当m不在桶的分界线上时。能够採用近似的方式求解,仅仅需求出包括m个点的最少桶的结果。

第三部分:

Mahout中实现经常使用距离的计算:下面摘自mahout-core-0.6.jar包中

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhvbmd3ZW43NzEw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

对以上进行距离进行解析:

 

皮尔森相关度

类名:PearsonCorrelationSimilarity

原理:用来反映两个变量线性相关程度的统计量

范围:[-1,1]。绝对值越大。说明相关性越强,负相关对于推荐的意义小。

,做除数)。

该相似度并非最好的选择,也不是最坏的选择,仅仅是由于其easy理解。在早期研究中常常被提起。使用Pearson线性相关系数必须如果数据是成对地从正态分布中取得的。而且数据至少在逻辑范畴内必须是等间距的数据。

Mahout中,为皮尔森相关计算提供了一个扩展,通过添加一个枚举类型(Weighting)的參数来使得重叠数也成为计算相似度的影响因子。

欧式距离相似度

类名:EuclideanDistanceSimilarity

原理:利用欧式距离d定义的相似度s。s=1 / (1+d)。

范围:[0,1],值越大,说明d越小。也就是距离越近,则相似度越大。

说明:同皮尔森相似度一样,该相似度也没有考虑重叠数对结果的影响。相同地,Mahout通过添加一个枚举类型(Weighting)的參数来使得重叠数也成为计算相似度的影响因子。

余弦相似度

类名:PearsonCorrelationSimilarity和UncenteredCosineSimilarity

原理:多维空间两点与所设定的点形成夹角的余弦值。

范围:[-1,1],值越大,说明夹角越大,两点相距就越远,相似度就越小。

说明:在数学表达中,假设对两个项的属性进行了数据中心化。计算出来的余弦相似度和皮尔森相似度是一样的,在mahout中,实现了数据中心化的过程,所以皮尔森相似度值也是数据中心化后的余弦相似度。

另外在新版本号中,Mahout提供了UncenteredCosineSimilarity类作为计算非中心化数据的余弦相似度。

Spearman秩相关系数

类名:SpearmanCorrelationSimilarity

原理:Spearman秩相关系数通常被觉得是排列后的变量之间的Pearson线性相关系数。

范围:{-1.0,1.0}。当一致时为1.0,不一致时为-1.0。

说明:计算很慢,有大量排序。针对推荐系统中的数据集来讲,用Spearman秩相关系数作为相似度量是不合适的。

曼哈顿距离

类名:CityBlockSimilarity

原理:曼哈顿距离的实现,同欧式距离相似。都是用于多维数据空间距离的測度

范围:[0,1],同欧式距离一致,值越小。说明距离值越大,相似度越大。

说明:比欧式距离计算量少,性能相对高。

Tanimoto系数

类名:TanimotoCoefficientSimilarity

原理:又名广义Jaccard系数,是对Jaccard系数的扩展,等式为

说明越相似。

说明:处理无打分的偏好数据。

对数似然相似度

类名:LogLikelihoodSimilarity

原理:重叠的个数。不重叠的个数,都没有的个数

范围:详细可去百度文库中查找论文《Accurate Methods for the Statistics ofSurprise and Coincidence》

说明:处理无打分的偏好数据,比Tanimoto系数的计算方法更为智能。

參考网址:http://www.cnblogs.com/dlts26/archive/2012/06/20/2555772.html

Mahout中聚类实现的算法:

官网算法Clustering算法摘录:

·        Canopy Clustering -single machine/MapReduce
(deprecated, will beremoved once Streaming k-Means is stable enough)

·        k-Means Clustering -single machine / MapReduce

·        Fuzzy k-Means -single machine / MapReduce

·        Streaming k-Means -single machine / MapReduce

·        Spectral Clustering -MapReduce

官网參考网址:http://mahout.apache.org/users/basics/algorithms.html

源码中聚类算法的实现:下面摘自mahout-core-0.6.jar包中

对以上各种聚类类的解析:

第四部分:

用Mahout进行实例分析(K-means、canopy、fuzzy
k-means)

步骤简单介绍:

A、数据转换及对应的命令简单介绍

B、K-means、canopy、fuzzy
k-means命令。參数简单介绍

C、mahout操作k-means、canopy、fuzzy
k-means聚类的具体命令

D、用K-means算法进行操作,之后用R进行可视化操作

具体步骤:

A、数据转换及对应的命令简单介绍

Mahout类:org.apache.mahout.clustering.conversion.InputDriver

作用:这个类,是将文本文件里(.txt格式)用空格分隔的浮点型数字转换为Mahout中的序列文件(VectorWritable类型)。这个类型适合集群任务,有些Mahout任务,则须要任务是一般类型。

源码的位置:mahout-integration-0.6.jar

命令使用:mahoutorg.apache.mahout.clustering.conversion.InputDriver       http://  \

–i  /user/hadoop/mahout6/p04-17.txt         \

-o  /user/hadoop/mahout6/vecfile       \

-v  org.apache.mahout.math.RandomAccessSparseVector

数据集下载:p04-17.txt

对于文本数据。数据处理及相关的类(注解:文本转换为序列文件,序列文件转换为向量文件,以下几个类。主要是对文本文件进行挖掘时用):

向量文本类型(向量文件的存储方式):

B、K-means、canopy、fuzzy k-means命令,參数简单介绍

Mahout之k-means命令使用參数简单介绍:

Mahout之canopy命令使用參数简单介绍:

Mahout之fuzzy k-means命令使用參数简单介绍:

C、mahout操作k-means、canopy、fuzzy
k-means聚类的具体命令

Mahout之数据预处理:

mahoutorg.apache.mahout.clustering.conversion.InputDriver \

–i  /user/hadoop/mahout6/p04-17.txt         \

-o  /user/hadoop/mahout6/vecfile       \

-v  org.apache.mahout.math.RandomAccessSparseVector

Mahout之k-means命令:

mahout kmeans -i /user/hadoop/mahout6/vecfile -o/user/hadoop/mahout6/result1 -c /user/hadoop/mahout6/clu1 -x 20 -k 2 -cd 0.1-dm org.apache.mahout.common.distance.SquaredEuclideanDistanceMeasure -cl

Mahout之canopy命令:

mahout canopy -i /user/hadoop/mahout6/vecfile -o /user/hadoop/mahout6/canopy-result-t1 1 -t2 2 –ow

Mahout之fuzzy k-means命令:

mahoutfkmeans -i /user/hadoop/mahout6/vecfile

-o/user/hadoop/mahout6/fuzzy-kmeans-result

-c/user/hadoop/mahout6/fuzzy-kmeans-centerpt -m 2 -x 20 -k 2 -cd 0.1

-dmorg.apache.mahout.common.distance.SquaredEuclideanDistanceMeasure -ow -cl

D、用K-means算法进行操作,之后用R进行可视化操作(导出K-means算法生成的数据)

聚类结果分析:

数据导出命令帮助文档信息:

实例命令行例如以下所看到的(本案例脚本是用mahout之k-means算法生成的数据导出):

将数据转换为CSV格式:

mahoutclusterdump -s /user/hadoop/mahout6/result2/clusters-1-final -p/user/hadoop/mahout6/result2/clusteredPoints -o /home/hadoop/cluster1.csv -ofCSV

将数据转换为TXT格式:

mahoutclusterdump -s /user/hadoop/mahout6/result2/clusters-1-final -p/user/hadoop/mahout6/result2/clusteredPoints -o /home/hadoop/cluster1.txt -ofTEXT

导出后的数据格式:

用R语言进行效果展示(输出的数据格式能够參考上图所看到的):

mahoutkmeans -i /user/hadoop/mahout6/vecfile -o /user/hadoop/mahout6/resultTest2 -c/user/hadoop/mahout6/cluTest1-x 20 -cd 0.00001 -dmorg.apache.mahout.common.distance.SquaredEuclideanDistanceMeasure
-cl

mahoutclusterdump -s /user/hadoop/mahout6/result2/clusters-1-final -p/user/hadoop/mahout6/result2/clusteredPoints -o /home/hadoop/cluster1.csv -ofCSV

将上面聚类生成的四个数据进行处理,分成四个文件,之后按例如以下R代码进行可视化处理:

R參考代码:

> c1<-read.csv(file=\"2/cluster1.csv\",sep=\",\",header=FALSE)

> c2<-read.csv(file=\"2/cluster2.csv\",sep=\",\",header=FALSE)

> c3<-read.csv(file=\"2/cluster3.csv\",sep=\",\",header=FALSE)

> c4<-read.csv(file=\"2/cluster4.csv\",sep=\",\",header=FALSE)

> y<-rbind(c1,c2,c3,c4)

> cols<-c(rep(1,nrow(c1)),rep(2,nrow(c2)),rep(3,nrow(c3)),rep(4,nrow(c4)))

> plot(y, col=c(\"black\",\"blue\")[cols])

> q()

> plot(y, col=c(\"black\",\"blue\",\"green\",\"yellow\")[cols])

> center<-matrix(c(0.764, 0.182,0.369, 0.378,0.749, 0.551,0.422, 0.671),ncol=2,byrow=TRUE)

> points(center, col=\"violetred\", pch = 19)

第四部分:

数据预处理遇到的问题(输入例如以下命令报错):

mahoutorg.apache.mahout.clustering.conversion.InputDriver \

–i  /user/hadoop/mahout6/p04-17.txt         \

-o  /user/hadoop/mahout6/vecfile       \

-v  org.apache.mahout.math.RandomAccessSparseVector



问题解决方式(查看源码——具体方法请參看文章開始):

这个类(mahoutorg.apache.mahout.clustering.conversion.InputDriver)位置位于源码中的mahout-integration-0.6.jar的jar包下。如上图所看到的:

英文解析:(摘录源代码凝视文件)

This class converts text files containing space-delimited floating point numbers intoMahout sequence files of VectorWritable suitable for input to the clusteringjobs in particular,
and any Mahout job requiring this input in general.



中文解析:(摘自源代码凝视文件)

这个类,是将文本文件里(.txt格式)用空格分隔的浮点型数字转换为Mahout中的序列文件(VectorWritable类型),这个类型适合集群任务。有些Mahout任务,则须要任务是一般类型。

mahout org.apache.mahout.clustering.conversion.InputDriver在源码中的位置:



谢谢您的查看,如有问题,请留言!!!

參考文献:

http://mahout.apache.org/

https://builds.apache.org/job/Mahout-Quality/javadoc/

http://f.dataguru.cn/thread-281665-1-1.html

http://blog.csdn.net/viewcode/article/details/9146965

http://mahout.apache.org/users/basics/algorithms.html

http://mahout.apache.org/users/clustering/k-means-clustering.html

http://mahout.apache.org/users/clustering/canopy-clustering.html

http://mahout.apache.org/users/clustering/fuzzy-k-means.html

http://mahout.apache.org/users/clustering/cluster-dumper.html

http://mahout.apache.org/users/clustering/k-means-commandline.html

http://mahout.apache.org/users/clustering/canopy-commandline.html

http://mahout.apache.org/users/clustering/fuzzy-k-means-commandline.html

Mahout机器学习平台之聚类算法具体剖析(含实例分析)的更多相关文章

  1. Hadoop平台K-Means聚类算法分布式实现+MapReduce通俗讲解

        Hadoop平台K-Means聚类算法分布式实现+MapReduce通俗讲解 在Hadoop分布式环境下实现K-Means聚类算法的伪代码如下: 输入:参数0--存储样本数据的文本文件inpu ...

  2. 机器学习六--K-means聚类算法

    机器学习六--K-means聚类算法 想想常见的分类算法有决策树.Logistic回归.SVM.贝叶斯等.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别 ...

  3. Python实现的选择排序算法原理与用法实例分析

    Python实现的选择排序算法原理与用法实例分析 这篇文章主要介绍了Python实现的选择排序算法,简单描述了选择排序的原理,并结合实例形式分析了Python实现与应用选择排序的具体操作技巧,需要的朋 ...

  4. 机器学习:K-Means聚类算法

    本文来自同步博客. 前面几篇文章介绍了回归或分类的几个算法,它们的共同点是训练数据包含了输出结果,要求算法能够通过训练数据掌握规律,用于预测新输入数据的输出值.因此,回归算法或分类算法被称之为监督学习 ...

  5. 机器学习中K-means聚类算法原理及C语言实现

    本人以前主要focus在传统音频的软件开发,接触到的算法主要是音频信号处理相关的,如各种编解码算法和回声消除算法等.最近切到语音识别上,接触到的算法就变成了各种机器学习算法,如GMM等.K-means ...

  6. 【Python机器学习实战】聚类算法(1)——K-Means聚类

    实战部分主要针对某一具体算法对其原理进行较为详细的介绍,然后进行简单地实现(可能对算法性能考虑欠缺),这一部分主要介绍一些常见的一些聚类算法. K-means聚类算法 0.聚类算法算法简介 聚类算法算 ...

  7. 机器学习sklearn19.0聚类算法——Kmeans算法

    一.关于聚类及相似度.距离的知识点 二.k-means算法思想与流程 三.sklearn中对于kmeans算法的参数 四.代码示例以及应用的知识点简介 (1)make_blobs:聚类数据生成器 sk ...

  8. 机器学习入门-DBSCAN聚类算法

    DBSCAN 聚类算法又称为密度聚类,是一种不断发张下线而不断扩张的算法,主要的参数是半径r和k值 DBSCAN的几个概念: 核心对象:某个点的密度达到算法设定的阈值则其为核心点,核心点的意思就是一个 ...

  9. 机器学习之K-Mean聚类算法

    知识点: # coding = utf-8 import numpy as np import pandas as pd from sklearn.cluster import KMeans &quo ...

随机推荐

  1. iOS中UIWebView使用JS交互 - 机智的新手

    iOS中偶尔也会用到webview来显示一些内容,比如新闻,或者一段介绍.但是用的不多,现在来教大家怎么使用js跟webview进行交互. 这里就拿点击图片获取图片路径为例: 1.测试页面html & ...

  2. Unity cg vertex and fragment shaders(二)

    着色器的一般结构: Shader "MyShader/MyShaderName" { Properties { // ... properties here ... } SubSh ...

  3. Spring注解与Spring与Struts2整合

    @Component @Controller @Service @Repository 四大注解作用基本一样,只是表象在不同层面 @Resource @Scope Struts2与Spring整合:1 ...

  4. BZOJ 1016: [JSOI2008]最小生成树计数( kruskal + dfs )

    不同最小生成树中权值相同的边数量是一定的, 而且他们对连通性的贡献是一样的.对权值相同的边放在一起(至多10), 暴搜他们有多少种方案, 然后乘法原理. ----------------------- ...

  5. Hadoop学习笔记(4)hadoop集群模式安装

    具体的过程参见伪分布模式的安装,集群模式的安装和伪分布模式的安装基本一样,只有细微的差别,写在下面: 修改masers和slavers文件: 在hadoop/conf文件夹中的配置文件中有两个文件ma ...

  6. html5 存储篇(一)

    localStorage 和 sessionStorage      localStorage 与 sessionStorage的相同点:         (1).都是用于客户端存储的技术,相对于传统 ...

  7. ThinkPHP第十四天(显示TRACE界面配置,关联模型详解定义)

    1.显示TRACE界面,首选需要在显示模版界面,$this->display(),然后需要在配置文件中配置 SHOW_PAGE_TRACE => true 2.关联模型使用 主表以user ...

  8. pl/sql oracle

    http://uule.iteye.com/blog/2061773(出处) 批量导入脚本: 打开一个command window  > 输入@ > 它会让你选择要导入的文件 (自己要知道 ...

  9. RAW模板命名规范

    国有国法,家有家规,任何一种开发都要有自己规范,RAW模板也一样,这个文章来介绍一下RAW模板命名的规范. 格式: 开发者或组织_描述词_名称 开发者或组织:如know或自己的组织名 描述词:c-&g ...

  10. Push segues can only be used when the.....

    刚刚遇到的两个错误,. 1, Terminating app due to uncaught exception'NSGenericException', reason: 'Push segues c ...