基本思想
通过迭代寻找k个聚类的一种划分方案,使用这k个聚类的均值来代表相应各类样本时所得到的总体误差最小。
一旦给定了类别数目k,k均值就按照平方误差和最小的原则将所有样本划分到指定数目的类中。
k均值(k-means)有时也称C均值(C-means),属于非监督学习。
构建方法
- 给定初始的类别数k
- 随机选取k个样本点作为聚类中心
- 对剩余样本计算与k个中心的距离,将其划分到最近的聚类中心,形成初始的k类
- 选取样本y,将其从原始聚类Y中取出,计算取出后Y中误差平方和的减少量
- 将样本y依次放入其他类别中,计算在该类别中的误差平方和的增加量
- 如果最小的增加量<减少量,则将样本y移到最小增加量对应的聚类中,否则y仍在原聚类中
- 重新计算聚类中心,选取下一个样本进行迭代
参数 k 选取
k均值的前提是已知聚类数k,当类别数目未知的时候可以采用遍历的方案:k=1,2,3…。
当然,误差平方和随k的增加是减小的,当k的减少幅度突然变慢时,说明这是将原本比较密集的样本再分开,所以曲线的拐点就是接近最优的聚类数。
但是,实际中往往不会存在明显的拐点,需要通过实际效果来反馈。
聚类中心选取
1)随机选取
2)选择批次距离尽可能远的K个点(Kmeans++)
首先随机选择一个点作为第一个初始类簇中心点,然后选择距离该点最远的那个点作为第二个初始类簇中心点,然后再选择距离前两个点的最近距离最大的点作为第三个初始类簇的中心点,以此类推,直至选出K个初始类簇中心点。
3)选用层次聚类算法(BIRCH和ROCK)或者Canopy算法进行初始聚类,然后利用这些类簇的中心点作为KMeans算法初始类簇中心点。
参考资料:https://blog.csdn.net/u012197703/article/details/79434005
猜你喜欢:👇🏻
⭐【算法】一个简单的ISODATA原理
⭐【算法】一个简单的主成分分析(PCA)原理
⭐【算法】一个简单的线性判别分析(LDA)原理