定义
K-Means算法(K-均值聚类)是典型的基于距离的非层次聚类算法,在最小化误差函数的基础上将数据划分为预定的类数K,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度越大。
算法过程
- 从N个样本数据中随机选取K个对象作为初始的聚类中心
- 分别计算每个样本到各聚类中心的距离,将对象分配到距离最近的聚类中
- 所有对象分配完成之后,重新计算K个聚类的中心
- 与前一次计算得到的K个聚类中心比较,如果聚类中发生变化,则转回过程2,否则转至过程5
- 当质心不在发生变化时停止并输出聚类结果
在实践中,通常会选择不同的初始聚类中心,多次运行K-Means算法。目的是为了预防聚类结果依赖于初始聚类中心的随机选择而导致结果严重偏离全局最有分类。
距离公式
对于连续属性,要先对各属性值进行零-均值规范,再进行距离的计算。
样本与簇之间的距离可以用样本到簇中心的距离 d ( e i , x ) d(e_i,x) d(ei,x);簇与簇之间的距离可以用簇中心的距离 d ( e i , e j ) d(e_i,e_j) d(ei,ej)。
用p个属性来表示n个样本的数据矩阵: [ x 11 ⋯ x 1 p ⋮ ⋱ ⋮ x n 1 ⋯ x n p ] \begin{bmatrix} x_{11} & \cdots & x_{1p}\\ \vdots & \ddots &\vdots \\ x_{n1} & \cdots & x_{np} \end{bmatrix} ⎣⎢⎡x11⋮xn1⋯⋱⋯x1p⋮xnp⎦⎥⎤
-
欧几里得距离:
d ( i , j ) = ( x i 1 − x j 1 ) 2 + ( x i 2 − x j 2 ) 2 + . . . + ( x i p − x j p ) 2 d\left ( i,j \right )=\sqrt{(x_{i1}-x_{j1})^2 +(x_{i2}-x_{j2})^2+...+(x_{ip}-x_{jp})^2} d