# 代码
from sklearn.cluster import KMeans
Canopy算法基本思想(自总结):随机初始化一个点为质点,分别以指定的T1、T2画圈,在T1圈的划分为该类,在T1与T2之间的待定,然后再两个圈外面的点再指定另一个簇的质心,重新画圈,重复以上步骤。
Step1: 确定K值以及初始化聚类中心,选取K个初始凝聚点,做为欲形成的中心(最简单的方法就是K的值自己确定,但必须小于数据集个数,然后从数据集中选取K个数据做为初始聚类中心);
Step2: 计算每个数据到K个初始凝聚点的距离,将每个数据和最近的凝聚点分到一组,形成K个初始分类;
Step3: 计算初始分类的重心(或均值),做为新的凝聚点,重新计算每个数据到分类重心(或均值)的距离,将每个数据和最近的凝聚点分为一组;
Step4: 重复进行Step2和Step3,直到分类的重心或均值没有明显变化为止。
(1)、将数据集向量化得到一个list后放入内存,选择两个距离阈值:T1和T2,其中T1 > T2,对应上图,内圈为T1,外圈为T2,T1和T2的值可以用交叉校验来确定;
(2)、从list中任取一点P,用低计算成本方法快速计算点P与所有Canopy之间的距离(如果当前不存在Canopy,则把点P作为一个Canopy),如果点P与某个Canopy距离在T1以内,则将点P加入到这个Canopy;
(3)、如果点P曾经与某个Canopy的距离在T2以内,则需要把点P从list中删除,这一步是认为点P此时与这个Canopy已经够近了,因此它不可以再做其它Canopy的中心了;
(4)、重复步骤2、3,直到list为空结束。
K-means++算法基本思想(自总结):先随机指定一个质心,计算所有点到质心的距离作为选择另一个簇的质心的权重,根据每个样本到每个簇质心的距离划定该样本的归属簇,继续挑选下一个簇的质心,重复以上步骤,直到满足K个质心,算法结束。
KMeans++ 算法就是通过算法来选择初始聚类中心点。初始聚类中心点的算法如下:
二分Kmeans算法基本思想:以评估值指标(SSE)为依据进行二分,直到满足条件K,类似于CART树。
因为聚类的误差平方和能够衡量聚类性能,该值越小表示数据点越接近于他们的质心,聚类效果就越好。所以需要对误差平方和最大的簇进行再一次划分,因为误差平方和越大,表示该簇聚类效果越不好,越有可能是多个簇被当成了一个簇,所以我们首先需要对这个簇进行划分。
二分K均值算法可以加速K-means算法的执行速度,因为它的相似度计算少了并且不受初始化问题的影响,因为这里不存在随机点的选取,且每一步都保证了误差最小。
Kernel k-means算法基本思想:将原始线性不可分的数据,通过核函数映射到高维空间,使得原来线性不可分的数据在高位空间中线性可分,然后根据Kmeans算法来聚类。
案例1:
从多个数据集结果来看,Kernel k-means算法效果也比Kmeans算法好。
Kernel k-means算法与Kmeans算法适用情况:
K-medoids和K-means是有区别的,不一样的地方在于中心点的选取
:
K-medoids使用绝对差值和(Sum of Absolute Differences,SAD)的度量来衡量聚类结果的优劣,在n维空间中,计算SAD的公式如下所示:
( 1 )总体n个样本点中任意选取k个点作为medoids
( 2 )按照与medoids最近的原则,将剩余的n-k个点分配到当前最佳medoids代表的类中
( 3 )对于第i个类中除对应medoids点外的所有其他点,按顺序计算当其为新的medoids时,代价函数的值,遍历所有可能,选取代价函数最小时对应的点作为新的medoids
( 4 )重复2-3的过程,直到所有的medoids点不再发生变化或已达到设定的最大迭代次数
( 5 )产出最终确定的k个类
k-medoids对噪声鲁棒性
好。例:当一个cluster样本点只有少数几个,如(1,1),(1,2),(2,1),(1000,1000)。其中(1000,1000)是噪声。如果按照k-means质心大致会处在(1,1),(1000,1000)中间,这显然不是我们想要的。这时k-medoids就可以避免这种情况,他会在(1,1),(1,2),(2,1),(1000,1000)中选出一个样本点使cluster的绝对误差最小,计算可知一定会在前三个点中选取。
k-medoids只能对小样本起作用
,样本大,速度就太慢了,当样本多的时候,少数几个噪音对k- means的质心影响也没有想象中的那么重,所以k-means的应用明显比k-medoids多。
大数据量是什么量级?通过当样本量大于1万做聚类时,就需要考虑选用Mini Batch K-Means算法。
Mini Batch KMeans使用了Mini Batch(分批处理)的方法对数据点之间的距离进行计算。
Mini Batch计算过程中不必使用所有的数据样本
,而是从不同类别的样本中抽取一部分样本来代表
各自类型进行计算。由于计算样本量少,所以会相应的减少运行时间
,但另一方面抽样也必然会带来准确度的下降
。
Mini Batch K-Means算法与K-Means算法效果比较案例:
与Kmeans相比,数据的更新在每一个小的样本集上。对于每一个小批量,通过计算平均值得到更新质心,并把小批量里的数据分配给该质心,随着迭代次数的增加,这些质心的变化是逐渐减小的,直到质心稳定或者达到指定的迭代次数,停止计算。