- Scikit 学习教程
- Scikit Learn - 主页
- Scikit Learn - 简介
- Scikit Learn - 建模过程
- Scikit Learn - 数据表示
- Scikit Learn - 估计器 API
- Scikit Learn - 约定
- Scikit Learn - 线性建模
- Scikit Learn - 扩展线性建模
- 随机梯度下降
- Scikit Learn - 支持向量机
- Scikit Learn - 异常检测
- Scikit Learn - K 最近邻
- Scikit Learn - KNN 学习
- 使用朴素贝叶斯分类
- Scikit Learn - 决策树
- 随机决策树
- Scikit Learn - Boosting 方法
- Scikit Learn - 聚类方法
- 集群性能评估
- 使用 PCA 降维
- Scikit Learn 有用资源
- Scikit Learn - 快速指南
- Scikit Learn - 有用的资源
- Scikit Learn - 讨论
Scikit Learn - 集群性能评估
有多种函数可以帮助我们评估聚类算法的性能。
以下是 Scikit-learn 提供的一些重要且最常用的用于评估聚类性能的函数 -
调整后兰德指数
兰德指数是计算两个聚类之间相似性度量的函数。对于此计算,兰特索引考虑了在预测聚类和真实聚类中分配在相似或不同聚类中的所有样本对和计数对。然后,使用以下公式将原始兰德指数得分“根据机会调整”为调整后兰德指数得分 -
$$调整后的RI=\left(RI-预期_{-}RI\right)/\left(max\left(RI\right)-预期_{-}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 learn 有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 learn 有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 = True Positive - 真实标签和预测标签中属于同一簇的点对的数量。
FP = 假阳性- 属于真实标签中但不属于预测标签中相同簇的点对数量。
FN = False Negative - 属于预测标签中相同簇但不属于真实标签中的点对的数量。
Scikit learn 有 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 函数将使用每个样本的平均簇内距离和平均最近簇距离来计算所有样本的平均轮廓系数。
从数学上来说,
$$S=\left(ba\right)/max\left(a,b\right)$$这里,a是簇内距离。
b 是平均最近簇距离。
Scikit learn 有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 learn 有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中。