Python scikit-learn 1.4 实战:3种聚类算法(系统/动态/有序)核心差异与代码对比

发布时间:2026/7/9 21:50:37

Python scikit-learn 1.4 实战:3种聚类算法(系统/动态/有序)核心差异与代码对比
Python scikit-learn 1.4 实战3种聚类算法核心差异与代码对比在数据科学领域聚类分析是最常用的无监督学习技术之一。不同于分类问题聚类算法不需要预先标记的训练数据而是通过发现数据中的自然分组来揭示隐藏的模式。本文将聚焦于三种最具代表性的聚类方法系统聚类层次聚类、动态聚类K-means和有序聚类SOM通过scikit-learn 1.4版本的实际代码演示帮助读者理解它们的内在机理和适用场景。1. 环境准备与数据生成在开始比较三种聚类算法之前我们需要准备一个标准化的实验环境。这里使用scikit-learn的make_blobs函数生成包含三个明显簇的数据集同时添加一些噪声点以增加挑战性import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_blobs # 生成样本数据 X, y make_blobs(n_samples500, centers3, cluster_std0.8, random_state42) # 添加随机噪声 np.random.seed(42) noise np.random.uniform(low-5, high5, size(20, 2)) X np.vstack([X, noise]) plt.figure(figsize(8, 6)) plt.scatter(X[:, 0], X[:, 1], s50, alpha0.6) plt.title(原始数据分布) plt.show()这个数据集具有以下特点包含520个二维数据点三个主要簇的中心明显分离添加了20个均匀分布的噪声点簇内标准差设置为0.8以保证适度重叠提示在实际项目中数据预处理如标准化通常是必要步骤。本例省略此步骤是因为生成的数据已处于相近尺度。2. 系统聚类层次聚类实现与分析系统聚类又称层次聚类通过构建树状图dendrogram来展示数据的层次分解过程。scikit-learn中的AgglomerativeClustering实现了自底向上的聚合策略。2.1 算法原理与参数选择层次聚类的核心是定义簇间距离度量方式。常见选项包括Ward最小化簇内方差默认Complete最大簇间距离Average平均簇间距离Single最小簇间距离from sklearn.cluster import AgglomerativeClustering from scipy.cluster.hierarchy import dendrogram, linkage # 计算连接矩阵 Z linkage(X, methodward) # 绘制树状图 plt.figure(figsize(12, 6)) dendrogram(Z, truncate_modelastp, p12) plt.title(层次聚类树状图) plt.xlabel(样本索引) plt.ylabel(距离) plt.show()2.2 模型训练与结果可视化# 训练模型 hierarchical AgglomerativeClustering(n_clusters3, affinityeuclidean, linkageward) hierarchical_labels hierarchical.fit_predict(X) # 可视化结果 plt.figure(figsize(8, 6)) plt.scatter(X[:, 0], X[:, 1], chierarchical_labels, s50, alpha0.6, cmapviridis) plt.title(层次聚类结果) plt.show()层次聚类的优势在于不需要预先指定簇数可通过树状图分析能够展示数据的层次结构对噪声相对鲁棒但计算复杂度较高O(n³)不适合大规模数据集。3. 动态聚类K-means实现与分析K-means是最著名的动态聚类算法通过迭代优化簇中心和样本分配来最小化簇内平方和。3.1 算法流程与关键参数K-means的核心参数是n_clusters簇数。我们可以使用肘部法则确定最佳K值from sklearn.cluster import KMeans # 计算不同K值的SSE sse [] for k in range(1, 10): kmeans KMeans(n_clustersk, random_state42) kmeans.fit(X) sse.append(kmeans.inertia_) # 绘制肘部图 plt.figure(figsize(8, 6)) plt.plot(range(1, 10), sse, markero) plt.xlabel(簇数 (K)) plt.ylabel(SSE) plt.title(肘部法则确定最佳K值) plt.show()3.2 模型训练与性能评估# 训练K-means模型 kmeans KMeans(n_clusters3, random_state42) kmeans_labels kmeans.fit_predict(X) # 可视化结果 plt.figure(figsize(8, 6)) plt.scatter(X[:, 0], X[:, 1], ckmeans_labels, s50, alpha0.6, cmapviridis) plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], cred, s200, markerX) plt.title(K-means聚类结果) plt.show()K-means的优势包括计算效率高O(n)实现简单易于理解对球形簇效果良好但存在以下局限需要预先指定K值对初始中心敏感对非球形簇效果不佳对噪声和异常值敏感4. 有序聚类自组织映射SOM实现与分析自组织映射SOM是一种特殊的神经网络通过竞争学习将高维数据映射到低维通常是二维网格上保持拓扑结构。4.1 SOM实现与训练虽然scikit-learn未直接提供SOM实现我们可以使用minisom库!pip install minisom from minisom import MiniSom # 初始化SOM som MiniSom(x5, y5, input_len2, sigma1.0, learning_rate0.5, random_seed42) # 训练SOM som.train_random(X, 500) # 获取聚类标签 som_labels np.array([som.winner(x) for x in X]) som_labels som_labels[:, 0] * 5 som_labels[:, 1] # 转换为单一标签 # 可视化结果 plt.figure(figsize(10, 8)) plt.pcolor(som.distance_map().T, cmapbone_r) plt.colorbar() for i, (x, y) in enumerate(X): w som.winner(x) plt.plot(w[0]0.5, w[1]0.5, o, markerfacecolorplt.cm.viridis(som_labels[i]/25.), markeredgecolork, markersize10, alpha0.7) plt.title(SOM聚类结果) plt.show()4.2 SOM特点分析SOM的优势在于保持数据的拓扑结构可视化能力强适合探索性数据分析但存在以下挑战训练过程复杂需要调整多个超参数解释性相对较差5. 三种算法综合对比为了系统比较三种算法的性能我们使用轮廓系数和Calinski-Harabasz指数进行评估from sklearn.metrics import silhouette_score, calinski_harabasz_score # 评估指标计算 metrics { 层次聚类: { 轮廓系数: silhouette_score(X, hierarchical_labels), CH指数: calinski_harabasz_score(X, hierarchical_labels) }, K-means: { 轮廓系数: silhouette_score(X, kmeans_labels), CH指数: calinski_harabasz_score(X, kmeans_labels) }, SOM: { 轮廓系数: silhouette_score(X, som_labels), CH指数: calinski_harabasz_score(X, som_labels) } } # 展示结果对比 import pandas as pd pd.DataFrame(metrics).T算法对比总结特性层次聚类K-meansSOM计算复杂度高低中需要预设K值否是是抗噪声能力强弱中可视化能力中中强保持拓扑否否是适合大数据否是中在实际项目中选择聚类算法应考虑数据规模和维度预期的簇形状是否需要层次结构可视化需求计算资源限制

相关新闻

Agent可交付设计:从OpenClaw配置到审批流可视化

Agent可交付设计:从OpenClaw配置到审批流可视化

2026/7/9 21:50:37

1. 项目概述:从“我用着顺手”到“别人也能开箱即用”,Agent 交付的本质不是功能堆砌,而是体验封装“我自己用的 Agent 挺好,怎么变成别人也能用的?”——这句话背后藏着一个被严重低估的现实:90% 的 Agent…

工业信号干扰解决方案与光耦选型实践

工业信号干扰解决方案与光耦选型实践

2026/7/9 21:40:37

1. 工业环境中的信号干扰挑战在电机控制、PLC系统或自动化产线等工业场景中,电子设备常面临严峻的电磁环境。变频器、大功率继电器和无线设备产生的电磁噪声,可能使信号传输出现以下典型问题:数字信号边沿抖动(上升/下降时间劣化&…

锂离子电池组电压平衡技术与BQ25887应用解析

锂离子电池组电压平衡技术与BQ25887应用解析

2026/7/9 21:40:37

1. 电池单元平衡技术背景与核心挑战在锂离子电池组应用中,串联电池单元之间的电压不平衡是影响整体性能和寿命的关键问题。当多个电池单元串联使用时,由于制造工艺差异、温度分布不均或老化程度不同,各单元的实际容量和荷电状态(S…

vLLM多卡部署稳定性方案:Supervisor显存感知与死锁自愈

vLLM多卡部署稳定性方案:Supervisor显存感知与死锁自愈

2026/7/9 23:10:40

1. 项目概述:为什么vLLM多卡部署总在“临门一脚”翻车? 你是不是也经历过这样的场景:模型加载成功,API服务启动正常,前几轮请求响应飞快——结果跑着跑着显存占用就悄悄涨到98%,再过几分钟直接OOM&#xff…

VS Code 直接编辑 JAR 文件:Java 热修复新范式

VS Code 直接编辑 JAR 文件:Java 热修复新范式

2026/7/9 23:10:40

1. 项目概述:为什么要在 VS Code 里直接改 JAR?这不是“炫技”,而是真实痛点的硬核解法你有没有遇到过这样的场景:线上一个 Java 服务突然报错,日志指向某个第三方 JAR 包里的类——比如com.example.utils.HttpClientH…

Ubuntu 20.04 Docker GPU 完整配置:驱动、containerd 与 nvidia-container-toolkit 深度对齐

Ubuntu 20.04 Docker GPU 完整配置:驱动、containerd 与 nvidia-container-toolkit 深度对齐

2026/7/9 23:10:40

1. 项目概述:为什么在 Ubuntu 20.04 上配齐 Docker GPU 支持不是“装个软件”那么简单 你搜“Ubuntu 20.04 安装 Docker GPU 支持”,点开前十个结果,八成会看到三段式流水线:先 apt install docker.io ,再 curl -…

Prometheus Lua混淆器:企业级代码保护的技术革命

Prometheus Lua混淆器:企业级代码保护的技术革命

2026/7/9 23:10:40

Prometheus Lua混淆器:企业级代码保护的技术革命 【免费下载链接】Prometheus Lua Obfuscator written in pure Lua 项目地址: https://gitcode.com/gh_mirrors/prometheus/Prometheus 在当今数字化时代,Lua代码的安全防护已成为游戏开发、嵌入式…

SWMM5 模型 GIS 耦合实战:ArcGIS 自动化生成 .inp 文件的 5 个关键步骤

SWMM5 模型 GIS 耦合实战:ArcGIS 自动化生成 .inp 文件的 5 个关键步骤

2026/7/9 23:10:40

SWMM5 模型 GIS 耦合实战:ArcGIS 自动化生成 .inp 文件的 5 个关键步骤在城市水文建模领域,将地理信息系统(GIS)与专业水文模型相结合已成为提升工作效率的关键路径。对于使用 SWMM5(Storm Water Management Model&…

AI技能管理实战:从提示词到可复用技能包的开发与集成

AI技能管理实战:从提示词到可复用技能包的开发与集成

2026/7/9 23:00:40

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 在 AI 应用开发领域,尤其是基于大型语言模型构建智能体或助手时,一个核心挑战是如何高效地管理和复用“技能”…

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

2026/7/9 19:40:56

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

6个月转型AI工程师:实战路径与核心技能

6个月转型AI工程师:实战路径与核心技能

2026/7/9 18:28:30

1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公…

YOLOv5模型剪枝与量化实战:边缘设备部署优化

YOLOv5模型剪枝与量化实战:边缘设备部署优化

2026/7/8 14:04:34

1. 项目背景与核心价值在计算机视觉领域,YOLOv5因其出色的实时检测性能成为工业界宠儿。但当我们尝试将其部署到边缘设备(如树莓派、Jetson Nano或手机终端)时,立刻会遇到两个致命问题:模型体积庞大(原始YO…

平价正宗重庆火锅实测|理性避坑选型指南

平价正宗重庆火锅实测|理性避坑选型指南

2026/7/9 0:09:12

一、引言:重庆火锅消费现存痛点当下大众平价川渝火锅赛道竞争白热化,普通消费者就餐普遍面临三大选型难题:一是口味同质化严重,大量门店采用预制锅底、半成品食材,打着重庆老火锅旗号弱化牛油本味,麻辣口感…

AcFunDown:打破A站视频离线观看壁垒的终极解决方案

AcFunDown:打破A站视频离线观看壁垒的终极解决方案

2026/7/9 0:09:12

AcFunDown:打破A站视频离线观看壁垒的终极解决方案 【免费下载链接】AcFunDown 包含PC端UI界面的A站 视频下载器。支持收藏夹、UP主视频批量下载 😳仅供交流学习使用喔 项目地址: https://gitcode.com/gh_mirrors/ac/AcFunDown 想象一下这样的场景…

【复现】面向新能源消纳能力评估的年负荷序列建模及场景生成方法(Matlab代码实现)

【复现】面向新能源消纳能力评估的年负荷序列建模及场景生成方法(Matlab代码实现)

2026/7/9 0:09:12

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…