Python-NMI和ARI计算通过sklearn计算

这篇博客介绍了Python中使用sklearn库计算聚类效果的ARI(兰德系数)和NMI(调整互信息评分)。内容涵盖聚类的基本概念,无监督学习评价指标,以及如何使用这些指标评估模型。示例代码展示了如何在实际聚类算法如K均值、DBSCAN等中应用这些评估方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

0、基础

ARI(兰德系数)

NMI(调整互信息评分)

2、使用

3、举例

4、补充

简介

聚类

聚类算法

聚类算法示例

1.库安装

2.聚类数据集

3.亲和力传播

4.聚合聚类

5.BIRCH

6.DBSCAN

7.K均值

8.Mini-Batch K-均值

9.均值漂移聚类

10.OPTICS

11.光谱聚类

12.高斯混合模型

总结

5、参考


0、基础

聚类属于无监督学习方法,因此学习一下无监督聚类的评价指标!!!

官方手册学习

设定已知先验知识的标签为labels_true,利用聚类算法预测的样本标签为label_pred(这个值需要使用sklearn的kemeans方法对相应的数据:数据X和聚类个数 进行处理获得才可以直接传进去使用),互信息是衡量两种预测的一致性,忽略排列的顺序。互信息评估有两种方法,标准化的互信息Normalized Mutual Information(NMI) 和调整后的互信息Adjusted Mutual Information(AMI)

ARI(兰德系数)

NMI(调整互信息评分)


 

2、使用

官方手册学习

也就是传一个数据真实标签,直接获取。还需要传一个预测类别:这个值需要使用sklearn的kemeans方法对相应的数据:数据X和聚类个数 进行处理获得才可以直接传进去使用

'''
# ARI
metrics.adjusted_mutual_info_score(labels_true, labels_pred)
# NMI
metrics.normalized_mutual_info_score(labels_true, labels_pred)
'''

我的代码使用

from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score, normalized_mutual_info_score, adjusted_rand_score
from sklearn.cluster import KMeans

def kmeans_test(X, y, n_clusters, repeat=10):
    nmi_list = []
    ari_list = []
    for _ in range(repeat):
        kmeans = KMeans(n_clusters=n_clusters)
        y_pred = kmeans.fit_predict(X)
        nmi_score = normalized_mutual_info_score(y, y_pred, average_method='arithmetic')
        ari_score = adjusted_rand_score(y, y_pred)
        nmi_list.append(nmi_score)
        ari_list.append(ari_score)
    return np.mean(nmi_list), np.std(nmi_list), np.mean(ari_list), np.std(ari_list)

3、举例

示例代码:

from sklearn import metrics
labels_true = [0, 0, 0, 1, 1, 1]
labels_pred = [0, 0, 1, 1, 2, 2]

metrics.adjusted_mutual_info_score(labels_true, labels_pred)  
0.22504...

互信息评分中adjusted_mutual_info_score和normalized_mutual_info_score函数其参数都是对称的,交换的参数位置不会改变评分值,示例代码:

>>> metrics.adjusted_mutual_info_score(labels_pred, labels_true)  
0.22504...

利用此函数评估模型最好的值为1,示例代码:

labels_pred = labels_true[:]
metrics.adjusted_mutual_info_score(labels_true, labels_pred)
1.0

metrics.normalized_mutual_info_score(labels_true, labels_pred)
1.0

评估模型最差的值(与labels_true不相关),其结果为非正值,示例代码:

>>> labels_true = [0, 1, 2, 0, 3, 4, 5, 1]
>>> labels_pred = [1, 1, 0, 0, 2, 2, 2, 2]
>>> metrics.adjusted_mutual_info_score(labels_true, labels_pred)  
-0.10526...

4、补充

10种聚类算法的完整python操作示例

简介

聚类或聚类分析是无监督学习问题。它通常被用作数据分析技术,用于发现数据中的有趣模式,例如基于其行为的客户群。有许多聚类算法可供选择,对于所有情况,没有单一的最佳聚类算法。相反,最好探索一系列聚类算法以及每种算法的不同配置。在本教程中,你将发现如何在 python 中安装和使用顶级聚类算法。

完成本教程后,你将知道:

  • 聚类是在输入数据的特征空间中查找自然组的无监督问题。

  • 对于所有数据集,有许多不同的聚类算法和单一的最佳方法。

  • 在 scikit-learn 机器学习库的 Python 中如何实现、适配和使用顶级聚类算法。

本教程分为三部分:

  1. 聚类

  2. 聚类算法

  3. 聚类算法示例

  • 库安装

  • 聚类数据集

  • 亲和力传播

  • 聚合聚类

  • BIRCH

  • DBSCAN

  • K-均值

  • Mini-Batch K-均值

  • Mean Shift

  • OPTICS

  • 光谱聚类

  • 高斯混合模型

聚类

聚类分析,即聚类,是一项无监督的机器学习任务。它包括自动发现数据中的自然分组。与监督学习(类似预测建模)不同,聚类算法只解释输入数据,并在特征空间中找到自然组或群集。

聚类技术适用于没有要预测的类,而是将实例划分为自然组的情况。
—源自:《数据挖掘页:实用机器学习工具和技术》2016年。

群集通常是特征空间中的密度区域,其中来自域的示例(观测或数据行)比其他群集更接近群集。群集可以具有作为样本或点特征空间的中心(质心),并且可以具有边界或范围。

这些群集可能反映出在从中绘制实例的域中工作的某种机制,这种机制使某些实例彼此具

### 深度学习模型性能评估分析 对于深度学习模型的性能评估,通常会综合考虑多个指标以全面了解其表现。在当前情况下,ACC(Accuracy)、NMI(Normalized Mutual Information)以及ARI(Adjusted Rand Index)均取得了0.6的结果。 #### Accuracy (ACC) Accuracy 是衡量分类正确的样本占总样本的比例。尽管 ACC 达到 0.6 表明模型能够正确分类约 60% 的样本[^1],但从实际应用的角度来看,这一数值并不算高。特别是在复杂的多类别场景下,仅依靠 ACC 可能无法充分反映模型的真实能力。因此,在这种情况下,建议进一步探索其他评价维度。 #### Normalized Mutual Information (NMI) NMI 值为 0.6 显示了模型所学特征与真实分布间存在一定的关联程度,但仍有较大提升空间[^2]。具体而言,较高的 NMI 数值意味着更紧密的相关性,而目前该分数提示我们可能需要通过增加训练数据量或者改进网络架构等方式增强模型捕获深层次模式的能力。 #### Adjusted Rand Index (ARI) ARI 得分为 0.6 则表示聚类结果相较于基线有一定改善,不过距离理想状态尚远[^4]。考虑到 ARI 主要用于对比两个分组方案的一致性,这样的成绩暗示着现有算法或许未能完全理解输入数据内部结构特性,从而影响最终输出质量。 综上所述,虽然这三个核心指标都处于中间水平线上方,但是为了获得更加精准可靠的预测成果,有必要针对以下几个方面做出努力: - **优化超参数设置**:尝试不同的学习率、批次大小等因素组合寻找最佳配置; - **引入正则化技术**:防止过拟合现象发生的同时提高泛化能力; - **扩充标注资料库规模**:提供更多样化的实例帮助神经元更好地掌握各类别间的差异点; - **更换更适合的任务框架**:比如从卷积层转向注意力机制等新型设计思路。 ```python from sklearn.metrics import accuracy_score, normalized_mutual_info_score, adjusted_rand_score # Example usage of metrics calculation labels_true = [0, 0, 0, 1, 1, 1] labels_pred = [0, 0, 1, 1, 2, 2] acc = accuracy_score(labels_true, labels_pred) nmi = normalized_mutual_info_score(labels_true, labels_pred) ari = adjusted_rand_score(labels_true, labels_pred) print(f'ACC: {acc:.2f}, NMI: {nmi:.2f}, ARI: {ari:.2f}') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静静喜欢大白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值