news 2026/7/5 1:38:41

sklearn KMeans 聚类评估实战:Seeds 数据集 3 指标对比与可视化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
sklearn KMeans 聚类评估实战:Seeds 数据集 3 指标对比与可视化

基于Seeds数据集的KMeans聚类三维评估体系构建与决策优化

在数据分析领域,聚类算法的效果评估一直是实践中的核心挑战。当面对Seeds这类经典数据集时,如何系统评估KMeans的聚类质量,并基于多维度指标做出最佳参数决策,成为数据科学家必须掌握的实战技能。本文将构建一个包含轮廓系数、Calinski-Harabasz指数和FMI评价法的三维评估体系,通过可视化对比和量化分析,揭示不同评估指标的内在关联与决策逻辑。

1. 数据理解与预处理策略

Seeds数据集包含210个小麦种子样本,每个样本有7个形态学特征:区域(area)、周长(perimeter)、压实度(compactness)、籽粒长度(kernel_length)、籽粒宽度(kernel_width)、不对称系数(asymmetry_coeff)和籽粒腹沟长度(groove_length)。这些特征都来自三个不同品种的小麦:Kama、Rosa和Canadian。

数据标准化是聚类前的关键步骤。由于各特征的量纲差异显著(如周长单位是毫米,而压实度是无量纲比值),我们使用MinMaxScaler进行归一化:

from sklearn.preprocessing import MinMaxScaler import pandas as pd # 数据加载与预处理 seeds_data = pd.read_csv('seeds.csv', header=None) features = seeds_data.iloc[:, :7] labels = seeds_data.iloc[:, 7] # Min-Max标准化 scaler = MinMaxScaler() normalized_features = scaler.fit_transform(features)

注意:虽然原始数据包含标签,但聚类作为无监督学习,仅在最终评估阶段才会使用标签信息。预处理阶段应保持无监督原则。

特征间的相关性分析也至关重要。通过热力图可以发现,籽粒长度与宽度呈现强正相关(相关系数0.96),这提示我们可能需要关注特征间的多重共线性问题:

特征对相关系数
长度 vs 宽度0.96
区域 vs 周长0.94
压实度 vs 不对称度-0.63

2. 多维度评估指标体系构建

2.1 轮廓系数:样本层面的聚类紧密度

轮廓系数衡量的是每个样本与同簇其他样本的相似度(a)和与最近其他簇样本的相似度(b)的相对关系:

$$ s = \frac{b - a}{\max(a, b)} $$

在Python中实现轮廓系数评估:

from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score import matplotlib.pyplot as plt silhouette_scores = [] k_range = range(2, 10) for k in k_range: kmeans = KMeans(n_clusters=k, random_state=42) cluster_labels = kmeans.fit_predict(normalized_features) silhouette_avg = silhouette_score(normalized_features, cluster_labels) silhouette_scores.append(silhouette_avg) plt.plot(k_range, silhouette_scores, marker='o') plt.xlabel('Number of clusters') plt.ylabel('Silhouette Score') plt.axvline(x=3, color='r', linestyle='--') plt.show()

典型输出结果显示,当k=3时轮廓系数达到峰值0.53,这与数据集的真实类别数一致。当k=2时得分为0.48,而k=4时降至0.45,表明3个簇的结构最优。

2.2 Calinski-Harabasz指数:簇间分离度

Calinski-Harabasz指数通过计算簇间离散度与簇内离散度的比值来评估聚类质量:

$$ CH = \frac{tr(B_k)}{tr(W_k)} \times \frac{N - k}{k - 1} $$

其中$B_k$是簇间协方差矩阵,$W_k$是簇内协方差矩阵,$N$是样本总数。实现代码如下:

from sklearn.metrics import calinski_harabasz_score ch_scores = [] for k in k_range: kmeans = KMeans(n_clusters=k, random_state=42) cluster_labels = kmeans.fit_predict(normalized_features) ch_score = calinski_harabasz_score(normalized_features, cluster_labels) ch_scores.append(ch_score) plt.plot(k_range, ch_scores, marker='o') plt.xlabel('Number of clusters') plt.ylabel('Calinski-Harabasz Score') plt.axvline(x=3, color='r', linestyle='--')

该指标在k=3时达到最大值约320,之后随k增加而下降,再次确认3是最佳簇数选择。

2.3 FMI:有监督的聚类一致性

Fowlkes-Mallows Index(FMI)需要真实标签作为参照,衡量聚类结果与真实分类的一致性:

from sklearn.metrics import fowlkes_mallows_score fmi_scores = [] for k in k_range: kmeans = KMeans(n_clusters=k, random_state=42) cluster_labels = kmeans.fit_predict(normalized_features) fmi = fowlkes_mallows_score(labels, cluster_labels) fmi_scores.append(fmi) plt.plot(k_range, fmi_scores, marker='o') plt.xlabel('Number of clusters') plt.ylabel('Fowlkes-Mallows Score') plt.axvline(x=3, color='r', linestyle='--')

FMI在k=3时达到0.88的最高值,显著高于k=2时的0.75和k=4时的0.79,为最佳簇数选择提供了第三个证据。

3. 评估结果可视化与对比分析

将三种评估指标标准化后绘制在同一坐标系中,可以更直观地比较它们的变化趋势:

from sklearn.preprocessing import MinMaxScaler # 标准化评分 scaler = MinMaxScaler() scores_matrix = np.array([silhouette_scores, ch_scores, fmi_scores]).T normalized_scores = scaler.fit_transform(scores_matrix) # 绘制对比图 plt.figure(figsize=(10,6)) plt.plot(k_range, normalized_scores[:,0], label='Silhouette', marker='o') plt.plot(k_range, normalized_scores[:,1], label='Calinski-Harabasz', marker='s') plt.plot(k_range, normalized_scores[:,2], label='FMI', marker='^') plt.legend() plt.xlabel('Number of clusters') plt.ylabel('Normalized Score') plt.axvline(x=3, color='k', linestyle='--') plt.title('Three Metrics Comparison')

从对比图中可以观察到:

  • 所有指标在k=3时均达到或接近峰值
  • k>3时各指标普遍下降,说明过度聚类会降低质量
  • 轮廓系数对k变化最敏感,而FMI最稳定

4. 决策逻辑与最佳实践

基于多指标评估,我们建立以下决策流程:

  1. 初步筛选:选择所有指标均表现良好的k值范围(本例中k=2-4)
  2. 权重分配:根据业务需求确定指标权重。若无先验知识,可采用均等权重
  3. 综合评分:计算加权平均得分 $S = 0.4 \times Silhouette + 0.3 \times CH + 0.3 \times FMI$
  4. 最终确认:选择综合得分最高的k值,并验证其与业务逻辑的一致性

对于Seeds数据集,k=3的综合得分计算如下:

指标k=2k=3k=4
轮廓系数(0.4)0.480.530.45
CH指数(0.3)180320280
FMI(0.3)0.750.880.79
综合得分0.680.850.73

在实际项目中,还需考虑以下实践要点:

  • 多次运行取平均值以避免初始质心敏感性问题
  • 结合降维可视化(如t-SNE)进行人工验证
  • 记录不同k值下的模型参数和评估结果,形成决策日志

通过这套方法论,我们不仅确定了Seeds数据集的最佳聚类数量,更建立了一个可复用的聚类评估框架。当处理新的聚类任务时,只需调整指标权重和k值范围,即可快速获得科学可靠的评估结果。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 1:38:31

MIPI、CSI、DSI、D-PHY到底是什么?它们之间的链路关系?

概述 在嵌入式系统(手机、车载、IoT、工业相机)中,CSI、DSI 和 D-PHY 是 MIPI 联盟定义的三项核心标准。简单说:CSI 管摄像头,DSI 管显示屏,D-PHY 是它们底层的物理传输通道。 三者分属协议栈的不同层次。一…

作者头像 李华
网站建设 2026/7/5 1:33:54

web安全代码基础-PHP(防护过滤操作)

目录 php.ini 全局安全配置(服务器层面,第一道防线) safe_mode 安全模式(废弃,仅历史了解) open_basedir 目录访问限制(防目录遍历 / 跨目录文件读取) disable_functions 禁用危险…

作者头像 李华
网站建设 2026/7/5 1:33:47

1921_关于AI大模型本地部署以及API token购买的一些想法

之前在网络上看到了很多本地部署大模型的说法,我一直没有尝试,总觉得这个东西可能会比较难,不一定能够快速的掌握起来。这个周末还是有点忍不住好奇之心,找了几个简单的教程看了看,发现这个东西部署起来原来是这么的容…

作者头像 李华
网站建设 2026/7/5 1:30:20

ESP32-S 转接板设计实战:Altium Designer 20 引脚库与 PCB 封装创建 3 步法

ESP32-S 转接板设计实战:Altium Designer 20 引脚库与 PCB 封装创建 3 步法在物联网设备开发中,ESP32-S系列模块因其出色的无线连接能力和丰富的外设接口,成为工程师们的首选。然而,将这类表面贴装模块快速应用于原型验证阶段&…

作者头像 李华
网站建设 2026/7/5 1:27:50

软件吃掉了世界的一半:从规则化到 token 化的产业轨迹

近些年来市场好像陷入了创新瓶颈,已经很久没有新的现象级产品出现,所有的需求似乎都被处理得差不多了。真正难啃的,是那些无法被规则化的问题,虽然有真实的业务价值,但谁也没法把它们写进一份需求文档,一动…

作者头像 李华