Mahout学习之聚类算法Kmeans

来源:互联网 发布:淘宝装修助手 编辑:程序博客网 时间:2024/05/22 01:36

一:kMeans算法介绍

        聚类分析是一种静态数据分析方法,常被用于机器学习,模式识别,数据挖掘等领域。通常认为,聚类是一种无监督式的机器学习方法,它的过程是这样的:在未知样本类别的情况下,通过计算样本彼此间的距离(欧式距离,马式距离,汉明距离,余弦距离等)来估计样本所属类别。从结构性来划分,聚类方法分为自上而下自下而上两种方法,前者的算法是先把所有样本视为一类,然后不断从这个大类中分离出小类,直到不能再分为止;后者则相反,首先所有样本自成一类,然后不断两两合并,直到最终形成几个大类。 

常用的聚类方法主要有以下四种:   //照搬的wiki,比较懒...

Connectivity based clustering  (如hierarchical clustering 层次聚类法)

Centroid-based clustering  (如kmeans)

Distribution-based clustering

Density-based clustering

  Kmeans聚类是一种自下而上的聚类方法,它的优点是简单、速度快;缺点是聚类结果与初始中心的选择有关系,且必须提供聚类的数目。Kmeans的第二个缺点是致命的,因为在有些时候,我们不知道样本集将要聚成多少个类别,这种时候kmeans是不适合的,推荐使用hierarchical 或meanshift来聚类。第一个缺点可以通过多次聚类取最佳结果来解决。

  Kmeans的计算过程大概表示如下

随机选择k个聚类中心. 最终的类别个数<= k

计算每个样本到各个中心的距离

每个样本聚类到离它最近的中心

重新计算每个新类的中心

重复以上步骤直到满足收敛要求。(通常就是中心点不再改变或满足一定迭代次数).

二:Mahout实现

1.数据准备

仿造数据1.txt

8 8

7 7

6.1 6.1

9 9

2 2

1 1

0 0

2.9 2.9

2.txt

8.1 8.1

7.1 7.1

6.2 6.2

7.1 7.1

2.1 2.1

1.1 1.1

0.1 0.1

3.0 3.0

2.将数据转换为序列文件

方法1:命令行转换,具体参考:点击打开链接

方法2:代码转换,可借用canopy算法中的代码,具体参考:点击打开链接

3.运行

bin/mahout kmeans -i /yourFilePath -o /yourFileOutputPath -c /yourStartCenter -k 2 -x 5 -cl

参数意义说明:

-i 设置文件输入路径, -o 为文件输出路径  -c 为初始输入聚类中心 -k 表示聚类的数目 -x 表示最大的循环次数 -cl 表示算法完成后进行原始数据的分类

4.结果分析

因为k值为2,所以在clusters-0中有两个聚类中心文件

初始化聚类中心为[2.0,2.0]  [2.1,2.1]

clueters-1和cluster-2的输出为[1.033,1.033] [5.725,5.725]  ,   [1.525,1.525]  [7.325,7.325]

最后的聚类中心是[1.525,1.525]  [7.325,7.325]

使用此聚类中心对数据进行聚类,得到clusteredPoints文件夹下边的文件

0 0