📅  最后修改于: 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或否定。
互信息是一种计算两个分配的一致性的函数。它忽略了排列。有以下可用的版本-
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
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中。