聚类是在事先并不知道任何样本类别标签的情况下,通过数据之间的内在关系把样本划分为若干类别,使得同类别样本之间的相似度高,不同类别之间的样本相似度低的过程。因为没有用到样本的类别标签,因此聚类技术经常被称为无监督学习。
k 均值聚类是最著名的划分聚类算法,因为其简洁和高效的特性,使得它成为所有聚类算法中最广泛使用的一种。
1 基本思想
K 均值聚类的基本思想是,通过迭代方式寻找 K KK 个簇(Cluster)的一种划分方案,使得聚类结果对应的代价函数最小。
算法的流程如下:
- 输入数据集合,并对数据进行预处理,如归一化、离群点处理等,令 M MM 是样本的总数
- 输入定义的类别数 K KK
- 随机选择 K KK 个数据作为初始的聚类中心,记为 μ 1 ( 0 ) , μ 2 ( 0 ) , ⋯ , μ K ( 0 ) \mu_1^{(0)},\mu_2^{(0)},\cdots,\mu_K^{(0)}μ1(0),μ2(0),⋯,μK(0)
- 定义代价函数:J ( c , μ ) = min μ min c ∑ i = 1 M ∥ x i − μ c i ∥ 2 J(c,\mu)=\min_{\mu} \min_{c} \sum_{i=1}^{M} \| x_i-\mu_{c_i} \| ^2J(c,μ)=minμminc∑i=1M∥xi−μci∥2
- 重复下面的迭代过程,直到达到收敛的条件:
- 计算每个数据 x i x_ixi 与这 K KK 个中心的距离,将每个点分配到离它最近的类别中心点所在的集合
c i t ← arg min k ∥ x i − μ k ( t ) ∥ 2 c_i^{t}\leftarrow \arg\min_k \|x_i - \mu_k^{(t)} \|^2cit←argkmin∥xi−μk(t)∥2 - 根据当前集合的样本点,重新计算每个集合的中心点,得到 K KK 个新的中心
μ k ( t + 1 ) ← arg min μ ∑ i : c i ( t ) = k ∥ x i − μ ∥ 2 \mu_k^{(t+1)}\leftarrow \arg\min_{\mu} \sum_{i:c_i^{(t)}=k} \|x_i - \mu \|^2μk(t+1)←argμmini:ci(t)=k∑∥xi−μ∥2
- 计算每个数据 x i x_ixi 与这 K KK 个中心的距离,将每个点分配到离它最近的类别中心点所在的集合
终止的条件一般有:
- 没有(或小于预定阈值数量的)对象被重新分配给不同的聚类
- 没有(或小于预定阈值数量的)聚类中心再发生变化
- 误差平方和局部最小
K 均值聚类的代价函数可以定义为各个样本距离所属簇中心的误差平方和:
J ( c , μ ) = ∑ i = 1 M ∥ x i − μ c i ∥ J(c,\mu)=\sum_{i=1}^M \| x_i - \mu_{c_i} \|J(c,μ)=i=1∑M∥xi−μci∥
其中,x i x_ixi 代表第 i ii 个样本,c i c_ici 是 x i x_ixi 所属的簇,μ c i \mu_{c_i}μci 代表簇对应的中心点,M MM 是样本的总数。
2 算法的优缺点和调优
2.1 优点
K 均值聚类算法的优点有:
(1)对于大数据集,K 均值聚类算法相对是可伸缩和高效的,它的计算复杂度是 O ( N K t ) O(NKt)O(NKt) 接近于线性,其中,N NN 是数据对象的数目,K KK 是聚类的簇数,t tt 是迭代的轮数
(2)尽管算法常以局部最优结束,但一般情况下达到的局部最优已经可以满足聚类的需求
2.2 缺点
K 均值聚类算法的缺点有:
(1)受初值和离群点的影响,每次的结果都不稳定
(2)结果通常不是全局最优而是局部最优解
(3)无法很好的解决数据簇分布差别比较大的情况,比如一个类别的样本数量是另外一个的100倍
(4)不适合离散分类
2.3 调优
K 均值算法一般从以下几个方面进行调优:
(1)数据归一化和离群点处理
K 均值聚类本质是一种基于距离度量的数据划分方法,均值和方差大的维度将对数据的聚类结果产生绝对性的影响,所以未做归一化处理和统一单位的数据是无法直接参与运算和比较的。
并且,离群点或者噪声点会对均值产生较大的影响,导致中心偏移,因此要去除离群点。
(2)合理选择 K KK 值
K KK 值的选择是 K 均值聚类最大的问题之一,常常需要合理的估计方法来选择 K KK 值。
(3)采用核函数
传统的欧式距离度量方式,使得 K KK 均值算法本质上假设了各个数据簇的数据具有一样的先验概率,并呈现球形或者高维球形的分布,但是这种分布在实际问题中并不常见。面对非凸的数据分布形状,就需要引入核函数来优化,引入核函数的 K KK 均值聚类称为核 K KK 均值算法,是核聚类方法的一种。
核函数的主要思想是通过一个非线性映射,将输入空间中的数据点映射到高位的特征空间中,并在新的特征空间中进行聚类。
3 优化算法
3.1 K-means++
K-means++ 算法对初始中心点的选择进行了优化,原始 K 均值算法最开始是随机选择 K KK 个点作为聚类中心,而 K-means++ ·按照如下的思想选取 K KK 个聚类中心:
- 第一个聚类中心采用随机的方式选取;
- 假设已经选取了 n nn 个聚类中心 (0 < n < K 0<n<K0<n<K),则在选择第 n + 1 n+1n+1 个聚类中心时,距离当前 n nn 个聚类中心越远的点会有更高的概率被选为第 n + 1 n+1n+1 个聚类中心;
3.2 ISODATA
ISODATA 的中文名是迭代自组织数据分析算法,它的提出是为了解决 K 均值聚类算法中需要人为设定 K 值得问题。ISODATA 的思想很简单,当属于某个类别的样本数过少时,就把该类别去掉;当属于某个类别的样本数过多、分散程度较大时,把该类别分为两个子类别。
ISODATA 在 K 均值算法的基础上,对分类过程增加了 “合并” 和 “分裂” 两个操作,并通过设定参数来控制这两个操作的一种聚类算法。
- 分裂操作,对应着增加聚类中心数;
- 合并操作,对应着减少聚类中心数;
ISODATA 算法的参数有:
- K 0 K_0K0:期望得到的聚类数;
- N m i n N_{min}Nmin:每个类所要求的最少样本数目;
- θ \thetaθ:每个类别的样本特征中的最大方差,若大于这个值,则可能分类;
- D m i n D_{min}Dmin:每个类别中心间的最小距离,若小于这个值,则可能合并;