hadoop下mahout kmeans算法研究(2)

KMeans算法和简单命令使用(2)

 

接上篇:hadoop下mahout-kmeans算法研究(1)

 

如果对本文档有任何建议或者认为有错误的地方欢迎联系本人

大家一起进步啊

红色的字体:重点和注意事项

蓝色的字体:出现的问题和解决/未解决

绿色的字体:个人建议

数据输入格式

测试数据

 

 

 

每个数据和数据之间用空格分开,数据都是double型的

 

Kmean算法在每次取数据时对所有的数据只取其中的一列

 

kmeans命令使用:

mahout kmeans \
 -i <input vectors directory> \
输入目录
 -c <input clusters directory> \输入的簇目录
 -o <output working directory> \输出目录
 -k <optional number of initial clusters to sample from input vectors> \
 -dm <DistanceMeasure> \
路径方法的类名,默认是SquaredEuclidean   

-x <maximum number of iterations> \迭代的次数
-cd <optional convergence delta. Default is 0.5> \delta的值
-ow <overwrite output directory if present>如果存在覆盖输出目录
-cl <run input vector clustering after computing Canopies>在运行Canopy算法后运行输入向量簇
-xm <execution method: sequential or mapreduce>sequential或者mapreduce运行
注意:当-k被指定的时候,-c目录下的所有聚类都将被重写,将从输入的数据向量中随机抽取-k个点作为初始聚类的中心。

 

查看结果

 

mahout seqdumper:将SequenceFile文件转成可读的文本形式,对应的源文件是org.apache.mahout.utils.SequenceFileDumper.java
mahout vectordump
:将向量文件转成可读的文本形式,对应的源文件是
org.apache.mahout.utils.vectors.VectorDumper.java
mahout clusterdump
:分析最后聚类的输出结果,对应的源文件是org.apache.mahout.utils.clustering.ClusterDumper.java

 

例如我的文件输出在/root/input/output,我可以

输入命令:mahout seqdumper -s /root/input/output/clusteredPoints/part-m-00000

来查看point

mahout clusterdump --seqFileDir /root/input/output/clusteredPoints/part-m-00000

 

hadoop下mahout kmeans算法研究(2)_第1张图片

 

如果直接在本地打开是会有乱码的

出现问题但目前我还不知道如何输出到本地上,-o命令总是报错,目前只会在console上观察结果

解决:例如要输出上述的point文件,可以使用命令:mahout seqdumper -s /root/input/output/clusteredPoints/part-m-00000 -o result.txt

 

 hadoop下mahout kmeans算法研究(2)_第2张图片

 

运行结果分析

 

首先Kmeans算法默认是10次迭代,所以我们得到的clusters10

结果文件夹有clusteredPointsclusters-Ndata,用命令mahout seqdumper仔细看了一下结果文件

 

clusteredPoints:存放的是最后聚类的结果,将cluster-iddocuments-id都展示出来了,用mahout seqdumperclusteredPoints结果的key-value类型是(IntWritable,WeightedVectorWritable)

例如之前的/root/input/output/clusteredPoints/part-m-00000文件

 

 hadoop下mahout kmeans算法研究(2)_第3张图片

 

clusters-N:是第N次聚类的结果,其中n为某类的样本数目,c为各类各属性的中心,r为各类属性的半径。 clusters-N结果类型是(Text,Cluster)

例如要观察clusters-10的内容,可以使用命令:

mahout seqdumper -s /root/input/output/clusters-10/part-r-00000

要输出到txt文件则要在后面加上:-o xxxx.txt(xxxx是文件名)

 

 hadoop下mahout kmeans算法研究(2)_第4张图片

 

data:存放的是原始数据,这个文件夹下的文件可以用mahout vectordump来读取,原始数据是向量形式的,其它的都只能用mahout seqdumper来读取,向量文件也可以用mahout seqdumper来读取,只是用vectordump读取出来的是数字结果,没有对应的key,用seqdumper读出来的可以看到key,即对应的url,而value读出来的是一个类描述,而不是数组向量

例如要查看data下的文件用命令:

mahout vectordump -s /root/input/output/data/part-m-00000/    

同样的要输出的话在后面加上 –o  xxxx.txt

 

 hadoop下mahout kmeans算法研究(2)_第5张图片

 

适用场景展望

 

对于像kmeans这样的聚类算法都是用来求相似度的,如果想要得到某些数据的在某些条件下的相似程度就可以用kmean算法,它可以帮助总结出一些数据规律。比如:在所有女人当中打市内电话的数据,如果按通话时间分的话就可以用kmeans算法,分成时间长的会形成一个簇,时间短的也会形成一个簇。

 

但是对例外和噪声文本比较敏感。另外一个问题是,没有一个好的办法确定k的取值。相关文献参见[Forgy, 1965][Xu & Wunsch, 2005]

 

参考文档

 

http://mahout.apache.org/

http://www.cnblogs.com/vivounicorn/archive/2011/09/23/2186483.html

http://blog.csdn.net/heavendai/article/details/7029465

 

 

 

 

你可能感兴趣的:(mapreduce,算法,hadoop,vector,input,output)