聚类算法总结
Kmeans
kmeans, 或k-均值聚类是一个不断重复迭代的算法,试图将样本分到k样本不交叉的簇中,划分的过程中,需要尽量的做到“同一个类内的样本离的越近越好,不同类间的样本离得越远越好”。
划分的过程使得类样本的平方和最小(WCSS within-cluster sum of squares),其需要满足目标:
其中,\(\mu_i\)是\(S_i\)中所有点的均值,上式叫做L2规数/欧几里得距离,算法的步骤为:
- 指定聚类数量k
- 随机初始化k个样本作为初始聚类中心
- 不断计算每个样本与聚类中心的距离,将样本分配给最近的中心
- 所有样本计算结束后,重新计算各自类簇内的聚类中心,计算方式为平均类内的所有样本
- 重复 3 4 步直到聚类中心不再变化或者达到迭代次数为止
kmeans存在的问题
- 因为涉及到距离,如果采用欧式距离等只能适合于对连续型数据
- 计算时间复杂度太高,基本就是\(O(n^2)\)
- 由于是随机初始化的聚类中心,因次每次聚类的结果都不会稳定,而且效果不好
- 容易收到异常值的影响
kmeans++
因为kmeans随机初始化聚类中心而导致的聚类结果不稳定的问题,kmeans++主要针对这个问题做了改进。核心就是在初始化聚类中心的时候,选择离已选的聚类中心最远的点作为初始化的依据
计算方式为:
- 随机选取中心点\(c_1\)
- 计算每个未被选择的样本与已有聚类中心的最短距离\(D(x)\)
- 计算每个样本被选为下一个聚类中心的概率:\(\frac{D(x)^2}{\sum_{x\in X} D(x)^2}\), 那么,谁离几个聚类中心最远,就更有可能被选择为聚类中心。
- 重复 2、3步直到选择到k个聚类中心
5 选出后遵循kmeans的4 5 步
kmeans++存在的问题
- 除了聚类中心之外,其他的劣势和kmeans差不多
Mean Shift
mean shift(均值漂移)是一种用在非参数特征空间内用于定位密度函数最大值的算法,本质上是一种基于核密度的聚类算法。
它的工作原理是将质心的候选样本更新为给定区域内点的平均值,然后在后处理阶段对这些候选对象进行过滤,以消除近似重复的对象,从而形成最终的质心集。
均值漂移描述了一种定位密度函数最大值的通用非参数分析方法,其中均值漂移聚类只是指其在聚类任务中的应用。换句话说,mean shift在聚类应用中做的事情就是定位密度函数最大值(均值漂移算法),然后将点分配给最近的最大值。从这个意义上说,它与 k-means 有一些相似之处(密度最大值对应于后者的质心)。
区别于kmeans,它的实现不需要预先指定聚类数量,而且由于它是基于密度的,它可以检测任何形状的簇(kmeans是球形簇)。但是该算法依赖于带宽参数(或者说是滑窗半径),该参数仅确定将要被计算密度的邻域大小。小半径可能会产生过多的簇,而大半径可能会错误地组合多个簇。不过,可以使用使用 (kNN) 算法来确定最佳半径。
直观的看,聚类中心最初是随机映射到数据集上的(如 k-means)。每个中心周围是一个球(其半径由带宽参数决定),其中密度等于每个球内的点数。通过将中心移动到球内点的平均值(因此得名),球的中心被迭代地推向更高密度的区域。重复这个过程,直到球几乎没有运动。当多个球重叠时,保留点数最多的球,球内的样本属于同一个类簇