📜  Scikit学习-集群性能评估

📅  最后修改于: 2020-12-10 05:57:55             🧑  作者: Mango


在各种功能的帮助下,我们可以评估聚类算法的性能。

以下是Scikit学习提供的一些重要且最常用的函数,用于评估集群性能-

调整后的兰德指数

兰德指数是一项函数,用于计算两个聚类之间的相似性度量。对于此计算,兰德指数考虑了在预测和真实聚类中分配给相似或不同聚类中的所有样本对和计数对。然后,使用以下公式将原始的兰德指数得分“调整为偶然”成调整后的兰德指数得分-

$$ Adjusted \:RI = \ left(RI-Expected _ {-} RI \ right)/ \ left(max \ left(RI \ right)-Expected _ {-} RI \ right)$$

它有两个参数,即labels_true (是基础事实类标签)和labels_pred (它们是要评估的簇标签)。

from sklearn.metrics.cluster import adjusted_rand_score
   
   labels_true = [0, 0, 1, 1, 1, 1]
   labels_pred = [0, 0, 2, 2, 3, 3]

adjusted_rand_score(labels_true, labels_pred)

输出

0.4444444444444445

完美标签的评分为1,不良标签或独立标签的评分为0或否定。

基于互信息的分数

互信息是一种计算两个分配的一致性的函数。它忽略了排列。有以下可用的版本-

标准化互信息(NMI)

Scikit学习具有sklearn.metrics.normalized_mutual_info_score模块。

from sklearn.metrics.cluster import normalized_mutual_info_score
   
   labels_true = [0, 0, 1, 1, 1, 1]
   labels_pred = [0, 0, 2, 2, 3, 3]

normalized_mutual_info_score (labels_true, labels_pred)

输出

0.7611702597222881

调整后的共同信息(AMI)

Scikit学习具有sklearn.metrics.adjusted_mutual_info_score模块。

from sklearn.metrics.cluster import adjusted_mutual_info_score

   labels_true = [0, 0, 1, 1, 1, 1]
   labels_pred = [0, 0, 2, 2, 3, 3]

adjusted_mutual_info_score (labels_true, labels_pred)

输出

0.4444444444444448

福克斯-锦葵分数

Fowlkes-Mallows函数测量一组点的两个聚类的相似性。它可以定义为成对精度和查全率的几何平均值。

数学上

$$ FMS = \ frac {TP} {\ sqrt {\ left(TP + FP \ right)\ left(TP + FN \ right)}} $$

在这里, TP =真实正值-属于相同簇的真实点对数以及预测的标记数。

FP =假阳性-属于真实标签中的相同簇但不属于预测标签中的点对的数量。

FN =假负-预测标签中属于同一簇的点对的数量,但不是真实标签中的点。

Scikit学习具有sklearn.metrics.fowlkes_mallows_score模块-

from sklearn.metrics.cluster import fowlkes_mallows_score

   labels_true = [0, 0, 1, 1, 1, 1]
   labels_pred = [0, 0, 2, 2, 3, 3]

fowlkes_mallows__score (labels_true, labels_pred)

输出

0.6546536707079771

轮廓系数

Silhouette函数将使用每个样本的平均群集内距离和平均最近群集距离来计算所有样本的平均Silhouette系数。

数学上

$$ S = \左(ba \右)/ max \左(a,b \右)$$

在此,a是集群内距离。

b是平均最近集群距离。

Scikit学习具有sklearn.metrics.silhouette_score模块-

from sklearn import metrics.silhouette_score
from sklearn.metrics import pairwise_distances
from sklearn import datasets
import numpy as np
from sklearn.cluster import KMeans
dataset = datasets.load_iris()
X = dataset.data
y = dataset.target

kmeans_model = KMeans(n_clusters = 3, random_state = 1).fit(X)
labels = kmeans_model.labels_
silhouette_score(X, labels, metric = 'euclidean')

输出

0.5528190123564091

权变矩阵

此矩阵将报告(真实,预测的)每个受信任对的交集基数。分类问题的混淆矩阵是平方列联矩阵。

Scikit学习了sklearn.metrics.contingency_matrix模块。

from sklearn.metrics.cluster import contingency_matrix
x = ["a", "a", "a", "b", "b", "b"]
y = [1, 1, 2, 0, 1, 2]
contingency_matrix(x, y)

输出

array([
   [0, 2, 1],
   [1, 1, 1]
])

上面输出的第一行显示了真实簇为“ a”的三个样本中,没有一个在0中,两个在1中,而1在2中。另一方面,第二行显示了在三个样本中其真实簇为“ b”,1在0中,1在1中,1在2中。