K-Means分类法介绍
作者:liangdas
出处:简单点儿,通俗点儿,机器学习 http://write.blog.csdn.net/postedit/25470895
引言:
前面介绍的最小距离分类法和最大似然分类法,它们在分类之前,都需要有一些已知的标记好的样本,作为训练数据,然后再去训练模型,最后才能用这个模型去对未知类别的样本做分类,这就是所说的监督分类。监督分类 supervised classification)又称训练场地法,是以建立统计识别函数为理论基础,依据典型样本训练方法进行分类的技术[1]。
和监督分类对应的是非监督分类。非监督分类是指人们事先对分类过程不施加任何的先验知识,而仅凭数据,即自然聚类的特性,进行“盲目”的分类;其分类的结果只是对不同类别达到了区分,但并不能确定类别的属性[2]。
虽然在非监督分类的结果中,我们不能知道所分得的类别到底属于具体的哪一类,但是在非监督分类已经完成以后,往往我们可以根据经验判断出每一个类别到底属于哪一类,或者有的时候,我们只需要利用这个非监督分类的结果,而不用去管这个分类的每一类到底属于什么类别。
对于监督分类,前面介绍了两个基本的两种方法,那么对于非监督分类,基本的方法就是K-Means分类法啦。
基本原理:
K-Means算法是以距离作为相似度的评价指标,用样本点到类别中心的误差平方和作为聚类好坏的评价指标,通过迭代的方法使总体分类的误差平方和函数达到最小的聚类方法[3]。
假设我们有一个数据集合(x1, x2,…, xn),并且每个xi都是一个d维的特征向量。现在,我们需要把这个数据集合分成k个不同的类别 其中,类别Si里面的所有元素到类别中心Ui的距离平方和为
,(前面最小距离分类,介绍了不同的距离计算方法,这里,为了表达简便,就用欧式距离代替一般的距离)我们的最后分类的目的是要使得到的这k个类别的距离平方和的加和值最小,说得有点绕,在数值模型上,即可以表示成以下的表达式[4]:
有了目标函数,那么现在的问题就很清楚了:就是要找到这k个类别中心的具体值 ,使上面表达式的值达到最小。
这是一个求最值的问题,碰到求最值的问题,大家是否一下子就想到了拉格朗日求极值的方法呢?遗憾的是,对于这个目标函数,我们无法通过求目标函数导数,令其等于0的方法来求得这些参数(你们把式子展开,就可以直观的看出来,即使求导数,让其等于0,也无法解得这个方程的参数)。
那么这个问题,到底怎么解决呢?于是乎,有人就根据迭代的思想,提出了这样的一个解决方法:先随意给定初始的类别中心,然后做聚类,通过迭代,不断调整这些类别中心,直到得到最好的聚类中心为止。
其算法步骤如下:
1、从集合(x1, x2, …, xn)中随机取k个元素,作为k个类别的各自的中心。
2、聚类。分别计算集合中每一个元素到k个类别中心的距离,将这些元素分别划归到距离最小的那一个类别中去,这个过程其实是一个重新聚类的过程。
3、更新类别中心。根据前面聚类的结果,重新计算每一个类别的中心,计算方法是取当前类别中所有元素,然后计算这些元素在每一个维度的平均值。每一个类别中心都重新计算一遍后,就得到了一个新的类别中心组 。
4、重复第2,3步,直到聚类结果不再发生变化,这样得到的类别中心,基本上就是我们最后想要找的类别中心。
图例解释:
如下图,是一个K-Means分类过程。在图中,是一些在二维空间(x,y)中的点,我们可以把这些点的x,y坐标看做是一些样本的二维特征,然后我们要对这些二维特征进行K-Means的非监督分类,假设我们要把这些点分成三个类别,下面的分了的过程描述:
(1) 图1表示的是特征空间中,选取三个中心,作为最初的类别中心,分别用红绿蓝表示。
(2) 图2是经过一次迭代后的结果,也就是经过了最小距离分类后,然后算每一个类别的期望,在将期望最大化的过程。哈哈,说的有点学术饭浓厚了。重新说,一次迭代做了这样几件事情:
Ø 对所有样本点进行最小距离分类;
Ø 分类完成后,重新计算每一个类别里面的特征均值,用这个特征均值向量来代替之前的样本中心。
(3) 图3是经过了三次迭代的结果。
(4) 图4是经过了6次迭代的结果,也是最终的分类结果, 这一步的图片和图3的差别很小,类别和类别中心只有很小的变化。
图1. 初始状态 图2. 一次迭代后
图3. 三次迭代后 图4. 六次迭代后最终结果
从直观上感受来说,上面这个K-Means找最后的类别中心的思想是比较好理解的,那么有人会问:能不能从数学公式上面来推到,通过这样的迭代,可以让目标函数达到最小呢?
答案是肯定的,因为K-Means迭代,其实用的是EM(期望最大化)的思想,而EM的原理是可以用数学公式证明的。但是,因为K-means的原理比较简单,也容易理解,所以,介绍K-means的时候,一般不去讲述EM算法的原理,以免将简单的问题讲复杂了,在以后介绍EM或者GMM的时候,可以再回过头来对比看看K-Means的原理。
K-means的缺陷:
K-Means的原理容易理解,而且在聚类的时候,用的是最小距离分类法,计算也比较简便,但是K-Means也有其固有的缺点:
K-Means的初始类别中心是随机选择的,初始类别中心对整个分类结果和计算时间有很大的影响。初始类别中心不好,可能会使算法陷入局部最小值,得到一个次优的分类结果,而得不到全局最优解[4],另外,初始类别中心不好,也会增加迭代的次数,从而增加分类所用的时间。
针对随机设置类别中心的缺陷,有很多人提出了K-Means的改进方法,如设置初始类别中心的时候,运用GA遗传算法来进行挑选[5];或者是徐义峰等提出的类别初始中心的选择方法[6]。
K-Means算法对孤立点敏感。因为是相似度的度量是以某个样本到类别中心的距离作为依据的,同时,类别中心也是用所有属于当前类别的样本的均值计算得到的,所以如果总体样本集合中存在噪声点,或者孤立点,那么,它必然会影响到最后的分类结果。
参考资料:
[1]百度百科-监督分类
http://baike.baidu.com/view/285137.htm?fr=wordsearch
[2]百度百科-非监督分类
http://baike.baidu.com/link?url=QYn2VXosyoXyqMlrbcI3Ro_BNeqw26o-vqPggXl3NDTjsYJNmnvpkVHqN2GfwYLt
[3]百度百科-K-means
[4]博客园 http://www.cnblogs.com/moondark/archive/2012/03/08/2385770.html
[5]博客园 http://shiyanjun.cn/archives/539.html
[6] 徐义峰,陈春明,徐云青.一种改进的k—均值聚类算法[J] 计算机应用与软件2008.3 vol.25 NO.3:275-277
ps:使用或者转载请标明出处,禁止以商业为目的的使用。
如果有需要word版,或者是pdf版的,请与我联系,QQ:358536026