当前位置: 首页 > article >正文

别再瞎调K-Means的K值了!用sklearn的silhouette_score和silhouette_samples帮你科学选簇数

科学选择K-Means聚类数量的实战指南从轮廓系数到可视化诊断第一次接触K-Means聚类时很多人都会陷入一个误区——凭直觉选择K值。你可能见过这样的场景数据科学家盯着肘部法则Elbow Method生成的折线图试图找出那个拐点结果往往因为主观判断导致聚类效果不佳。更糟糕的是当数据分布复杂时肘部法则可能完全失效让你陷入选择困难。这就是为什么我们需要更科学的评估方法——轮廓系数Silhouette Coefficient。轮廓系数不仅能给出一个明确的评分还能通过可视化揭示每个样本的聚类质量。本文将带你用Python和sklearn从头实现一个完整的K值选择流程从数据预处理到模型评估最后通过silhouette_score和silhouette_samples生成专业级的诊断图表。无论你是数据分析师还是机器学习工程师这套方法都能让你的聚类结果更具说服力。1. 理解轮廓系数的核心原理轮廓系数由Peter J. Rousseeuw在1987年提出它同时考虑了类内凝聚度cohesion和类间分离度separation两个关键指标。与单纯依赖距离平方和的肘部法则不同轮廓系数提供了一个介于-1到1之间的标准化评分使得不同数据集间的聚类效果可以横向比较。计算单个样本轮廓系数的三个步骤计算簇内不相似度a(i)样本i到同簇其他样本的平均距离。这个值越小说明该样本越应该属于当前簇。计算簇间不相似度b(i)样本i到其他所有簇的平均距离的最小值。这个值越大说明该样本越不属于其他簇。计算轮廓系数s(i)公式为(b(i) - a(i)) / max(a(i), b(i))结果范围在[-1, 1]之间。注意当s(i)接近1时表示样本i的聚类分配非常合理当s(i)为负值时说明该样本可能更适合分配到其他簇。下表对比了常见聚类评估指标的优缺点评估方法优点缺点适用场景肘部法则直观简单主观性强拐点不明显初步探索轮廓系数标准化评分考虑类内类间关系计算复杂度高中等规模数据集Calinski-Harabasz指数计算速度快倾向于选择较大K值大规模数据Davies-Bouldin指数无需真实标签对密度变化敏感球形簇分布在实际项目中我通常会先用肘部法则确定K的可能范围再用轮廓系数在这个范围内精细选择最优值。这种组合策略既考虑了计算效率又保证了结果的科学性。2. 构建完整的K值评估流程让我们用一个实际案例演示如何用Python实现K值选择。假设我们有一个客户分群数据集包含用户的购买频率和平均消费金额两个特征。首先准备环境和数据import numpy as np import pandas as pd from sklearn.datasets import make_blobs from sklearn.preprocessing import StandardScaler import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score, silhouette_samples # 生成模拟数据 X, y make_blobs(n_samples500, centers4, cluster_std1.2, random_state42) X StandardScaler().fit_transform(X) # 可视化原始数据 plt.scatter(X[:, 0], X[:, 1], s50, alpha0.7) plt.title(Raw Data Distribution) plt.xlabel(Feature 1) plt.ylabel(Feature 2) plt.show()接下来我们定义一个函数来计算不同K值下的轮廓系数def evaluate_k(X, k_range): silhouette_scores [] for k in k_range: kmeans KMeans(n_clustersk, random_state42) labels kmeans.fit_predict(X) # 跳过k1的情况因为此时轮廓系数无意义 if k 1: silhouette_scores.append(-1) continue score silhouette_score(X, labels) silhouette_scores.append(score) return silhouette_scores # 测试K从2到10的情况 k_range range(2, 11) scores evaluate_k(X, k_range) # 绘制轮廓系数曲线 plt.plot(k_range, scores, bo-) plt.xlabel(Number of Clusters (K)) plt.ylabel(Silhouette Score) plt.title(Silhouette Score for Different K Values) plt.grid(True) plt.show()这段代码会生成一条展示不同K值对应轮廓系数的曲线。通常我们会选择使轮廓系数最大的K值但实际决策时还需要结合业务理解和可视化分析。3. 深入样本级别的轮廓分析silhouette_score给出了整体评估但要真正理解聚类质量我们需要分析每个样本的表现。这就是silhouette_samples的用武之地——它返回每个样本的轮廓系数可以生成更细致的轮廓图。下面是一个完整的轮廓图生成函数def plot_silhouette(X, k): plt.figure(figsize(10, 6)) kmeans KMeans(n_clustersk, random_state42) labels kmeans.fit_predict(X) # 计算轮廓系数 silhouette_avg silhouette_score(X, labels) sample_silhouette_values silhouette_samples(X, labels) y_lower 10 for i in range(k): # 获取第i个簇的所有样本轮廓系数并排序 ith_cluster_silhouette_values sample_silhouette_values[labels i] ith_cluster_silhouette_values.sort() size_cluster_i ith_cluster_silhouette_values.shape[0] y_upper y_lower size_cluster_i color plt.cm.nipy_spectral(float(i) / k) plt.fill_betweenx(np.arange(y_lower, y_upper), 0, ith_cluster_silhouette_values, facecolorcolor, edgecolorcolor, alpha0.7) # 标记簇编号 plt.text(-0.05, y_lower 0.5 * size_cluster_i, str(i)) y_lower y_upper 10 plt.title(fSilhouette Plot for K{k} (avg{silhouette_avg:.3f})) plt.xlabel(Silhouette Coefficient Values) plt.ylabel(Cluster Label) # 平均轮廓系数的虚线 plt.axvline(xsilhouette_avg, colorred, linestyle--) plt.yticks([]) plt.show() # 为K3和K4生成轮廓图 plot_silhouette(X, 3) plot_silhouette(X, 4)轮廓图的解读要点每个叶片对应一个簇宽度代表该簇的样本数量高度代表对应样本的轮廓系数值红色虚线表示整体平均轮廓系数理想情况下所有叶片都应该超过平均线且宽度相近在实际项目中我曾遇到这样的情况虽然K4的轮廓系数略高于K3但其中一个簇的轮廓系数明显偏低。这表明该簇的定义不够清晰最终我选择了K3的方案因为它的聚类质量更均衡。4. 高级技巧与常见问题解决4.1 处理非球形簇的数据轮廓系数基于样本间距离计算因此对K-Means这类基于距离的算法效果最好。当数据呈现非球形分布时可以考虑以下改进from sklearn.cluster import DBSCAN from sklearn.metrics import silhouette_score # 使用DBSCAN处理非球形簇 dbscan DBSCAN(eps0.3, min_samples10) labels dbscan.fit_predict(X) # 过滤掉噪声点(标签为-1) core_samples labels ! -1 score silhouette_score(X[core_samples], labels[core_samples])4.2 高维数据的处理技巧在高维空间中距离度量可能失效维度诅咒。这时可以先使用PCA降维改用更适合高维数据的距离度量如余弦相似度from sklearn.decomposition import PCA from sklearn.metrics.pairwise import cosine_distances # 降维到2维 pca PCA(n_components2) X_pca pca.fit_transform(X) # 使用余弦距离 kmeans KMeans(n_clusters4) labels kmeans.fit_predict(X_pca) score silhouette_score(cosine_distances(X_pca), labels, metricprecomputed)4.3 性能优化技巧对于大型数据集计算所有样本的轮廓系数可能很耗时。这时可以使用sample_size参数进行抽样评估先在小样本上确定K值再在全数据上验证# 只计算1000个随机样本的轮廓系数 score silhouette_score(X, labels, sample_size1000)4.4 结合业务知识的K值选择技术指标只是参考最终决策还需考虑业务上是否有明确的分类需求每个簇是否有足够的样本支持聚类结果是否具有可解释性在我的一个零售客户分析项目中虽然技术指标支持K5但业务团队认为K4的分类方案更符合他们的营销策略。最终我们选择了K4但调整了聚类特征使结果既满足技术标准又符合业务需求。

相关文章:

别再瞎调K-Means的K值了!用sklearn的silhouette_score和silhouette_samples帮你科学选簇数

科学选择K-Means聚类数量的实战指南:从轮廓系数到可视化诊断 第一次接触K-Means聚类时,很多人都会陷入一个误区——凭直觉选择K值。你可能见过这样的场景:数据科学家盯着肘部法则(Elbow Method)生成的折线图&#xff0…...

FPGA制造与测试全流程

FPGA制造与测试全流程(从设计到出货) FPGA是可编程逻辑芯片,核心结构含LUT、触发器、可编程互联、I/O、配置SRAM/Flash,制造与测试分前端设计→晶圆制造→晶圆测试(CP)→封装→封装测试(FT)→可靠性/系统测试→出货六大阶段&…...

AI赋能CI/CD:用Gemini一键生成高效脚本

技术文章大纲:Gemini实战——用AI写CI/CD脚本引言CI/CD在现代软件开发中的重要性传统编写CI/CD脚本的挑战(复杂性、维护成本)AI(如Gemini)如何简化脚本生成过程理解Gemini与CI/CDGemini的核心能力(自然语言…...

Excel公式美化终极指南:让复杂公式一目了然的免费工具

Excel公式美化终极指南:让复杂公式一目了然的免费工具 【免费下载链接】ExcelFormulaBeautifier Excel Formula Beautifer,make Excel formulas more easy to read,Excel公式格式化/美化,将Excel公式转为易读的排版 项目地址: https://gitcode.com/gh_mirrors/ex/…...

小米手表表盘设计终极指南:如何快速设计个性化表盘

小米手表表盘设计终极指南:如何快速设计个性化表盘 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create 你是否厌倦了千篇一律的小米手表表盘&#xff1…...

别再让电机乱抖了!手把手教你用51单片机+TB6600驱动42步进电机(附完整接线图与C代码)

51单片机精准控制42步进电机实战指南:从接线到代码全解析 刚接触步进电机控制的新手们,是否遇到过这样的场景:按照教程接好线,烧录完程序,满怀期待地按下电源——结果电机要么纹丝不动,要么疯狂抖动发出刺耳…...

APK Installer:在Windows上轻松安装安卓应用的终极方案

APK Installer:在Windows上轻松安装安卓应用的终极方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否厌倦了臃肿的安卓模拟器?是否想在…...

如何用Lan Mouse实现跨设备键鼠共享:多电脑无缝控制的终极方案

如何用Lan Mouse实现跨设备键鼠共享:多电脑无缝控制的终极方案 【免费下载链接】lan-mouse mouse & keyboard sharing via LAN 项目地址: https://gitcode.com/gh_mirrors/la/lan-mouse 你是否曾经在多个电脑间来回切换时感到困扰?每次都要移…...

国家中小学智慧教育平台电子课本解析工具:一键下载PDF教材的终极解决方案

国家中小学智慧教育平台电子课本解析工具:一键下载PDF教材的终极解决方案 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本…...

PyTorch 模型部署:TorchScript vs ONNX 深度对比

PyTorch 模型部署:TorchScript vs ONNX 深度对比 核心结论 TorchScript:适用于 PyTorch 生态系统内的部署,支持动态图和静态图,调试友好ONNX:跨平台部署标准,支持多种推理引擎,生态系统丰富性能…...

Topit:深度解析macOS窗口强制置顶技术原理与实战应用

Topit:深度解析macOS窗口强制置顶技术原理与实战应用 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 在macOS多任务处理场景中,开发者、…...

SLF4J的学习路线

SLF4J 是 Java 生态里一个日志组件 先搞懂“它不是日志框架,而是日志门面” 1. 先打基础:先搞懂它到底是什么 这一阶段目标只有一个: 分清楚这几个角色: SLF4J:日志接口 / 门面Logback / Log4j2:真正输出…...

AI 技术在招投标文档编制中的应用实践

随着生成式 AI 技术在办公领域的普及,传统依赖人工完成的大量文本处理工作,正在逐步走向智能化与自动化。招投标场景下的标书编制工作,由于文档结构复杂、条款繁多、格式要求严格,成为 AI 辅助办公的典型落地场景。本文从技术应用…...

ESXi 定时快照与自动清理:脚本化运维实战

1. 为什么需要自动化快照管理 在虚拟化环境中,快照就像给虚拟机拍了一张"照片",能够完整记录某个时间点的系统状态。想象一下,当你在测试新软件或者进行系统升级时,突然发现出了问题,这时候如果能一键恢复到…...

终极指南:如何免费绕过iOS 15-16激活锁的完整教程

终极指南:如何免费绕过iOS 15-16激活锁的完整教程 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n AppleRa1n是一款专为iOS 15-16系统设计的iCloud激活锁绕过工具,帮助用户解决因…...

视频元数据怎么修改?4个小白方法,不用敲代码

前言视频元数据填错真的超烦!上传时标题、作者或者拍摄日期写错,要么平台不显示,要么被判定异常,连搜索都受影响。有时候想改描述、版权信息,翻遍软件都找不到入口,急得抓瞎!其实视频元数据修改…...

卧式冷凝器管板防腐:一次返工都没有

今年三月底,我接到市场部同事的电话:“付工,南港那边某大型化工企业有四台卧式冷凝器,管板让循环水腐蚀得不成样子了,你去看看?”我第二天就买了票过去。做我们这行心里都清楚,卧式冷凝器管板防…...

微信小程序web-view集成H5视频录制:从需求到填坑的完整实践

1. 银行视频面签需求与技术选型 去年接手了一个银行视频面签项目,客户要求在小程序内实现完整的视频录制功能。具体场景是:用户进入页面后点击开始录制,系统会依次播放预设问题(比如"请问您是李先生吗?"&…...

Smithbox完整指南:从游戏玩家到MOD创作者的蜕变之路

Smithbox完整指南:从游戏玩家到MOD创作者的蜕变之路 【免费下载链接】Smithbox Smithbox is a modding tool for Elden Ring, Armored Core VI, Sekiro, Dark Souls 3, Dark Souls 2, Dark Souls, Bloodborne and Demons Souls. 项目地址: https://gitcode.com/gh…...

2000-2024年县域金融机构贷款余额、金融机构储蓄存款余额数据

数据介绍 县域金融机构存贷款数据是观察地方经济活力、金融资源配置效率及政策实施效果的重要微观窗口‌。数据反映资金流向与区域经济结构特征,衡量区域经济发展水平与增长动能,评估金融资源错配与服务普惠性,检验货币政策传导机制的有效性…...

IT管理员在日常运维中如何降低权限管理带来的工作负担

据IDC数据显示,2025年我国网络安全投入占信息化整体投入比例低于2%,低于全球平均水平3.05%,与美、日等发达国家10%以上的比例差距显著。除政府、金融等强监管行业外,大部分企业的安全需求仅由合规驱动,主动投入意愿不足…...

AnimateDiff避坑指南:解决视频闪烁/面部扭曲/生成失败的7个常见问题(附排查流程图)

AnimateDiff实战排雷手册:从闪烁修复到面部优化的深度解决方案 深夜的显示器前,你盯着刚刚生成的视频片段——那个本应优雅转身的角色面部扭曲成了抽象画,背景闪烁得像90年代故障电视。这不是你第一次遇到AnimateDiff的"脾气"&…...

STM32实战:手把手教你调试LIN总线通讯(逻辑分析仪抓包与常见故障排查)

STM32实战:LIN总线通讯调试全攻略(从波形解析到故障定位) LIN总线作为汽车电子中广泛应用的通信协议,其调试过程往往让工程师们又爱又恨。上周在给某新能源车厂做技术支援时,他们的工程师小王就遇到了典型问题&#xf…...

开源工具如何突破Cursor AI Pro使用限制:技术原理与实战指南

开源工具如何突破Cursor AI Pro使用限制:技术原理与实战指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached yo…...

全球仅限200份|2026奇点大会《语音克隆攻防红蓝对抗手册》内部版首发:含12个真实攻防靶场与MITRE ATTCK语音映射表

第一章:2026奇点智能技术大会:AI语音克隆 2026奇点智能技术大会(https://ml-summit.org) 实时语音克隆的突破性架构 本届大会首次公开演示了端到端低延迟语音克隆系统VoiceSynth-7,其核心采用分层声学建模(Hierarchical Acousti…...

极域电子教室破解终极指南:JiYuTrainer让你的学习重获自由

极域电子教室破解终极指南:JiYuTrainer让你的学习重获自由 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 在数字化教学环境中,你是否曾被极域电子教室的全…...

Windows系统优化工具Winhance:三步完成系统加速与个性化定制

Windows系统优化工具Winhance:三步完成系统加速与个性化定制 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winha…...

OpenWrt Turbo ACC插件终极指南:3大技术突破让你的路由器性能飙升300%

OpenWrt Turbo ACC插件终极指南:3大技术突破让你的路由器性能飙升300% 【免费下载链接】turboacc 一个适用于官方openwrt(22.03/23.05/24.10) firewall4的turboacc 项目地址: https://gitcode.com/gh_mirrors/tu/turboacc 你是否经常遇到家中网络卡顿、游戏延…...

物流基础知识详解及高效管理工具应用

物流基础知识详解及高效管理工具应用 物流是连接生产与消费的核心纽带,是现代商业活动中不可或缺的重要环节,涵盖物品从供给地到消费地的全流程流动,包括运输、仓储、包装、装卸、配送、信息处理等多个核心模块,贯穿我们生活与企…...

Global Wheat Detection数据集:挑战、构建与应用全景

1. Global Wheat Detection数据集的诞生背景 小麦作为全球三大主粮之一,其产量预估直接关系到粮食安全。但在传统农业中,农民往往需要人工统计麦穗数量,这种方法不仅效率低下,而且误差率高达30%以上。2018年,东京大学的…...