聚类就是将一系列数据进行归类,属于无监督学习,所谓无监督学习是和有监督学习相对于的,像之前所学习的很多模型是知道自变量X和因变量Y的,着属于有监督学习,而有些时候并不知道因变量Y,这种就属于无监督的学习,那么聚类首先就是由于不知道他们归于哪一个类,而是按照数据之间的相似性进行聚类,使得同一类中的个体差异越小,不同类中的个体相似性最小,那么k-means聚类算法就是这一类算法的典型算法。
在聚类问题中,给我们的训练样本是
,每个
,没有因变量y。
K-means算法是将样本聚类成k个簇(cluster),具体算法描述如下:
其具体流程如下:
1、 随机选取k个聚类质心点(cluster centroids)为
。
2、 重复下面过程直到收敛
{ 对于每一个样例i,计算其应该属于的类
对于每一个类j,重新计算该类的质心
}
K-means面对的第一个问题是如何保证收敛,下面定性的描述一下收敛性,假设我们定义畸变函数(distortion function)如下:
J函数表示每个样本点到其质心的距离平方和。K-means是要将J调整到最小。假设当前J没有达到最小值,那么首先可以固定每个类的质心,调整每个样例的所属的类别来让J函数减少,同样,固定,调整每个类的质心也可以使J减小。这两个过程就是内循环中使J单调递减的过程。当J递减到最小时,和c也同时收敛。(在理论上,可以有多组不同的和c值能够使得J取得最小值,但这种现象实际上很少见)。
由于畸变函数J是非凸函数,意味着我们不能保证取得的最小值是全局最小值,也就是说k-means对质心初始位置的选取比较感冒,但一般情况下k-means达到的局部最优已经满足需求。但如果你怕陷入局部最优,那么可以选取不同的初始值跑多遍k-means,然后取其中最小的J对应的数值输出。
简单点,k-means聚类算法就是反复两个过程:
-
确定中心点
-
把其他的点按照距中心点的远近归到相应的中心点