sklearn聚类评价指标
sklearn中的指标都在sklearn.metric包下,与聚类相关的指标都在sklearn.metric.cluster包下,聚类相关的指标分为两类:有监督指标和无监督指标,这两类指标分别在sklearn.metric.cluster.supervised和sklearn.metric.cluster.unsupervised包下。聚类指标大部分都是有监督指标,无监督指标较少。
无监督指标和有监督指标应该充分配合起来:无监督指标很好,有监督指标很差,表明这个问题可能不是单靠聚类就能解决的;无监督指标很差,有监督指标很好,表明有监督指标很可能是不靠谱的,数据标注有问题。
sklearn.metric.cluster.__init__.py
把所有的聚类指标都引入进来了。
实际上,sklearn.metric包把cluster下的指标全部引进来了,所以可以直接使用sklearn.metric而不必关心sklearn.metric.cluster.
from .supervised import adjusted_mutual_info_score
from .supervised import normalized_mutual_info_score
from .supervised import adjusted_rand_score
from .supervised import completeness_score
from .supervised import contingency_matrix
from .supervised import expected_mutual_information
from .supervised import homogeneity_completeness_v_measure
from .supervised import homogeneity_score
from .supervised import mutual_info_score
from .supervised import v_measure_score
from .supervised import fowlkes_mallows_score
from .supervised import entropy
from .unsupervised import silhouette_samples
from .unsupervised import silhouette_score
from .unsupervised import calinski_harabaz_score
from .bicluster import consensus_score
预备知识
在了解这些聚类指标前,需要一些预备知识才能读懂代码。
COO
稀疏矩阵的一种格式,保存行、列、数三项。
contingency_matrix共现矩阵
from sklearn import metrics
from sklearn.metrics.cluster.supervised import contingency_matrixlabels_true = np.array([0, 2, 2, 3, 2, 1])
labels_pred = np.array([0, 2, 2, 2, 1, 2])
contingency = contingency_matrix(labels_true, labels_pred, sparse=True)
输出为
[[1 0 0]
[0 0 1]
[0 1 2]
[0 0 1]]
共现矩阵行数等于实际类别数,列数等于聚类个数,第i行第j列的值表示实际类别为i的元素有多少个被当做聚类类别为j。
AdjustedRandIndex调整兰德系数
调整之意是:$score=\frac{x-E(x)}{max(x)-E(x)}$
兰德系数是一种指标,互信息是一种指标,经过调整得到调整兰德系数和调整互信息两种指标。
调整的意义在于:对于随机聚类,分值应该尽量低。
import numpy as np
from scipy.misc import comb
from sklearn import metrics
from sklearn.metrics.cluster.supervised import contingency_matrixlabels_true = np.array([0, 2, 2, 3, 2, 1])
labels_pred = np.array([0, 2, 2, 2, 1, 2])
score = metrics.cluster.adjusted_rand_score(labels_true, labels_pred)
print(score)
n_samples = labels_true.shape[0]
n_classes = np.unique(labels_true).shape[0]
n_clusters = np.unique(labels_pred).shape[0]
contingency = contingency_matrix(labels_true, labels_pred, sparse=True)
print(contingency.todense())
sum_comb_c = sum(comb(n_c, 2) for n_c in np.ravel(contingency.sum(axis=1)))
sum_comb_k = sum(comb(n_k, 2) for n_k in np.ravel(contingency.sum(axis=0)))
sum_comb = sum(comb(n_ij, 2) for n_ij in contingency.data)
prod_comb = (sum_comb_c * sum_comb_k) / comb(n_samples, 2)
mean_comb = (sum_comb_k + sum_comb_c) / 2.
score = (sum_comb - prod_comb) / (mean_comb - prod_comb)
print(score)
silhouette_score
silhouette_score是一种无监督聚类指标。
$$silhouette_sample_score=\frac{b-a}{max(a,b)}$$
a表示样本的最小类内距离,b表示样本的最小类间距离。
silhouette_samples函数用于计算每个样本的silhouette分值,silhouette_score就是各个样本分值的平均值。
参考资料
https://blog.csdn.net/howhigh/article/details/73928635
sklearn官方文档
转载于:https://www.cnblogs.com/weiyinfu/p/10892308.html
sklearn聚类评价指标相关推荐
- sklearn聚类算法实现
sklearn聚类算法实现 主要通过调用python中sklearn库中的函数来实现聚类算法,主要包括:K-MEANS.近邻传播(AffinityPropagation).均值偏移(MeanShift ...
- 聚类评价指标(轮廓系数 Silhouette coefficient)
聚类评价指标 最近在做聚类的项目,聚类得到结果后我们需要知道聚类的好坏,用哪个算法效果比较好.肯定要选择那个最好评价的算法.今天我们就不谈算法只谈算法结果的评价. 我也从网上看了很多的别人写的东西,总 ...
- 聚类算法评价指标python实现_[ML] 聚类评价指标
本文将介绍几个常见的聚类评价指标: Purity, NMI, RI, Precision(查准率), Recall(查全率), F, ARI, Accuracy(正确率). 好的聚类算法,一般要求类簇 ...
- sklearn聚类之—KMeans
sklearn聚类之-KMeans 未标记的数据的Clustering(聚类),可以是使用模块sklearn.cluster来实现 每个clustering algorithm(聚类算法)有两个变体: ...
- 聚类评价指标S_Dbw及其python实现
介绍 最近看了一篇文章,Yanchi Liu等人比较了各个聚类评价指标(例如??, ?, ??, ??以及S_Dbw等等),在一些有着不同挑战的数据集上(例如有噪声,密度不均,某几类挨得比较近等等问题 ...
- 聚类评价指标S_Dbw及其Matlab实现
聚类评价指标S_Dbw及其Matlab实现 简介 S _ D b w \operatorname{S}\_{Dbw} S_Dbw是一个基于密度的指标,它通过对比 类内的紧密性 和 类间的密度 来评 ...
- sklearn快速入门教程:补充内容 -- sklearn模型评价指标汇总(聚类、分类、回归)
sklearn集成了大多数模型评价指标,这可以很大程度上方便我们的使用,尤其在对进行进行自动调参时可以方便我们进行选择. 做下这个笔记主要是为了补充之前的内容:sklearn快速入门教程:(四)模型自 ...
- 机器学习之sklearn——聚类
生成数据集方法:sklearn.datasets.make_blobs(n_samples,n_featurs,centers)可以生成数据集,n_samples表示个数,n_features表示特征 ...
- 【聚类算法】sklearn聚类方法详解
转自:https://blog.csdn.net/ustbbsy/article/details/80960652 感谢博主 1 KMeans 1.1 算法描述 随机选择k个中心 遍历所有样本,把样本 ...
最新文章
- iOS12-crash错误-reason: 'UITableView failed to obtain a cell from its dataSource'
- R语言可视化分面图、假设检验、单变量分组多水平t检验并指定参考水平、可视化单变量分组多水平分面箱图(faceting boxplot)并添加显著性水平、指定显著性参考水平
- Knockout2.x:ko.dataFor()、ko.contextFor()使用
- 不丹的启示:用国民幸福总值替代GDP
- 1094 The Largest Generation (25 分)【难度: 一般 / 树的遍历】
- 关于使用DataGrid的ButtonColumn,动态添加DataGrid列,实现不定列n个文件的下载功能...
- Java04-day04【IDEA(概述、启动配置、项目结构、内容辅助键、快捷键、模块操作)、数组(定义详解、动态初始化、访问)、内存分配、数组内存图】
- MySQL索引的创建、删除和查看
- [原创]OpenvSwitch安装
- 后缀为frm是什么文件_Shell 点文件可以为你做点什么
- Layer数据表格监听排序切换
- vb rs.recordCount=-1的解决办法
- parser.parse_known_args()理解
- 程序员常用网站和工具(持续更新)
- LaTex 中 控制表格的行距
- [2021.8纪中集训Day14]
- 考研计算机西电和大连理工大学教务处,高考或考研,大连理工大学和电子科技大学怎么选?其实很简单...
- 期货分仓软件 /股票分仓软件的功能有哪些?
- python自带的shell、其性能优于ipython吗_尔雅通识课《社会体育学》答案
- XZ_Swift 之输入框的各种限制,看这一篇就够了:输入框只能输入字母、数字和中文,控制输入特殊字符和表情