K-均值(K-means)算法是一种典型的无监督机器学习算法,用来解决聚类问题(Clustering)。由于数据标记需要耗费巨大的人力物力,无监督或者半监督学习算法不需要对数据进行标记,可以大大减少工作量。
1.K-均值算法原理
我们需要注意聚类问题和分类问题的区别。针对监督式学习算法,如K-近邻算法,其输入数据是已经标记了的 ( x ( 1 ) , y ( 1 ) ) (x^{(1)},y^{(1)}) (x(1),y(1)), ( x ( 2 ) , y ( 2 ) ) (x^{(2)},y^{(2)}) (x(2),y(2)),…, ( x ( m ) , y ( m ) ) (x^{(m)},y^{(m)}) (x(m),y(m)),目标是找出分类边界,然后对新的数据进行分类。而无监督式学习算法,如K-均值算法,只给出一组无标记的数据集 x ( 1 ) x^{(1)} x(1), x ( 2 ) x^{(2)} x(2),…, x ( m ) x^{(m)} x(m),目标是找出这组数据的模式特征,如哪些数据是同一种类型的,哪些数据是另外一种类型。典型的无监督式学习包括市场细分,即通过分析用户数据,把一个产品的市场进行细分,找出细分人群。另外一个是社交网络分析,分析社交网络中参与人员的不同特点,根据特点区分出不同群体。这些都是无监督式学习里的聚类(Clustering)问题。
K-均值算法包含以下两个步骤:
(1)给聚类中心分配点。计算所有的训练样本,把每个训练样例分配到距离其最近的聚类中心所在的类别里。
(2)移动聚类中心。新的聚类中心移动到这个聚类所有的点的平均值处。
一直重复上面的动作,直到聚类中心不再移动为止,这时就探索出了数据集的结构了。
我们也可以用数学方式来描述K-均值算法。算法有两个输入:一个是K,表示选取的聚类的个数;另外一个是训练数据集 x ( 1 ) x^{(1)} x(1), x ( 2 ) x^{(2)} x(2),…, x ( m ) x^{(m)} x(m)。
(1)随机选择K个初始聚类中心 u 1 u_1 u1, u 2 u_2 u2,…, u k u_k uk。
(2)计算数据集中的每个点 x ( i ) x^{(i)} x(i)分别到这K个聚类中心 u 1 u_1