聚类算法之k-means算法
基本思想:
它是基于给定的聚类目标函数,算法采用迭代更新的方法,每一次迭代过程都是向目标函数减小的方向进行,最终聚类结果使得目标函数取得极小值,达到较好的分类效果。
算法原理
在k-means的损失函数中存在两个未知的参数:一个是每个数据所属的类别{ti};一个是每个聚类的中心{μi}。这两个未知的参数是相互依存的:如果知道每个数据的所属类别,那么类别的所有数据的平均值就是这个类别的中心;如果知道每个类别的中心,那么就是计算数据与中心的距离,再根据距离的大小可以推断出数据属于哪一个类别。
针对每个点,计算这个点距离所有中心点最近的那个中心点,然后将这个点归为这个中心点代表的簇。一次迭代结束之后,针对每个簇类,重新计算中心点,然后针对每个点,重新寻找距离自己最近的中心点。如此循环,直到前后两次迭代的簇类没有变化。
算法步骤
- 首先随机生成k个聚类中心点
- 根据聚类中心点,将数据分为k类。分类的原则是数据离哪个中心点近就将它分为哪一类别。
- 再根据分好的类别的数据,重新计算聚类的类别中心点。
- 不断的重复2和3步,直到中心点不再变化。
流程图
Kmeans 对“亲疏程度”的测度
通常,“亲疏程度”的测度一般都有两个角度:第一,数据间的相似程度;第二,数据间的差异程度。衡量相似程度一般可采用简单相关系数或等级相关系数等,差异程度则一般通过某种距离来测度。Kmeans聚类方法采用的是第二个测度角度。
为有效测度数据之间的差异程度, Kmeans聚类算法将所收集到具有p个变量的样本数据,看成p维空间上的点,并以此定义某种距离。通常,点与点之间的距离越小,意味着它们越“亲密”,差异程度越小,越有可能聚成一类;相反,点与点之间的距离越大,意味着它们越“疏远”,差异程度越大,越有可能分属不同的类。
由于Kmeans聚类方法所处理的聚类变量均为数值型,因此,它将点与点之间的距离定义为欧氏距离,即数据的距离是两个点的p个变量之差的平方和的算术平方根,数学定义为
d(x,y)= ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 + ( x 3 − y 3 ) 2 . . \sqrt (x1-y1)^2+(x2-y2)^2+(x3-y3)^2.. (x1−y1)2+(x2−y2)2+(x3−y3)