K-Means是无监督的聚类算法。
传统K-Means算法的两个大的缺点:
1) 必须事先给定K值,这个K值的选定是非常难以估计的
2) 确定好K值后,需要随机初始化K个不同的中心,因此不同的初始化会得到完全不同的结果
初始化优化K-Means++
上面我们提到,K个初始化质心的位置选择对最后的聚类结果和运行时间都有很大的影响。K-Means++算法就是对传统K-Means随机初始化质心的方法的优化。
K个初始质心的选择策略:
- 从输入的样本集合中随机选择一个点作为第一个聚类中心
- 计算每一个样本与已选质心的距离,记录下每一个样本到质心的最近距离 D ( x i ) D(x_i) D(xi),即 D ( x i ) = m i n ∣ ∣ x i − u k ∣ ∣ 2 2 , k = 1 , 2 , . . . , k s e l e c t e d D(x_i) = min || x_i - u_k||_2^2, k=1,2,...,k_{selected} D(xi)=min∣∣xi−uk∣∣22,k=1,2,...,kselected
- 在选择下一个聚类中心的时候, D ( x ) D(x) D(x)较大的点,被选作聚类中心的概率最大
- 重复2-3步直到选出K个质心
- 利用这K个质心作为初始化质心去运行传统的K-Means算法
大样本优化Mini Batch K-Means
用样本集中的一部分的样本来做传统的K-Means。Mini batch的样本一般通过无放回的随机采样得到。
为了增加算法的准确性,一般会多跑几次Mini batch k-means算法,用得到的不同的随机采样集来得到聚类簇,选择其中最优的聚类簇。
K-Means与KNN
K-Means:无监督的聚类方法,K指的是聚类中心的个数
KNN:有监督的分类或回归算法,K指的是需要考虑的近邻的个数,然后通过投票法得出新样本的类别,或者平均法得到新样本的值。KNN是懒惰学习,没有训练过程。
K-Means与EM算法
K-Means目标函数:
K-means是要将J最小化。可以看出,在K-means中需要学习的是样本属于哪个簇,每个簇的中心是什么。
K-means可以看成两阶段:
第一阶段(EM的E步):确定每一个样本所属的聚类。在这个过程中,聚类的中心保持不变;
第二阶段(EM的M步):确定聚类中心。在这个过程中,每一个样本所属的类别保持不变。
K-means中的EM思想是:E步是确定隐含类别变量c,M步更新 μ \mu μ来使J最小化。这里,确定隐含类别变量的方法是硬指定。
K-means的损失函数是非凸的。不一定能达到全局最小,因此多几次初始化,看哪次聚类效果好。
K-Means收敛性
K-Means在每一次迭代中的E步和M步都能保证J在变小,因此可以收敛。
K-Means与高斯混合模型
相同点:
- 需要指定K值
- 需要指定初始值,K-Means里的聚类中心,GMM的各个参数
- 都是含有EM算法思想
不同点:
- 优化目标不同,K-Means是最短距离,GMM是极大对数似然
- E步的指标不同,K-Means是硬指标,GMM是软指标