机器学习08-K-means算法

K-means算法

K-means算法是聚类问题(无监督学习)应用最广泛的算法

步骤

  • K-means算法接收两个输入:

    • K:聚类出的族的个数
    • 数据集 { x ( 1 ) , x ( 2 ) , . . . , x ( m ) } \{x^{(1)},x^{(2)},...,x^{(m)}\}

    此外,规定 x ( i ) R n x^{(i)} \in \mathbb R^n (即去除了 x 0 = 1 x_0 = 1 )

  • 第一步:随机初始化 K 个聚类中心,记为 μ 1 , μ 2 , . . . , μ k R n \mu_1,\mu_2,...,\mu_k \in \Bbb R^n

  • 第二步:重复以下步骤,直到聚类中心不再移动

    • 族分配
      for i = 1 to m :
      compute c ( i ) = m i n k x ( i ) u k 2 c^{(i)} = min_k||x^{(i)} - u_k||^2
      这里 小写 k 表示第 i 个聚类
      c ( i ) c^{(i)} 表示当前样本 x ( i ) x^{(i)} 所属的那个族的索引或者序号
    • 移动聚类中心
      for k = 1 to k :
      计算聚类 k 的所有点的平均距离 μ k \mu_k ,将聚类中心 k 移到此处
      例如: c ( 1 ) = 2 , c ( 5 ) = 2 , c ( 6 ) = 2 , c ( 10 ) = 2 c^{(1)}=2,c^{(5)}=2,c^{(6)}=2,c^{(10)}=2 ,则
      μ k = 1 4 [ x ( 1 ) + x ( 2 ) + x ( 3 ) + x ( 4 ) ] R n \mu_k = \frac{1}{4}[x^{(1)}+x^{(2)}+x^{(3)}+x^{(4)}] \in \Bbb R^n

如果存在一个没有点的聚类中心,一般是直接去除该聚类(即从 K 变成 K-1),或者是重新初始化聚类中心,但这种情况比较少出现。


代价函数(失真代价函数)

J ( c ( 1 ) , c ( 2 ) , . . . , c ( m ) , μ 1 , . . . , μ K ) = 1 m i = 1 m x ( i ) μ c ( i ) 2 J(c^{(1)},c^{(2)},...,c^{(m)},\mu_1,...,\mu_K) = \frac{1}{m}\sum_{i=1}^m ||x^{(i)} - \mu_{c^{(i)}}||^2

其中, u c ( i ) u_{c^{(i)}} 表示 x ( i ) x^{(i)} 所属的那个族的聚类中心。


随机初始化

步骤

  • 设置 K < 训练样本 m
  • 在训练集中随机选择 K 个点
  • μ 1 , μ 2 , . . . , u K \mu_1,\mu_2,...,u_K 等于这 K 个样本

随机初始化值不同,K均值最后可能得到不同的结果

如何避免局部最优

在这里插入图片描述

随机初始化多次(一般50-1000次),选择最小的 J ( θ ) J(\theta)

当 K 比较小时(2-10),多次随机初始化会有较大的影响,可以保证最下化畸变函数。 但是当 K 较大时,多次随机初始化结果可能会好一点点,但是不会好太多。