&&机器学习实战&&K均值聚类

1.概述

       聚类是一种无监督学习,它将相似的对象归到同一个簇中。聚类方法几乎可以应用于所有对象,簇内的对象越相似,聚类的效果越好。

       k-均值聚类之所以称为是因为它可以发现k个不同的簇,且每个簇的中心采用簇中所含值的均值计算而成。

2.簇识别(cluster identification)

       簇识别给出聚类结果的含义。假定有一些数据,现在将相似数据归到一起,簇识别会告诉我们这些簇到底都是些什么。聚类和分类的最大不同在于,分类的目标事先已知,而聚类则不一样。因为其产生的结果鱼分类相同,而只是类别没有预先定义,聚类有时也被称为无监督分类。

3.K-均值聚类

      优点:容易实现

     缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢。

     适用数据类型:数值型数据。

K-均值是发现给定数据集的k个簇的算法。簇的个数k是用户给定的,每个簇通过其质心,即簇中所有点的中心来描述。

算法的流程:首先,随机确定K个初始点作为质心。然后,将数据集中的每个点分配到一个簇中,具体来讲,为每个点找距其最近的质心,并将其分配给该质心所对应的簇。这一步完成之后,每个簇的质心更新为该簇所有点的平均值。

伪代码:

一般流程:

5.使用后处理来提高聚类性能

k由用户预先定义,那么用户如何才能知道k的选择是否正确?如何才能知道生成的簇比较无好呢?

在包含簇分配结果的矩阵中保存着每个点的误差,即该点到簇质心的距离平方值。

K均值算法收敛但是聚类效果较差的原因是,k均值算法收敛到了局部最小值,而非全局最小值。

一种度量聚类效果的指标是SSE(sum of squared error,误差平方和)。SSE值越小表示数据点越接近于它们的质心,聚类的效果也越好。因为对误差取了平方,因此更加重视那些远离中心的点。

对生成的簇进行后处理,一种方法是将具有最大SSE值的簇划分成两个簇。具体实现时可以将最大簇包含的点过滤出来并在这些点上运行K均值算法(k设为2)。

为了保持簇的总数不变,可以将两个簇进行合并。有两种可以量化的方法:合并最近的质心,或者合并两个使得SSE增幅最小的质心。

6.二分K-均值算法

为克服K-均值算法收敛于局部最小值的问题,有人提出了另一个称为二分K-均值(bisecting K-means)的算法。

该算法首先将所有点作为一个簇,然后将该簇一分为二。之后选择其中一个簇继续进行划分,选择哪一个簇进行划分取决于对其划分是否可以最大程度降低SSE的值。上述基于SSE的划分过程不断重复,直到得到用户指定的簇数目为止。

伪代码:

7.小结

k-均值算法非常有效但是也容易受到初始簇质心的影响。为了获得更好的聚类效果,可以使用另一种称为二分k均值的聚类算法。

K-均值算法以及变形的k-均值算法并非仅有的聚类算法,另外称为层次聚类的算法也被广泛使用。

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章