一、算法原理
随机生成聚类中心,选取两个点是因为想把数据分成两类
KMeans算法是一个迭代算法
每次迭代他会做两件事:
- 簇分配(cluster assignment )
每次内循环的第一步就是簇分配,也就是遍历每个样本点,根据每一个点与红色聚类中心更近还是蓝色聚类中心更近来将每个样本点划分到某个聚类中心。
- 移动聚类中心(move centroid)
内循环的第二步就是移动聚类中心
将两个聚类中心将其移动到相同颜色点的均值处。
当继续运行迭代但是聚类中心不会再移动时,Kmeans算法已经聚合。用KMeans进行二分类效果很好。
parameters:
- 想要的簇的个数K(寻求最优参数K)
- 一系列无标签的只用x来表示的数据集
KMeans算法可以解决分离不佳的簇的问题
二、KMeans算法的优化函数
方便调参,帮助我们找到最优的K值,避免局部最优解。
代价函数:
这个代价函数有时也叫失真代价函数或K均值算法的失真
三、KMeans算法的初始化:如何使算法避开局部最优
根据初始化聚类中心的不同,两个算法可能会收敛到到不同的结果
可以尝试多次随机初始化:
如果簇的数量K在2-10之间,进行50-1000次的随机初始化可以保证收敛到较好的局部最优解,能找到较好的聚类
如果是要找到100多个聚类,多次随机初始化并不能保证收敛到一个较好结果
四、如何选择KMeans算法的K值
这个问题没有自动处理的办法
确定聚类数量最常用的方法还是观察可视化的图或观察聚类算法的输出
如果面对的数据不是二维数据,大于3维不好可视化怎么办?
无监督学习没有标签,没有确定的答案
用一个自动化的办法来选择一个合适的聚类数量比较困难
人们选择K值时,通常会用到 “肘部法则”
左图是肘部法则适用的情况
右图没有明显的肘部,此时不适用
图像压缩的KMeans算法编程习题是一个较好的应用下游目的来确定K值的例子。
想要图片质量更好?
想要图片体积更小?