1.K-means算法定义
首先是随机地初始化 k 个聚类中心 μ1、μ2、μ3,…,μk,这些聚类中心的维度和数据集中的 x 维度是一样的,并且聚类中心是随机的,不一定是属于数据集中的点。
然后再迭代(重复)下面的操作:
(1)cluster assignment(簇分配):计算数据集中的所有的点与每一个簇中心的距离,然后将该点分配给簇距离最短的一类(假设该类别为 j ) ,则 = j ; 举例说明,首先计算
与各个聚类中心 μ1、μ2、μ3,…,μk 的距离,假设最近的距离是与μ3之间的,则
= 3;
(2)move centroid(移动聚类中心):计算同一个分类的所有点的平均值,并将该值赋给这个类的聚类中心,如图中底下蓝色的计算方式。
最后聚类中心的点,不再发生移动时,认为聚类算法执行完毕。
2.optimization objective function
优化目标函数,或者说最小化代价函数,二者要做的实际是同一件事情。
如图所示,优化目标 J(…)等于各个点与所在簇中心的距离的平方和的均值,实际上k-means算法的过程,就是不断减小 J(…) 的过程。
3.Random Initialization
假设将原来的数据划分为三个簇,那么当选取不同的初始簇中心时,最终稳定下来的划分的簇也不一定相同,如图所示,最终产生了三种不同的划分结果。因此,为了得到全局最优解,我们需要初始化多次簇中心,然后再运行k-means算法,最后再比较哪种算法的代价 J 最小,就选取哪种分类的方式。
具体做法如下图所示:
4. 确定分类的数量 K
4.1 Elbow(手肘) method
如图所示,绘制出 cost function J 关于 K(no.of clusters)的函数图像,假如出现图中左边所示的,明显的转折点,或者称为肘的话,那么我们认为这个点对应的 K 是最合适的分类数目,当然大部分时候也有可能出现右边的情况,这个时候我们就需要采用第二种方法。
4.2 upon user’s purpose
假设你是一个衣服制造商,然后要决定到底是生产3个型号的衣服、还是5个型号的衣服,这个时候就要参考它的实际意义了,例如咨询衣服经销商关于不同尺码的销售情况,怎样销售利润高,然后再做不同的判断。