- Scikit Learn 教程
- 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提供的一些重要且常用的用于评估聚类性能的函数:
调整后的兰德指数 (Adjusted Rand Index)
兰德指数是一个计算两个聚类之间相似性度量的函数。此计算考虑所有样本对,并计算在预测聚类和真实聚类中分配到相似或不同聚类的样本对数量。之后,使用以下公式将原始兰德指数分数“调整为机会”转换为调整后的兰德指数分数:
$$调整后的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 得分
Fowlkes-Mallows 函数测量一组点的两个聚类的相似性。它可以定义为成对精度和召回率的几何平均值。
数学上,
$$FMS=\frac{TP}{\sqrt{\left(TP+FP\right)\left(TP+FN\right)}}$$这里,`TP = 真阳性` - 真实标签和预测标签中都属于相同聚类的点对数量。
`FP = 假阳性` - 在真实标签中属于相同聚类但在预测标签中不属于相同聚类的点对数量。
`FN = 假阴性` - 在预测标签中属于相同聚类但在真实标签中不属于相同聚类的点对数量。
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 Coefficient)
轮廓函数将使用每个样本的平均簇内距离和平均最近簇距离来计算所有样本的平均轮廓系数。
数学上,
$$S=\left(b-a\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
列联表 (Contingency Matrix)
此矩阵将报告每个可信的(真实,预测)对的交集基数。分类问题的混淆矩阵是一个正方形列联表。
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中,一个在2中。另一方面,第二行显示,在真实聚类为“b”的三个样本中,一个在0中,一个在1中,一个在2中。