![defa6e4f181c8cc5e9d2b1b09c15369c.png](https://i-blog.csdnimg.cn/blog_migrate/cd2944abcba504b8f428097c74c224ef.png)
使用工具:Python
(1) K-means clustering algorithm
聚类算法属于无监督的机器学习算法,即没有类别标签y,需要根据数据特征将相似的数据分为一组。K-means聚类算法即随机选取k个点作为聚类中心,计算其他点与中心点的距离,选择距离最近的中心并归类,归类完成后计算每类的新中心点,重新计算每个点与中心点的聚类并选择距离最近的归类,重复此过程,直到中心点不再变化。
距离函数:
![c00a50bfb5e46a2cffa29bfe61e715b9.png](https://i-blog.csdnimg.cn/blog_migrate/f96ba344dfbbb3835a01659870e52a48.png)
代价函数:
![694900a4219195e0b01c6a85cd8d9d55.png](https://i-blog.csdnimg.cn/blog_migrate/b3756189880d5f3f27cb084073c2d92c.png)
注意:使用K-means算法时应首先确定k值,即确定的分类数。
实现:主要包含kmeans; plot; execute三个函数, 确定k值后随机产生index; 使用while进行迭代,一直找到index稳定下来即停止。
数据:使用80个二维样本测试数据,我们期望分成四类。
结果:
用黄色、绿色、蓝色、黑色表示四种聚类,用红色点表示index, 结果如下:
![95a399ff87dff26cdc9630bab07af7d5.png](https://i-blog.csdnimg.cn/blog_migrate/183e3c4644289bf38e08835d37188e0c.png)
分类结果良好,基本能区分四个角的不同点。
追踪每一个的迭代,结果如下:
![c5fe7d27727a0479f29cc38d0b4f343b.png](https://i-blog.csdnimg.cn/blog_migrate/deb792c1cdc62198dc02be9d1831b717.jpeg)
可见,经过五次迭代后,该算法即找出了四个index的正确位置及分类结果,算法快速而高效。这也是k-means算法的优点,(1)算法原理简单,聚类速度快;(2)容易实现。当潜在簇的形状为大小相近的近似圆形,且每个簇之间聚类较明显,k-means聚类结果比较理想。但是,如果潜在的分类遵循一定的集合形状,k-means聚类还能有这么好的分类效果好?
比如两个同心圆,我们希望内外分成两类,但是使用K-means的结果却是: