讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在Python中使用K-Means算法时自动确定最佳K值参数

浅敏君_5920

浅敏君_5920

发布时间:2026-11-02 10:31:21

|

996人浏览过

|

来源于php中文网

原创

不能硬设n_clusters因K-Means不提供K选择逻辑,SSE随K增大单调下降易致过拟合;需用肘部法(看SSE下降速率拐点)、轮廓系数(需标准化且排除离群点)或Gap Statistic(对比参考分布)等指标科学选K。

如何在python中使用k-means算法时自动确定最佳k值参数

为什么不能直接用 sklearn.cluster.KMeans 的 n_clusters 硬编码

硬设 n_clusters=3 或类似值,常导致聚类结果明显不合理:簇内样本离散、簇间边界模糊、甚至出现大量空簇。K-Means 本身不提供 K 的选择逻辑,它只优化给定 K 下的 SSE(误差平方和),而 SSE 随 K 增大必然单调下降——这会让“选更大的 K”看起来永远更优,完全失真。

关键在于:你需要一个能反映「真实结构提升」而非「过拟合下降」的指标,并配合合理评估方式。

肘部法则(Elbow Method)的实际操作要点

它看的是 SSE 随 K 变化的下降速率拐点,但原始曲线常很平滑,肉眼难判。必须做三件事:

  • 计算范围要够宽:K 从 2 到 min(10, int(len(X)/2)),避免起点太小(K=1 无意义)或终点太大(样本不足支撑)
  • 每次运行需固定 random_state 或多次初始化取平均 SSE,否则单次 KMeans 因随机质心导致 SSE 波动剧烈,肘点漂移
  • 别只画图——用一阶差分(np.diff(sse))找下降幅度最大衰减点;若差分曲线无明显峰值,说明数据本身聚类倾向弱,肘部法失效

示例关键片段:

立即学习“Python免费学习笔记(深入)”;

python-flask-vue-creator
python-flask-vue-creator

创建 Flask + Vue.js 全栈项目,采用单端口架构、uv 依赖管理、结构化日志和生产级前端设计。当用户要求以下操作时触发:创建新的 Flask+Vue 项目、搭建 Web 应用、构建全栈 Python+Vue 应用、初始化 Flask Web 项目、设置单端口 Flask 前后端项目。触发词:新建项目、创建项目、搭建项目、Flask项目、Vue项目。

下载
from sklearn.cluster import KMeans
import numpy as np
<p>sse = []
K_range = range(2, 8)
for k in K_range:
km = KMeans(n_clusters=k, n_init=10, random_state=42)  # 必须设 n<em>init≥10
km.fit(X)
sse.append(km.inertia</em>)  # 注意是 inertia_,不是 score()</p><h1>找差分极小值点(即 SSE 下降最陡处)</h1><p>diffs = np.diff(sse)
elbow_k = list(K_range)[np.argmin(diffs) + 1]  # +1 因 diff 长度少 1

轮廓系数(Silhouette Score)比肘部法更可靠,但有硬约束

它衡量每个样本与其所属簇的凝聚度 vs 最近邻簇的分离度,取值在 [-1, 1],越接近 1 越好。但它对以下情况敏感:

  • 数据不能有大量离群点——离群点会拉低整体 silhouette_score,误导选 K
  • 各簇大小差异过大时(如一个簇占 80% 样本),小簇的轮廓值易被淹没,建议先用 IsolationForest 或 LocalOutlierFactor 预筛异常值
  • 必须用欧氏距离——如果你的数据做了标准化(必须做!),那没问题;但如果用了其他度量(如余弦),silhouette_score 默认仍算欧氏距离,结果无效

正确调用方式:

from sklearn.metrics import silhouette_score
from sklearn.preprocessing import StandardScaler
<p>X_scaled = StandardScaler().fit_transform(X)  # 不标准化,结果几乎必错
sil_scores = []
for k in range(2, 8):
km = KMeans(n_clusters=k, n_init=10, random_state=42)
labels = km.fit_predict(X_scaled)
sil_scores.append(silhouette_score(X_scaled, labels))
best_k = list(range(2, 8))[np.argmax(sil_scores)]

Gap Statistic 是最稳健的方法,但代价高

它通过对比真实数据与均匀分布参考数据的簇内离散度差异来定 K,抗噪强、理论支撑足,但计算量大。实际使用要注意:

  • 参考数据生成必须匹配原始数据的边界:用 np.random.uniform(X.min(axis=0), X.max(axis=0), size=X.shape),不能简单用标准正态分布
  • 至少跑 B=20 次参考数据模拟,B 时 gap 值波动大,容易选错
  • 判断规则不是“gap 最大”,而是找满足 gap(k) ≥ gap(k+1) - std(k+1) 的最小 k(std 来自 B 次模拟的标准差),这个不等式漏掉就白算

别自己重写 Gap Statistic——用现成的 cluster.GapStat(需 pip install cluster)或精简版实现,否则极易因参考分布偏差或统计量计算错误得到假阳性。

真正麻烦的从来不是代码怎么写,而是当肘部图没拐点、轮廓系数全在 0.2~0.3 浮动、Gap Statistic 提示 K=2 却明显该分 4 类时——你得回头检查特征是否混入了无关维度、是否该换 DBSCAN 或高斯混合模型,而不是继续调 K。

热门AI工具

更多
小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1851

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

5024

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1789

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

30117

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3587

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3607

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1243

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

616

2023.08.10

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

0

2026.11.02

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn