K-means聚类算法

一、经典聚类算法

1. 问题描述

在这里插入图片描述
输入:给定训练样本, x i ∈ R n x_{i}\in R^{n} xiRn,但是没有给标签(聚类算法是属于无监督学习)
输出:将样本聚类成k个簇(cluster)

2. 算法思路

随机先选定初始聚类中心,然后计算每一个样本到 聚类中心的最短距离,并按照距离最小划分对应类,重新计算聚类质心,循环直到收敛
算法步骤:

  • 1.从数据集中随机选择K个样本作为初始化聚类中心 C = ( c 1 , c 2 , . . . . , c k ) C=(c_{1},c_{2},....,c_{k}) C=(c1,c2,....,ck)
  • 2.对于数据中的每一个样本 x i x_{i} xi,计算到K个聚类中心的距离,并将这个样本分类到距离最小的聚类中心所对应的类中
  • 3.对于分完的每一个类别 c i c_{i} ci,重新计算聚类中心 c i = 1 ∣ c i ∣ ∑ c ∈ c i x c_{i}=\frac{1}{|c_{i}|}\sum_{c\in c_{i}}x ci=ci1ccix(就是属于该类的所有样本点的质心)
  • 4.重复直到收敛
3. 问题讨论:

1> 若把所有点都分类完成,那么这个类的聚类中心是什么:

聚类中心是该类中所有样本的均值

2> 为什么K-means算法会一直收敛,收敛的最小值是全局最优值吗?

实际上K-means聚类的目标函数是:
J = ∑ i = 1 n m i n j ∈ ( 1 , 2... , k ) ∣ ∣ x i − c j ∣ ∣ 2 J=\sum_{i=1}^{n}min_{j\in (1,2...,k)}||x^i-c_{j}||^2 J=i=1nminj(1,2...,k)xicj2

  • 所以可以看到J是非凸函数,意味着不能保证取得的最小值是全局最小值,也就是说k-means对质心初始位置的选取比较敏感
  • 可以发现每一轮计算固定每个类的质心,调整每个样例的所属的类别能让J函数减少,同样固定分类,调整每个类的质心也可以使J减小,所以每次计算目标函数的值都在减小

3>为什么随机选择初始值容易出错

可以分析下初始化选择的k个中心点正好被我们选在了K个簇群的概率:
k个中心点有 k ! 种选择,但是每一个簇群有k种选择,一共有k个簇群,那么概率就是 k ! K k ≃ 1 e k \frac{k!}{K^k} \simeq \frac{1}{e^k} Kkk!ek1,那么当有多个分类的时候会发现我们的错误率几乎为0

4>优化的重点在哪里,优化的思路是怎样的

  • means对质心初始位置的选取比较敏感,所以初始化类的确定是优化的重点
  • 增加初始化选择的k个中心点正好被我们选在了K个簇群的概率

二、K-means++算法

1. 初始类质心的优化思路
  • 最远遍历
    思路:随机选取聚类点k1,k2的选择离k1最远的点,k3选择离k1和k2最远的点,依次次类推,选择得到所有初始化质心,这样尽量可以保证每一个簇群能有一个中心点被选中
    缺点:
    这样的选择方案受到噪声点(outliner)的影响比较大
    如图:
    第一个点选择红色,按照最远遍历选择方案,第二个点选择绿色点,第三个点选择中间黑色团
    在这里插入图片描述
    聚类效果如下:(显然不是最优结果)
    在这里插入图片描述
  • K-means++
    如下介绍
2. K-means++算法

参考论文[3]

  • 1.从数据集中随机选择一个样本点作为初始聚类中心 c i c_{i} ci
  • 2.计算每个样本与已有最近聚类中心距离 D ( x ) D(x) D(x):然后计算每个样本被选中为下一个聚类中心的概率公式为 D ( x ) 2 ∑ x ∈ X D ( x ) 2 \frac{D(x)^2}{\sum_{x\in X }D(x)^2} xXD(x)2D(x)2,然后按照轮盘法选择出下一个聚类中心
  • 3.一直选完K个聚类中心
  • 4.按照经典K-means算法直到收敛

什么是轮盘法:
将每个样本的概率P(x)累加排序,利用随机数产生器,随机产生出一个0~1之间的随机数,判断它属于哪个概率区间之间,那么该区间对应的序号就是被选择出来的第二个聚类中心,详细看参考论文3

3.讨论分析
  • 1.时间复杂度分析

初始化时,需要算每个样本到聚类中心的值所以每一个点 O ( n d ) O(nd) O(nd),n为样本数,d为样本维度,那么有K个聚类中心就是 O ( K n d ) O(Knd) O(Knd),是一个线性复杂度
每一回合迭代也是 O ( K n d ) O(Knd) O(Knd),所以初始化的复杂度可以忽略

  • 2.K值如何选取

交叉验证,分成训练级和测试集,得到K
Elbow method:是说明采取多个K值比如(0到100),画出损失函数值曲线变化图,选择那个已经没有明显变化的K值就是最佳值,如图:选择K=3.
在这里插入图片描述

四、 参考

  1. 《机器学习》. 周志华
  2. 《统计学习方法》. 李航
  3. 2007年由D. Arthur等人提出的K-means++论文
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值