1. 引言
k-means与kNN虽然都是以k打头,但却是两类算法——kNN为监督学习中的分类算法,而k-means则是非监督学习中的聚类算法;二者相同之处:均利用近邻信息来标注类别。
聚类是数据挖掘中一种非常重要的学习流派,指将未标注的样本数据中相似的分为同一类,正所谓“物以类聚,人以群分”嘛。k-means是聚类算法中最为简单、高效的,核心思想:由用户指定k个初始质心(initial centroids),以作为聚类的类别(cluster),重复迭代直至算法收敛。
2. 基本算法
在k-means算法中,用质心来表示cluster;且容易证明k-means算法收敛等同于所有质心不再发生变化。基本的k-means算法流程如下:
选取k个初始质心(作为初始cluster);
repeat:
对每个样本点,计算得到距其最近的质心,将其类别标为该质心所对应的cluster;
重新计算k个cluser对应的质心;
until 质心不再发生变化
对于欧式空间的样本数据,以平方误差和(sum of the squared error, SSE)作为聚类的目标函数,同时也可以衡量不同聚类结果好坏的指标:
![](https://i-blog.csdnimg.cn/blog_migrate/3e6bae7341bd271148e16f227f78a805.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3e6bae7341bd271148e16f227f78a805.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6fda87503c3f76635bc1351ca5ee7c05.png)
![](https://i-blog.csdnimg.cn/blog_migrate/40827a6398fcec6b551562eca003ceb9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1d353f4eb3430d1be8f5ab01444de2e6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5dd6ad9677a32c1c974a5401b7307d2e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a9fb567af23e1218c40f38e071be14d5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5afff27d9a807ba051985c56928d4f50.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9f56581a9a5046f5b91412b0d2521481.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1d353f4eb3430d1be8f5ab01444de2e6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/896664c20acfe5ebc7ae2286400f5d5a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3e486976a29229dc6b73b8c1146d6384.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ba5b54da2b0af7b2df015b9bbaa84521.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8816b260299ccd3b333a1e84259a57ff.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9b6e509147a31872b96d8c47eea9211d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5946ac4ddf024c90425c78bbce6ceae4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/20b8f7fe76a652aa611d756382773389.png)
![](https://i-blog.csdnimg.cn/blog_migrate/df17f08a61522e75bb7b78c6cac59d5d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9ea9a2d81b5b44bd195fe6c3dc5e24b4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3a13c9aa1df53226801f4440689d22b4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4705aa4ed4b67dc207476fabd1c4cc78.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f9a754f299fb97260010ce70a4f5f8c4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5dd6ad9677a32c1c974a5401b7307d2e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9ed0afb572bef457b579d4cf61879e9b.png)
表示样本点
![](https://i-blog.csdnimg.cn/blog_migrate/1e430f54e6908120049a97db8bdb2954.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5dd6ad9677a32c1c974a5401b7307d2e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f9a754f299fb97260010ce70a4f5f8c4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5dd6ad9677a32c1c974a5401b7307d2e.png)
距离平方和;最优的聚类结果应使得SSE达到最小值。
下图中给出了一个通过4次迭代聚类3个cluster的例子:
k-means存在缺点:
-
k-means是局部最优的,容易受到初始质心的影响;比如在下图中,因选择初始质心不恰当而造成次优的聚类结果(SSE较大):
-
同时,k值的选取也会直接影响聚类结果,最优聚类的k值应与样本数据本身的结构信息相吻合,而这种结构信息是很难去掌握,因此选取最优k值是非常困难的。
3. 优化
为了解决上述存在缺点,在基本k-means的基础上发展而来二分 (bisecting) k-means,其主要思想:一个大cluster进行分裂后可以得到两个小的cluster;为了得到k个cluster,可进行k-1次分裂。算法流程如下:
初始只有一个cluster包含所有样本点;
repeat:
从待分裂的clusters中选择一个进行二元分裂,所选的cluster应使得SSE最小;
until 有k个cluster
上述算法流程中,为从待分裂的clusters中求得局部最优解,可以采取暴力方法:依次对每个待分裂的cluster进行二元分裂(bisect)以求得最优分裂。二分k-means算法聚类过程如图:
从图中,我们观察到:二分k-means算法对初始质心的选择不太敏感,因为初始时只选择一个质心。
4. 参考资料
[1] Pang-Ning Tan, Michael Steinbach, Vipin Kumar, Introduction to Data Mining.
[2] Xindong Wu, Vipin Kumar, The Top Ten Algorithms in Data Mining.