详解 Scikit-learn 的 metrics.adjusted_rand_score函数:调整兰德指数评估聚类结果

  • Post category:Python

sklearn.metrics.adjusted_rand_scorescikit-learn 中用于计算一个标注与真实标签相似度(Adjusted Rand Index)的函数。该函数接收两个参数,分别是真实的标签和预测的标签。返回值介于 [-1, 1] 之间。

Adjusted Rand Index (ARI) 是一种衡量相似度的指标,它在处理非平衡数据时比 Rand Index 更准确。Rand Index 是比较两个聚类中所匹配的数据点数量的比率,而 ARI 对相同的聚类进行惩罚,防止高度不平衡的聚类。该指数最高为 1,表示两个聚类集合完全相同,反之最小为 -1。0则表示平均化过程中的期望值。

使用 sklearn.metrics.adjusted_rand_score 函数的步骤如下:

  1. 导入包和数据

我们首先需要导入 sklearn.metrics 模块和数据。下面的代码将演示如何使用此函数:

import numpy as np
from sklearn.metrics import adjusted_rand_score

# 将真实标签和预测标签赋给变量
true_labels = np.array([1, 1, 0, 0, 1, 1])
pred_labels = np.array([0, 0, 1, 1, 0, 0])
  1. 计算 Adjusted Rand Index

然后可以使用 sklearn.metrics.adjusted_rand_score 函数来计算 Adjusted Rand Index:

score = adjusted_rand_score(true_labels, pred_labels)
print("Adjusted Rand Index:", score)

输出值会显示: Adjusted Rand Index: -0.33333333333333326,该值越接近 1,表示算法聚类的质量越高。

下面提供一个详细的示例。

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

# 生成随机数据点
X, y_true = make_blobs(n_samples=300, centers=4,
                       cluster_std=0.60, random_state=0)

# KMeans 聚类
kmeans = KMeans(n_clusters=4, random_state=0)
pred_labels = kmeans.fit_predict(X)

# 使用 Adjusted Rand Score 确定聚类算法的质量
score = adjusted_rand_score(y_true, pred_labels)
print("Adjusted Rand Index:", score)

上述代码中,我们首先使用 sklearn.datasets.make_blobs 生成了一些随机数据点并赋值给 Xy_true。随后,我们在数据集上应用了 KMeans 算法,将数据点分为 4 个群集。最后,我们使用 sklearn.metrics.adjusted_rand_score 函数来计算算法的聚类质量。

得到的输出为 Adjusted Rand Index: 0.760380865286047,说明算法的表现较好。