目录
K-Medoids
K-means是基于“质心”的聚类方法。算法快速高效,但也面临一些短板,特别是样本中的异常数据,可能会使聚类结果产生严重偏离。针对这个问题,K-medoids 聚类法基于“代表对象”的方法,在削弱异常值的影响上就有着其过人之处。
基本原理
在 K-means 算法中,每次选簇的平均值作为新的中心,迭代直到簇中对象分布不再变化。因此一个具有很大极端值的对象会扭曲数据分布,造成算法对极端值敏感。
K-Medoids(中心点)算法不选用平均值,转而采用 簇中位置最中心的对象,即中心点(medoids) 作为参照点,算法步骤也和 K-means 类似,其实质上是对 K-means算法的改进和优化。
PS:k-mediods 每次选取的质心,必须是样本点,而 k-means每次选取的质心可以是样本点之外的点,就好比中位数和平均值的区别,那么 K-Medoids 的重点,就在于中心点的选取。
选取簇中心点的准则函数是 : 当前簇中所有其他点到该中心点的距离之和最小需要遍历簇中所有点
算法步骤
step1、任意选取 k 个点作为 medoids
step2、按照与medoids最近的原则,将剩余点分配到当前最佳的medoids代表的类中
step3、在每一类中,计算每个成员点对应的准则函数,选取准则函数最小时对应的点作为新的 medoids
step4、重复2-3的过程,直到所有的 medoids 点不再发生变化,或已达到设定的最大迭代次数
其中准则函数为,一类中,某个成员点和其他成员点的距离之和
优缺点分析
优点:当存在噪音和孤立点时, K-medoids 比 K-means 更健壮。
缺点:K-medoids 对于小数据集工作得很好, 但不能很好地用于大数据集,计算质心的步骤时间复杂度是O(n^2),运行速度较慢
K-Means++
K-Means算法中的聚类中心的个数k需要事先指定,这一点对于一些未知数据存在很大的局限性。其次,在利用K-Means算法进行聚类之前,需要初始化k个聚类中心,在上述的K-Means算法的过程中,使用的是在数据集中随机选择最大值和最小值之间的数作为其初始的聚类中心,但是聚类中心选择不好,对于K-Means算法有很大的影响。总之一句话,Kmeans++算法解决的是Kmeans算法选取初始值的问题。
基本原理
K-Means++算法在聚类中心的初始化过程中的基本原则是使得初始的聚类中心之间的相互距离尽可能远,这样可以避免初始值带来的负面影响。K-Means++算法与K-Means算法最本质的区别是在k个聚类中心的初始化过程。
假设已经选取了n个初始聚类中心(0<n<K),则在选取第n+1个聚类中心时:距离当前n个聚类中心越远的点会有更高的概率被选为第n+1个聚类中心。在选取第一个聚类中心(n=1)时同样通过随机的方法。可以说这也符合我们的直觉:聚类中心当然是互相离得越远越好。这个改进虽然直观简单,但是却非常得有效。
算法步骤
step1: 在数据集中随机选择一个样本点作为第一个初始化的聚类中心
step2:选择出其余的聚类中心:
1)计算样本中的每一个样本点与已经初始化的聚类中心之间的距离,并选择其中最短的距离,记为d_i
2)以概率选择距离最大的样本作为新的聚类中心,重复上述过程,直到k个聚类中心都被确定
step5:对k个初始化的聚类中心,利用K-Means算法计算最终的聚类中心。
K-median
与k-means的区别
区别一:中心点的选取方式不同。 k-means 用的是平均值来重新计算分布我们的每个聚类当中的点,但是k-medians 算法选取的就是我们的中位值。这个好处就是针对一个数据集来了几个噪音特别大的点,也就是和其他的点分布远的离谱的点,中位值的变化也不是很大的。甚至可能没有变化。故而k-median的鲁棒性比k-means强
区别二:距离公式可能不同。 k-means 一般会选取欧几里得距离公式,k-median采用的是曼哈顿距离公式。
算法步骤
-
选取我们的初始的中心点的个数
-
计算剩余的点的距离到初始的中心点的距离
- 将距离到中心点的距离最短的归为一类
- 用曼哈顿距离重新计算中心点
- 重复3,4两个步骤,直到中心点不会变化为止