机器学习之k-means算法

来源:互联网 发布:知乎 爬虫 加载 编辑:程序博客网 时间:2024/05/22 10:26

K-means(k均值)

一、算法分析

K-means(k均值)是基于数据划分的无监督聚类算法,是数据挖掘领域的十大算法之一。样本集预先不知所属类别或标签,需要根据样本之间的距离或相似度来自动进行分类。聚类算法可以分为基于划分的方法、基于联通性的方法、基于密度的方法、基于密度分布模型的方法。K-means是属于基于划分的聚类方法。

基于划分的方法是将样本集组成的矢量空间划分为多个区域,每个区域都存在一个区域相关的表示,通常称为区域中心。对于每个样本,可以建立一种样本到区域中心的映射,其中为指示函数。根据建立的映射q(x),可以将所有的样本分类到相应的中心,得到最终的分类结果。

不同的基于划分的聚类算法的主要区别在于:如何建立相应的映射方式q(x),在经典的k-means聚类算法这两个,映射是通过样本与各中心的误差平方和最小准则来建立的。

算法的步骤为:

 

二、算法改进

1、聚类中心初始化的改进

K-means对聚类中心的初始化比较敏感,不同的初始值会带来不同的聚类结果,这是因为K-means仅仅是对目标函数的求局部最优解,不能求得全局最优解;改进后的方法为k-means++, 其选择初始seeds的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。

(1)从输入的数据点集合中随机选择一个点作为第一个聚类中心

(2)对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x)

(3)选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大

(4)重复2和3直到k个聚类中心被选出来

(5)利用这k个初始的聚类中心来运行标准的k-means算法

 从上面的算法描述上可以看到,算法的关键是第3步,如何将D(x)反映到点被选择的概率上,一种算法如下:

先从我们的数据库随机挑个随机点当“种子点”对于每个点,我们都计算其和最近的一个“种子点”的距离D(x)并保存在一个数组里,然后把这些距离加起来得到Sum(D(x))。然后,再取一个随机值,用权重的方式来取计算下一个“种子点”。这个算法的实现是,先取一个能落在Sum(D(x))中的随机值Random,然后用Random -= D(x),直到其<=0,此时的点就是下一个“种子点”。重复2和3直到k个聚类中心被选出来

利用这k个初始的聚类中心来运行标准的k-means算法可以看到算法的第三步选取新中心的方法,这样就能保证距离D(x)较大的点,会被选出来作为聚类中心了。至于为什么原因比较简单,如下图 所示:  

      假设A、B、C、D的D(x)如上图所示,当算法取值Sum(D(x))*random时,该值会以较大的概率落入D(x)较大的区间内,所以对应的点会以较大的概率被选中作为新的聚类中心。

2、类别个数的自适应确定

在经典的k-means算法中,聚类个数k需要预先设定,不具备自适应能力;使用ISODATA算法,引入类别的合并与分开机制。

3、经典的k-means采用二次欧式距离作为相似性度量,在处理非标准正太分布和非均匀样本集合时聚类效果较差。为了有效克服该局限性假设,K-means需要推广到更广义的度量空间,经典的两种改进方法是:KernelK-means和谱聚类方法Specttral Clustering.

(1) Kernel K-means

将样本点通过某种方式映射到新的高维空间,在该空间中样本点之间的内积可以通过相对应的核函数进行计算,即:

借助核函数的存在,可以在新空间进行k-means聚类。

(2)Specttral Clustering

Specttral Clustering尝试着变换样本空间度量,首先需要求取样本集合的仿射矩阵,然后计算仿射矩阵的特征向量,利用得到的特征向量进行k-means聚类。

 

三、二分K-means聚类

四、总结

1、k-means聚类简洁快速,假设均方误差是计算群组分散度的最佳参数,对于满足正态分布的数据聚类效果较好。

2、K-means的性能依赖于聚类中心的初始位置,不能确保收敛于最优解,对孤立点敏感。可以采用一些前端的方法,首先计算出初始聚类中心,或者每次用不同的初始聚类中将该算法运算多次,然后择优确定

3、虽然二分k-means聚类算法改进了k-means的不足,但是他们共同的缺点是必须事先确定K的值,不合适的k返回较差的结果。

4、对于海量数据分析,如何确定k的值,一直都是难题,常用方法是层次聚类。

0 0