K-means 聚类及其改进
K-means 是一种常用的聚类算法,算法简单易懂,在簇为凸形状时有较好的聚类效果。本文介绍了 K-means 算法的算法实现及优缺点,并介绍了 K-means 系列算法中常见的改进:K-modes,K-prototypes,K-medoids(PAM),CLARA,CLARANS.
更多算法请见这里:2024 数学建模国赛 C 题攻略(无废话版)
K-means
K-means 是一种常用的聚类算法,它将数据点分为 K 个不同的簇,使得同一簇内的数据点彼此相似度较高,而不同簇之间的数据点相似度较低。K-means 算法的基本思想是通过迭代优化质心位置,将数据点划分到与其最近的质心所属的簇中。
伪代码
Input: 数据集 D, 质心个数 K
# 初始化步骤
1. 从数据集 D 中随机选择 K 个数据点作为初始质心 C
2. 设置迭代次数 t = 0
3. 设置停止条件或最大迭代次数 T_max
# 迭代更新步骤
while t < T_max:
# 步骤 1: 分配数据点到最近的质心所属的簇
for each data point x in D:
计算 x 到每个质心 c_i 的距离 dist_i
将 x 分配到距离最近的质心所属的簇 cluster_i
# 步骤 2: 更新质心位置
for each cluster_i:
计算该簇中所有数据点的均值 mean_i
将 mean_i 更新为新的质心位置
# 步骤 3: 检查停止条件
如果质心位置的变化小于阈值,或者达到最大迭代次数,则停止迭代
否则增加迭代次数 t = t + 1
Output: 最终的簇划分和质心位置
优缺点分析
优点
- 简单而高效:K-means 算法简单易懂,易于实现,并且在大规模数据集上具有高效性能。
- 易于解释:K-means 算法生成的簇划分结果相对容易理解和解释,有利于对数据的分析和可视化。
- 可扩展性:K-means 算法可以适用于各种类型的数据,包括数值型和离散型数据。
缺点
- 需要指定簇个数:K-means 算法在使用时需要预先指定簇的个数 K,这对于一些数据集来说可能不够灵活。
- 对初始质心敏感:K-means 算法的性能受初始质心选择的影响较大,不同的初始质心可能会得到不同的结果。
- 对异常值敏感:K-means 算法对异常值较为敏感,异常值可能会影响簇的划分结果和质心位置。
- 非凸形状簇效果差:K-means 算法假设簇为凸形状,对于非凸形状的簇效果可能较差。
通过聚类分析评价指标确定K值
当我们无法直接确定K的具体取值时,可以给定一个K的范围,遍历这个范围内的所有K,计算每一个K对应的评价指标,取其中聚类效果最好的K值。常见的聚类分析评价准则有:邓恩系数,轮廓系数。
K-modes
在 K-means 算法中,使用欧氏距离作为两个样本之间的距离度量,这种度量方式不能直接用于类别变量。K-modes 弃用欧氏距离,选用 Hamming 距离作为两个样本的相似度度量。
两个样本属性之间的距离定义为:属性相同为0,不同为1。Hamming 距离定义为两个样本所有属性距离的和。Hamming 距离越大,样本相似度越低(这与欧氏距离类似)。
由于相似性度量定义的不同,K-modes 不能再使用 K-means 中的均值作为更新的中心,而是使用一个簇中每个属性出现频率最大的那个属性值作为代表簇的更新的属性值。
K-prototypes
K-means和K-modes算法分别适用于连续型属性和类别型属性。K-prototypes 算法结合上述两个算法,可以针对混合型的向量。距离度量公式如下:
D
=
D
1
+
α
D
2
D=D_1+\alpha D_2
D=D1+αD2
其中
D
1
D_1
D1 是连续型属性的欧氏距离,
D
2
D_2
D2 是离散型属性的 Hamming 距离,
α
\alpha
α 用于调节两者的权重。
于此同时,K-prototypes-means和K-modes更新簇中心的方式。
PAM(Partitioning Around Medoids)
在 K-means 算法中,每次迭代都使用簇的平均值作为新的中心,容易受到异常值的影响。
PAM 算法是一种基于中心点(medoids)的划分聚类算法,也称 K-medoids。与k均值算法不同,PAM 算法选择代表性样本作为簇的中心点,这些中心点不一定是数据集中的实际样本,而是从数据集中选择的实际样本。选择中心点(medioids)的准则通常是:当前簇中所有其他点到该中心点的距离之和最小。
PAM 算法的优点在于对噪声和异常值具有较好的鲁棒性,因为它选择实际样本作为中心点,而不是简单地计算样本的均值。然而,PAM 算法的计算复杂度较高,在大规模数据集上的运行速度可能较慢。
CLARA(Clustering Large Applications)
CLARA(Clustering Large Applications)是一种基于采样的聚类算法,用于处理大规模数据集。它是对 PAM 算法的一种改进,旨在解决 PAM 算法在处理大型数据集时计算复杂度高的问题。
CLARA 算法的基本思想是通过对数据集进行随机采样,然后在采样数据集上应用 PAM 算法来获得聚类结果。通过在采样数据上运行 PAM 算法,可以减少计算时间并且节省内存,从而使得 CLARA 算法能够处理大规模数据集。
- 随机采样:从原始数据集中随机选取多个子集作为采样数据集。
- PAM聚类:对每个采样数据集应用 PAM 算法来获取对应的聚类结果。
- 合并聚类:将所有采样数据集上的聚类结果进行合并,得到最终的聚类结果。
CLARANS
CLARANS(Clustering Large Applications based upon RANdomized Search)是一种基于随机搜索的聚类算法,旨在解决处理大规模数据集时计算复杂度高的问题。与 CLARA 算法类似,CLARANS 也是对 PAM 算法的改进,并且更适用于大规模数据集的情况。
CLARANS 算法的核心思想是通过随机游走来搜索样本空间中的局部最优解,以避免遍历整个数据集,从而减少计算时间和内存消耗。该算法通过随机选择一些样本作为当前解的候选集合,然后在这个候选集合上进行局部搜索,以找到更好的聚类结果。
- 随机初始化:随机选择一些样本作为当前解的候选集合。
- 局部搜索:在候选集合上进行局部搜索,通过不断交换样本来尝试改善当前解。
- 更新当前最优解:如果找到了更好的解,则更新当前的最优解。
- 重复:重复执行上述步骤,直到达到指定的迭代次数或者满足停止条件。
CLARANS 算法的优点在于它能够在大规模数据集上进行高效的聚类,同时能够获得较好的聚类结果。由于采用了随机搜索的策略,CLARANS 算法在搜索空间中具有一定的随机性,因此能够避免陷入局部最优解,并且对初始点的选择不敏感。
然而,CLARANS 算法的缺点在于它的运行时间和性能与参数设置有很大的关系,需要仔细调整参数以获得最佳的聚类结果。此外,CLARANS 算法的计算复杂度仍然较高,尤其是在迭代次数较大或者数据集规模较大的情况下。