聚类性能度量指标

1.外部指标

将聚类结果与某个“参考模型”进行比较称为外部指标。“参考模型”通常是值有专家经验推出的的模型,或者数据本身有标签。

将样本两两配对,然后确定4个值:
a为在参考模型中属于同一个类且在聚类结果中属于同一个簇的样本对的数量。
b为在参考模型中属于同一个类且在聚类结果中不在同一个簇的样本对的数量。
c为在参考模型中不在同一个类且在聚类结果中属于同一个簇的样本对的数量。
d为在参考模型中不在同一个类且在聚类结果中不在同一个簇的样本对的数量。

1.1 Jaccard系数(JC)

JC=aa+b+cJC=\frac a{a+b+c}JC=a+b+ca

1.2 FM指数(FMI)

FMI=aa+b×aa+cFMI=\sqrt{\frac a{a+b}\times\frac a{a+c}}FMI=a+ba×a+ca

1.3Rand指数(RI)

RI=2(a+d)m(m−1)RI=\frac{2\left(a+d\right)}{m\left(m-1\right)}RI=m(m1)2(a+d)
m为样本总数量

2.内部指标

直接考察聚类的结果,不利用任何参考模型称为内部指标

我们先记住4个距离:
avg( C )为簇内样本平均距离
diam( C )为簇内样本最大距离
dmin(Ci,Cj)为簇Ci,Cj之间样本的最小距离
dcen(Ci,Cj)两个簇Ci,Cj样本中心点之间的距离

2.1 DB指数(DBI)

DBI=1k∑j=1kmaxi≠j(avg(Ci)+avg(Cj)dcen(Ci,Cj))DBI=\frac1k\sum_{j=1}^k max_{i \neq j}(\frac{avg(C_i)+avg(C_j)}{d_{cen}(C_i,C_j)})DBI=k1j=1kmaxi̸=j(dcen(Ci,Cj)avg(Ci)+avg(Cj))
k为聚好类后簇的个数DBI越小越好

2.2Dunn指数(DI)

DI=min1≤i≤k{mini≠jdmin(Ci,Cj)max1≤l≤kdiam(Cl)}DI=min_{1\leq i \leq k}\{min_{i \neq j} \frac{d_{min}(C_i,C_j)}{max_{1\leq l \leq k}diam(C_l)} \}DI=min1ik{mini̸=jmax1lkdiam(Cl)dmin(Ci,Cj)}
DI越大越好

### 头歌平台中聚类性能评估指标的实现 头歌平台支持多种聚类性能评估指标,这些指标可分为两大类:**外部指标**和**内部指标**。以下是具体说明: #### 1. **外部指标** 外部指标通过将聚类结果与已知的真实标签进行对比来评价聚类质量。常用的外部指标包括但不限于以下几种: - **Jaccard Coefficient (JC)** JC 系数衡量两个集合交集大小相对于它们并集的比例。其计算公式如下: \[ JC = \frac{|A \cap B|}{|A \cup B|} \] 它适用于二分类或多分类场景。 - **Fowlkes-Mallows Index (FM)** FM 指数是一种基于精确率和召回率的综合度量方式,定义为两者乘积的平方根: ```python fm_index = np.sqrt(precision * recall) ``` - **Adjusted Rand Index (ARI)** ARI 是一种调整后的兰德指数,考虑了随机匹配的可能性。它的取值范围为 [-1, 1],其中正值表示更好的一致性[^4]。 在头歌平台上,可以通过 `sklearn` 提供的相关函数轻松实现上述指标。例如,对于 FM 和 ARI 的实现可参考以下代码片段: ```python from sklearn.metrics.cluster import fowlkes_mallows_score, adjusted_rand_score def external_metrics(y_true, y_pred): """ 计算外部指标 FM 和 ARI 参数: y_true: 参考模型的簇划分,类型为 ndarray y_pred: 聚类模型给出的簇划分,类型为 ndarray 返回: fm_score: Fowlkes-Mallows 指数 ari_score: Adjusted Rand Index """ fm_score = fowlkes_mallows_score(y_true, y_pred) ari_score = adjusted_rand_score(y_true, y_pred) return fm_score, ari_score ``` --- #### 2. **内部指标** 内部指标不依赖于任何先验知识或真实标签,而是通过对数据本身的分布特性进行分析得出结论。常见的内部指标有: - **Silhouette Coefficient (SC)** SC 表示单一样本与其所属簇的距离与其他最近邻簇距离的关系。整体得分由所有样本的平均值得到,范围为 [-1, 1],分值越高表明聚类效果越好。 - **Calinski-Harabasz Index (CHI)** CHI 基于簇间离散程度与簇内紧凑性的比率计算而来。较高的数值代表更优的聚类结构。 - **Davies-Bouldin Index (DBI)** DBI 利用簇间的最大相似性来量化聚类的质量。较低的 DBI 数值对应着较好的聚类表现[^1]。 同样,在头歌平台上也可以借助 `sklearn` 库完成这些指标的计算工作。下面是一个简单的例子展示如何获取 Silhouette、CHI 和 DBI 得分: ```python from sklearn.metrics import silhouette_score, calinski_harabasz_score, davies_bouldin_score def internal_metrics(X, labels): """ 计算内部指标 Silhouette、Calinski-Harabasz 和 Davies-Bouldin 参数: X: 数据特征矩阵,形状为 (n_samples, n_features),类型为 array-like labels: 聚类分配的结果,长度等于 n_samples,类型为 list 或 array-like 返回: sil_score: Silhouette Coefficient ch_score: Calinski-Harabasz Index db_score: Davies-Bouldin Index """ sil_score = silhouette_score(X, labels) ch_score = calinski_harabasz_score(X, labels) db_score = davies_bouldin_score(X, labels) return sil_score, ch_score, db_score ``` --- ### 综合评估实例 为了全面理解聚类的效果,通常会结合内外部指标共同分析。假设我们已经拥有一组真实的标签 (`y_true`) 和一组预测得到的标签 (`y_pred`),以及原始的数据特征矩阵 (`X`),那么可以按照以下流程执行完整的评估过程: ```python import numpy as np # 输入数据 X = ... # 特征矩阵 labels = ... # 预测标签 y_true = ... # 真实标签 # 内部指标计算 sil_score, ch_score, db_score = internal_metrics(X, labels) # 外部指标计算 fm_score, ari_score = external_metrics(y_true, labels) print(f"Silhouette Coefficient: {sil_score:.4f}") print(f"Calinski-Harabasz Index: {ch_score:.4f}") print(f"Davies-Bouldin Index: {db_score:.4f}") print(f"Fowlkes-Mallows Index: {fm_score:.4f}") print(f"Adjusted Rand Index: {ari_score:.4f}") ``` 以上脚本能够帮助快速获得关于当前聚类方案的各项定量反馈信息[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值