数据输入格式

测试数据

 

 

 

 

每个数据和数据之间用空格分开,数据都是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

 

 

 

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

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

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

 

 

 

运行结果分析

 

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

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

 

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

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

 

 

 

 

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是文件名)

 

 

 

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

 

 

 

 

posted on 2014-04-28 14:06  老梁  阅读(1084)  评论(0编辑  收藏  举报