主要参考 K-means 聚类算法及 python 代码实现 还有 《机器学习实战》 这本书,当然前面那个链接的也是参考这本书,懂原理,会用就行了。
1、概述
K-means 算法是集简单和经典于一身的基于距离的聚类算法
采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。
该算法认为类簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。
说白了就是无监督的聚类,大家都是同一个标注,或者没有标注,然后这一堆数据是一类,那一堆又是一类,你人为的设置好几个类,算法自动帮你分好各个类,只要每个类的样本尽可能的紧凑即可。
2、核心思想
通过迭代寻找 k 个类簇的一种划分方案,使得用这 k 个类簇的均值来代表相应各类样本时所得的总体误差最小。
k 个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。
k-means 算法的基础是最小误差平方和准则,
其代价函数是:
式中,μc(i) 表示第 i 个聚类的均值。
各类簇内的样本越相似,其与该类均值间的误差平方越小,对所有类所得到的误差平方求和,即可验证分为 k 类时,各聚类是否是最优的。
上式的代价函数无法用解析的方法最小化,只能有迭代的方法。
3、算法步骤图解
下图展示了对 n 个样本点进行 K-means 聚类的效果,这里 k 取 2。