Scikit-learn中k-means函数(Sklearn KMeans)


Scikit-learn中的K-Means函数(sklearn.cluster.KMeans)是机器学习领域最经典的聚类算法之一,其通过迭代优化质心位置实现数据划分。该实现具有高度标准化、易用性强的特点,支持多种初始化策略(如K-Means++)、距离度量方式(如欧氏距离、曼哈顿距离)及并行计算。核心参数包括聚类数量(n_clusters)、初始化方法(init)、最大迭代次数(max_iter)等,通过fit方法训练模型后,可获取簇中心(cluster_centers_)、标签(labels_)及惯性值(inertia_)。其优势在于简单高效,适用于球形分布数据,但也存在对初始值敏感、需预先指定簇数等局限。
1. 算法原理与核心机制
K-Means算法基于劳埃德迭代法(Lloyd's algorithm),包含以下核心步骤:
- 随机初始化K个质心(或采用K-Means++策略)
- 计算每个样本到质心的欧氏距离,分配最近邻簇
- 重新计算各簇均值作为新质心
- 重复步骤2-3直至质心收敛或达到最大迭代次数
Scikit-learn实现中,通过inertia_
属性记录每次迭代的簇内平方和(WSS),当连续两次迭代的WSS变化小于tol
参数时停止计算。
2. 关键参数解析
参数名称 | 功能描述 | 取值范围 | 默认值 |
---|---|---|---|
n_clusters | 聚类数量,需人工指定 | 整数(≥2) | 8 |
init | 初始质心生成方式 | 'k-means++'/'random' | 'k-means++' |
n_init | 初始化次数(多路复用) | 整数(≥2) | 10 |
max_iter | 单次初始化的最大迭代次数 | 整数(≥1) | 300 |
3. 初始化方法对比
初始化策略 | 原理 | 优点 | 缺点 |
---|---|---|---|
随机初始化(random) | 从数据集随机选择K个样本作为初始质心 | 实现简单,计算速度快 | 易陷入局部最优,结果不稳定 |
K-Means++ | 概率化选择初始点,优先选取距离远的样本 | 提升收敛速度,增强稳定性 | 初始阶段计算量较大 |
4. 距离度量与标准化进程
Scikit-learn的K-Means默认使用欧氏距离(L2范数),但可通过metric
参数扩展为曼哈顿距离(L1范数)或自定义距离函数。值得注意的是,算法对数据尺度敏感,未标准化的特征可能导致权重失衡。建议对数据执行StandardScaler
标准化处理,使各维度均值为0、方差为1,避免因量纲差异导致聚类偏差。
5. 评估指标与质量验证
指标名称 | 计算公式 | 作用 |
---|---|---|
惯性(Inertia) | ∑_i=1^n min(D(x_i,c_j)^2) | 衡量簇内紧凑度,值越小越好 |
轮廓系数(Silhouette Score) | (b-a)/max(a,b) | 评估样本分配合理性(-1~1) |
Calinski-Harabasz指数 | (N-K)Tr(B)/(K-1)Tr(W) | 簇间方差与簇内方差比值 |
6. 超参数调优策略
聚类数量(n_clusters)的选择需结合业务场景与评估指标。常用方法包括:
- 肘部法则:绘制惯性随K值变化的曲线,选择拐点位置
- 轮廓系数法:计算不同K值的平均轮廓系数,取最大值
- 层次聚类树状图:辅助判断合理分类粒度
Scikit-learn未直接提供网格搜索接口,需通过Pipeline
结合GridSearchCV
实现自动化调参,但需注意聚类任务无监督特性导致的评估复杂性。
7. 与其他聚类算法对比
算法类型 | K-Means | Mini Batch K-Means | DBSCAN |
---|---|---|---|
时间复杂度 | O(NKd) | O(N)(近似解) | O(N^2) |
空间复杂度 | O(Kd) | O(Kd) | O(N) |
簇形状限制 | 凸球形 | 凸球形 | 任意形状 |
8. 实际应用场景与局限
典型应用场景包括:
- 图像压缩:将像素点聚类后用质心替代,减少颜色数量
- 客户分群:电商用户行为特征聚类,支撑精准营销
- 文本分类预处理:文档向量聚类作为后续监督学习的输入
主要局限性体现在:
- 无法处理非凸分布或密度差异大的数据集
- 对噪声和离群点敏感,需结合异常检测预处理
- 需预先设定簇数量,缺乏自适应能力
综上所述,Scikit-learn的K-Means实现凭借其高效的工程优化和丰富的参数配置,成为工业界首选的聚类工具之一。然而,实际应用中需结合数据特点选择初始化策略、评估指标,并通过特征工程提升聚类效果。对于复杂分布数据,建议与DBSCAN、谱聚类等算法配合使用,构建多层级聚类方案。





