K-means 聚类算法学习

一、聚类算法概述

聚类是机器学习中的一种无监督学习方法,核心思想是将相似的样本划分到同一组(簇),而不依赖于预先给定的标签。与监督学习不同,聚类问题中没有明确的 "答案" 作为参考,其主要难点在于如何评估聚类效果以及合理调参。

二、距离度量

在聚类中,样本间的相似度通常通过距离来衡量,常用的距离度量方式有以下两种:

(一)欧式距离

欧式距离是最常见的距离度量方式,衡量的是多维空间中两个点之间的绝对距离。

  • 二维空间公式:d 等于 x1 减 x2 的平方加上 y1 减 y2 的平方,整体开根号

  • 三维空间公式:在二维基础上增加 z1 减 z2 的平方项,整体开根号

  • n 维空间公式:d 等于从 i=1 到 n,每个维度上 x1i 减 x2i 的平方和,整体开根号

  • 特点:直观反映两点间的直线距离,适用于多数常规场景。

(二)曼哈顿距离

曼哈顿距离又称出租车距离,指两个点在标准坐标系上的绝对轴距总和。

  • 平面上两点((x1,y1)\)与((x2,y2)\)的曼哈顿距离公式:d(i,j)=∣x1​−x2​∣+∣y1​−y2​∣

  • 特点:更适合描述网格状空间中两点的实际移动距离(如城市中出租车的行驶路径)。

三、K-means 算法步骤

K-means 是最经典的聚类算法之一,其核心流程如下:

  1. 初始化:设定聚类簇数k,随机选择k个样本点作为初始聚类中心。

  2. 样本聚类:计算每个样本到各个聚类中心的距离,将样本指派到距离最近的中心所属的簇中,形成当前聚类结果。

  3. 更新中心:针对每个簇,计算簇内所有样本的均值,将该均值作为新的聚类中心。

  4. 迭代收敛:重复步骤 2 和 3,直到聚类中心不再明显变化(收敛)或达到最大迭代次数,输出最终聚类结果。

四、算法评估 ------CH 指标

CH 指标是评估聚类效果的常用指标,其计算基于类内紧密度和类间分离度:

  • 类内紧密度:通过类中各点与类中心的距离平方和衡量。

  • 类间分离度:通过各类中心点与数据集总中心点的距离平方和衡量。

  • 特点:CH 值越大,表明簇内样本越紧密、簇间差异越明显,聚类效果越好。

五、K-means 算法的优缺点

(一)优点

  • 原理简单直观,易于理解和实现。

  • 计算效率高,处理大规模数据集时表现良好,复杂度与样本数量呈线性关系。

  • 适用于常规分布的数据集,聚类效果稳定。

(二)缺点

  • 需预先指定簇数k,而k的最优值往往难以确定。

  • 对初始聚类中心的选择敏感,不同初始值可能导致不同聚类结果。

  • 难以处理非凸形状、密度差异大的簇,对噪声和离群值较敏感。

六、代码实现相关工具

(一)数据集生成:make_blobs()

该函数用于生成适合聚类的模拟数据集,主要参数如下:

参数 说明
n_samples 数据样本点个数,默认值为 100
n_features 每个样本的特征数(数据维度),默认值为 2
centers 类别数(簇的数量),默认值为 3
cluster_std 每个类别的方差,控制簇内样本的分散程度
center_box 聚类中心的取值范围,默认值为 (-10.0, 10.0)
shuffle 是否打乱数据,默认值为 True
random_state 随机种子,用于固定生成的数据,便于结果复现

(二)聚类实现:KMeans()

该类用于执行 K-means 聚类算法,主要参数如下:

参数 说明
n_clusters 聚类簇的数量(即k值)
max_iter 最大迭代次数,默认值为 300
n_init 算法运行次数(每次使用不同初始中心),默认值为 10
random_state 随机种子,控制初始中心的选择,保证结果可复现