《机器学习实战》二分-kMeans算法(二分K均值聚类)

时间:2021-09-10 02:41:00

=====================================================================

《机器学习实战》系列博客是博主阅读《机器学习实战》这本书的笔记也包含一些其他python实现的机器学习算法                                           算法实现均采用python

github 源码同步:https://github.com/Thinkgamer/Machine-Learning-With-Python

=====================================================================


Scikit-learn 实现的K-Means 算法请参考 :点击阅读

K-Means 均值算法请参考:点击阅读



首先二分-K均值是为了解决k-均值的用户自定义输入簇值k所延伸出来的自己判断k数目,其基本思路是:

为了得到k个簇,将所有点的集合分裂成两个簇,从这些簇中选取一个继续分裂,如此下去,直到产生k个簇。


伪代码:

初始化簇表,使之包含由所有的点组成的簇。
repeat
从簇表中取出一个簇。
{对选定的簇进行多次二分试验}
for i=1 to 试验次数 do
使用基本k均值,二分选定的簇。
endfor
从二分试验中选择具有最小误差的两个簇。
将这两个簇添加到簇表中。
until 簇表中包含k个簇
比如要分成5个组,第一次分裂产生2个组,然后从这2个组中选一个目标函数产生的误差比较大的,分裂这个组产生2个,这样加上开始那1个就有3个组了,然后再从这3个组里选一个分裂,产生4个组,重复此过程,产生5个组。这算是一中基本求精的思想。二分k均值不太受初始化的困扰,因为它执行了多次二分试验并选取具有最小误差的试验结果,还因为每步只有两个质心。

优点与缺点

k均值简单并且可以用于各种数据类型,它相当有效,尽管常常多次运行。然后k均值并不适合所有的数据类型。它不能处理非球形簇,不同尺寸和不同密度的簇。对包含离群点(噪声点)的数据进行聚类时,k均值也有问题。

其实现的Python代码如下: