K-means算法

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

步骤

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

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

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

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

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

    • 族分配
      for i = 1 to m :
      compute c(i)=minkx(i)uk2c^{(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)=2c^{(1)}=2,c^{(5)}=2,c^{(6)}=2,c^{(10)}=2,则
      μk=14[x(1)+x(2)+x(3)+x(4)]Rn\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)=1mi=1mx(i)μc(i)2J(c^{(1)},c^{(2)},...,c^{(m)},\mu_1,...,\mu_K) = \frac{1}{m}\sum_{i=1}^m ||x^{(i)} - \mu_{c^{(i)}}||^2

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


随机初始化

步骤

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

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

如何避免局部最优

机器学习08-K-means算法

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

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


相关文章:

  • 2021-08-14
  • 2021-09-15
  • 2021-07-29
  • 2021-04-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-11
猜你喜欢
  • 2021-12-20
  • 2021-11-20
  • 2022-12-23
  • 2021-08-21
  • 2022-12-23
  • 2021-12-05
  • 2021-12-23
相关资源
相似解决方案