《机器学习算法与实现 —— Python编程与应用实例》-- 第三贴 K均值聚类算法
[复制链接]
引言:
本书第五章讲解了K均值聚类算法
K均值聚类算法是一种简单的迭代型算法,它使用距离来评判相似性,发现给定数据集中的k个类别,其中每个类别的中心都由该类别中的所有值的均值得到,最后每个类别都由聚类的中心描述。一般采用欧氏距离。核心思想:循环迭代求解。
K均值聚类算法属于无监督学习,k最近邻算法属于经典的监督学习,分类是已知的。而K均值聚类算法的分类是未知的。通过感知样本间的相似度进行类别归纳。
K均值聚类原理:
重复移动类别的中心(或者重心),移动至其包含成员的平均位置;然后重新划分其内部成员;重复执行上述过程直到收敛或者达到最大迭代次数。K是提前设置的超参数,表示类别个数。,
K均值聚类算法:
先随机选取K个对象作为初始的聚类中心。然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。一旦全部对象都被分配了,每个聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是以下任何一个:
1、没有(或最小数目)对象被重新分配给不同的聚类。
2、没有(或最小数目)聚类中心再发生变化。
3、误差平方和局部最小。
K均值聚类算法首先保持u(重心)不变,重复迭代更新c来最小化J, 然后保持c不变,更新参数u来最小化J. 从数学上讲,J一定单调递减且收敛。理论上,K均值聚类算法可能会在不同的聚类重心之间振荡,对于不同的c和/或不同的u可能会得到相同的J值。
u指的是重心, c指的是元素,J指的是损失函数(欧氏距离平方和)。
评估聚类性能
对于分类问题,可以直接通过计算被错误分类的样本数量,得出准确率;然而聚类问题,并没有具体的标签,无法直接用绝对数量来评估性能。
本书介绍了两种方法来评估聚类,第一种是调整兰德指数(ARI),第二种是轮廓系数。
如果被评估的数据本身带有正确的类别信息时,可以用ARI.
轮廓系数是一种适用于评估的数据无标签时进行评估。文章用一个例子很好的说明了轮廓系数的使用。
轮廓系系数最大的k,为最佳的分类数。
K均值聚类算法应用:
本书讲解如何利用K均值聚类算法实现图像的压缩功能,在保证图片质量的前提下,节省了20%多的存储空间。
分享中数学知识没有过多涉及,一方面这些公式难以书写,另一方面写出来似乎也难以描述清楚,感兴趣的同学,可以搜索K-means聚类算法,有很多公式。而本书可以作为一个很好的工具书,引导大家更快的建立相关知识体系,凝练人类现有智慧,为前行者指引方向,我想这便是书籍的作用,而本书则是其中一员。
|