无监督学习-k-means聚类方法

K-Means 聚类方法


对象

  • 与有监督学习不同的是,无监督学习所面向的数据是没有标签的。
  • 那么如果给定一个无标签的数据集,怎么对其进行分类呢,这时就要使用聚类方法
  • K-means 就是聚类方法的一种

K-means 的流程:

k-means 是一个迭代算法,可以按以下步骤记忆

  1. 按照给定的K值产生K个不同的聚类中心
  2. 数据点与K个聚类中心进行距离上的计算,每个数据点选择其本身距离最近的聚类中心的类作为本轮的归属
  3. 按照新的数据分布,分别计算各类数据的均值来作为新的聚类中心
  4. 不断迭代2,3步骤,直到聚类中心不再进行变化算法结束

注意:如果分类的过程中发生某类簇中没有数据点的情况,就将那个簇删除掉;若对簇的数量有要求,就重新进行聚类中心的初始化。

失真函数

J ( c 1 , c 2 , … , c m , μ 1 , μ 2 , … , μ k ) = 1 m ∑ i = 1 m ∣ ∣ x [ i ] − μ c [ i ] ∣ ∣ 2 t a r g e t : m i n J ( c , μ ) J(c_1,c_2,\dots , c_m,\mu_1,\mu_2,\dots,\mu_k) = \frac{1}{m}\sum^{m}_{i=1}||x^{[i]} - \mu_{c^[i]} ||^2 \\ target: minJ(c,\mu) J(c1,c2,,cm,μ1,μ2,,μk)=m1i=1mx[i]μc[i]2target:minJ(c,μ)
从数学角度来看,K-means算法是基于上式的损失函数来优化求解的。

  • c i c_i ci是第i个数据点的分类
  • μ k \mu_k μk是聚类中心
  • μ c [ i ] \mu_{c^{[i]}} μc[i]代表的是某轮迭代时,数据点x的分类的聚类中心

而K-means的两个迭代流程可以分别看作,失真函数J对于c和u做拉格朗日乘子法得到的最值解。
比如在簇分配时,就是固定u变量,计算所有x到u的距离,通过此方法来优化c
而在更新聚类中心时,就是固定c变量,并利用c来重新计算新的聚类中心。

聚类中心的初始化

在算法的第一步就是初始化聚类中心的位置,这里应用了一个较好的方法,就是在所有的数据点里随机化选择k个(不放回抽取)点作为初始的聚类中心,依据此来开始算法的迭代

但是这种随机化分配的变化性较强,就使得聚类的结果会出现问题,产生局部最优解

此时对应的解决办法就是,多次(比如100次)随机化初始聚类中心,然后进行聚类的分配,并计算每次最终的分类对应的失真函数的值,选择最小的一次作为最终的分类结果。这种方法对K在2到10之间的聚类问题很有效果,当类的数量太多的时候,这种方法的作用就不会那么明显了。

K的选择

通常来讲,K的选择是经过人的思考或经验决定的,它通常取决于要解决的问题或要达到的目的,因此并不存在一种自动的最优的k的选择方法
若不知道K应该取多少,可以通过”肘部法则“来进行尝试,但往往并不会取得太好的效果。

你可能感兴趣的:(机器学习,聚类)