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

《sklearn机器学习——聚类性能指标》Calinski-Harabaz 指数

Calinski-Harabaz 指数

简介

Calinski-Harabaz指数,也被称为方差比准则(Variance Ratio Criterion),是一种用于评估聚类结果质量的指标。它通过计算簇间离散度与簇内离散度之比来衡量聚类的有效性。简而言之,Calinski-Harabaz指数越高,说明数据集中的簇越明显,即簇内的样本相似度高,而簇间的差异性大。

其计算公式为:

[ CH(k) = \frac{B(k)/(k-1)}{W(k)/(n-k)} ]

其中:

  • ( B(k) ) 是簇间离散度矩阵的迹。
  • ( W(k) ) 是簇内离散度矩阵的迹。
  • ( k ) 表示簇的数量。
  • ( n ) 表示样本总数。

优点

  • 简单易用:Calinski-Harabaz指数的计算方法相对简单,易于实现。
  • 解释性强:得分越高表示聚类效果越好,这使得该指数在理解上比较直观。
  • 不需要真实标签:与其他一些需要真实标签的评价指标不同,Calinski-Harabaz指数可以在没有真实标签的情况下使用。

缺点

  • 对簇形状敏感:Calinski-Harabaz指数倾向于选择球形且大小相等的簇,对于其他形状的簇可能不是最优选择。
  • 不适用于复杂数据结构:对于具有复杂几何形状或密度变化的数据集,该指数可能无法准确反映真实的聚类效果。
  • 偏向于较大簇数量:在某些情况下,Calinski-Harabaz指数可能会偏向于更多的簇数量,即使这些簇的实际意义不大。

使用场景

  • 当你希望快速评估不同的聚类算法或者同一算法下不同参数设置的效果时,可以考虑使用Calinski-Harabaz指数。
  • 在探索性数据分析阶段,特别是在不知道最佳簇数量的情况下,Calinski-Harabaz指数可以帮助识别出簇数量的合理范围。
  • 对于那些簇形状接近圆形、大小均匀分布的数据集,Calinski-Harabaz指数可以作为一个有效的评估标准。

需要注意的是,在应用Calinski-Harabaz指数时,应该考虑到它的局限性,并结合具体的应用背景和其他评价指标一起使用,以获得更加全面和准确的评估结果。

sklearn.metrics.calinski_harabaz_score函数

函数参数

  • X : array-like, shape (n_samples, n_features)

    • 数据集,其中 n_samples 是样本数量,n_features 是特征数量。
  • labels : array-like, shape (n_samples,)

    • 每个样本所属簇的标签数组。labels[i] 表示第 i 个样本所属的簇编号。

返回值

  • score : float
    • 返回 Calinski-Harabaz 得分。得分越高,表示聚类效果越好。

内部数学形式

Calinski-Harabaz 分数(CH分数)是通过下面的公式计算得出的:

CH=B(k)/(k−1)W(k)/(n−k)CH = \frac{B(k) / (k - 1)}{W(k) / (n - k)}CH=W(k)/(nk)B(k)/(k1)

这里,

  • ( B(k) ) 是簇间离散度矩阵的迹,定义为簇中心与整体数据集中心之间的距离平方和乘以每个簇中的样本数。
  • ( W(k) ) 是簇内离散度矩阵的迹,定义为所有簇内样本到其相应簇中心的距离平方和。
  • ( k ) 是簇的数量。
  • ( n ) 是样本总数。

简单来说,( B(k) ) 衡量的是簇之间分离程度,而 ( W(k) ) 衡量的是簇内部的紧密程度。CH 分数越高,说明簇间的分离度越高,同时簇内的紧密度也越理想。

使用示例

from sklearn.metrics import calinski_harabasz_score
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import numpy as np# 1. 生成示例数据
# 创建一个包含3个簇的合成数据集
X, y_true = make_blobs(n_samples=300, centers=3, cluster_std=0.9, center_box=(-10.0, 10.0), shuffle=True, random_state=42)# 2. 执行聚类
# 使用K-Means算法,指定聚类数量为3
kmeans = KMeans(n_clusters=3, random_state=42, n_init=10)
cluster_labels = kmeans.fit_predict(X)# 3. 计算Calinski-Harabasz指数
ch_score = calinski_harabasz_score(X, cluster_labels)# 4. 输出结果
print(f"Calinski-Harabasz 指数: {ch_score:.2f}")

输出

Calinski-Harabasz 指数: 6402.60

代码说明

  • make_blobs : 生成一个具有预设簇结构的二维数据集,便于演示。
  • KMeans : 使用 K-Means 算法进行聚类。n_init=10 确保算法运行10次并选择最优结果。
  • calinski_harabasz_score(X, cluster_labels) :
    • X : 输入的数据特征矩阵。
    • cluster_labels : 聚类算法产生的标签。
    • 该函数计算并返回 Calinski-Harabasz 指数。
  • 输出: 打印出计算得到的指数值。
http://www.xdnf.cn/news/20502.html

相关文章:

  • Wisdom SSH 是一款搭载强大 AI 助手的工具,能显著简化服务器配置管理流程。
  • SSH服务远程安全登录
  • Linux系统shell脚本(四)
  • CodeSandbox Desktop:零配置项目启动工具,实现项目环境隔离与Github无缝同步
  • AI大模型应用研发工程师面试知识准备目录
  • 苍穹外卖优化-续
  • Java包装类型
  • Git 长命令变短:一键设置别名
  • Linux以太网模块
  • 【嵌入式】【科普】AUTOSAR学习路径
  • 《无畏契约》游戏报错“缺少DirectX”?5种解决方案(附DirectX修复工具)
  • 基于单片机智能行李箱设计
  • 云手机运行流畅,秒开不卡顿
  • 无拥塞网络的辩证
  • 24.线程概念和控制(一)
  • 贪心算法应用:数字孪生同步问题详解
  • B.50.10.10-微服务与电商应用
  • 关于退耦电容
  • 【LeetCode热题100道笔记】将有序数组转换为二叉搜索树
  • 3分钟快速入门WebSocket
  • Scikit-learn Python机器学习 - 特征降维 压缩数据 - 特征提取 - 主成分分析 (PCA)
  • dify+Qwen2.5-vl+deepseek打造属于自己的作业帮
  • 第27节:3D数据可视化与大规模地形渲染
  • 如何下载小红书视频
  • MySQL的组复制(MGR)高可用集群搭建
  • vue3图标终极方案【npm包推荐】vue3-icon-sui(含源码详解)
  • STM32F4芯片RS485使用记录
  • 小迪自用web笔记29
  • 少儿配音教育:广州声与色在线科技有限公司打造趣味课程,助力青少年语言能力提升
  • 电脑外接显示屏字体和图标过大