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聚类评价指标相关推荐

  1. sklearn聚类算法实现

    sklearn聚类算法实现 主要通过调用python中sklearn库中的函数来实现聚类算法,主要包括:K-MEANS.近邻传播(AffinityPropagation).均值偏移(MeanShift ...

  2. 聚类评价指标(轮廓系数 Silhouette coefficient)

    聚类评价指标 最近在做聚类的项目,聚类得到结果后我们需要知道聚类的好坏,用哪个算法效果比较好.肯定要选择那个最好评价的算法.今天我们就不谈算法只谈算法结果的评价. 我也从网上看了很多的别人写的东西,总 ...

  3. 聚类算法评价指标python实现_[ML] 聚类评价指标

    本文将介绍几个常见的聚类评价指标: Purity, NMI, RI, Precision(查准率), Recall(查全率), F, ARI, Accuracy(正确率). 好的聚类算法,一般要求类簇 ...

  4. sklearn聚类之—KMeans

    sklearn聚类之-KMeans 未标记的数据的Clustering(聚类),可以是使用模块sklearn.cluster来实现 每个clustering algorithm(聚类算法)有两个变体: ...

  5. 聚类评价指标S_Dbw及其python实现

    介绍 最近看了一篇文章,Yanchi Liu等人比较了各个聚类评价指标(例如??, ?, ??, ??以及S_Dbw等等),在一些有着不同挑战的数据集上(例如有噪声,密度不均,某几类挨得比较近等等问题 ...

  6. 聚类评价指标S_Dbw及其Matlab实现

    聚类评价指标S_Dbw及其Matlab实现 简介 S ⁡ _ D b w \operatorname{S}\_{Dbw} S_Dbw是一个基于密度的指标,它通过对比 类内的紧密性 和 类间的密度 来评 ...

  7. sklearn快速入门教程:补充内容 -- sklearn模型评价指标汇总(聚类、分类、回归)

    sklearn集成了大多数模型评价指标,这可以很大程度上方便我们的使用,尤其在对进行进行自动调参时可以方便我们进行选择. 做下这个笔记主要是为了补充之前的内容:sklearn快速入门教程:(四)模型自 ...

  8. 机器学习之sklearn——聚类

    生成数据集方法:sklearn.datasets.make_blobs(n_samples,n_featurs,centers)可以生成数据集,n_samples表示个数,n_features表示特征 ...

  9. 【聚类算法】sklearn聚类方法详解

    转自:https://blog.csdn.net/ustbbsy/article/details/80960652 感谢博主 1 KMeans 1.1 算法描述 随机选择k个中心 遍历所有样本,把样本 ...

最新文章

  1. iOS12-crash错误-reason: 'UITableView failed to obtain a cell from its dataSource'
  2. R语言可视化分面图、假设检验、单变量分组多水平t检验并指定参考水平、可视化单变量分组多水平分面箱图(faceting boxplot)并添加显著性水平、指定显著性参考水平
  3. Knockout2.x:ko.dataFor()、ko.contextFor()使用
  4. 不丹的启示:用国民幸福总值替代GDP
  5. 1094 The Largest Generation (25 分)【难度: 一般 / 树的遍历】
  6. 关于使用DataGrid的ButtonColumn,动态添加DataGrid列,实现不定列n个文件的下载功能...
  7. Java04-day04【IDEA(概述、启动配置、项目结构、内容辅助键、快捷键、模块操作)、数组(定义详解、动态初始化、访问)、内存分配、数组内存图】
  8. MySQL索引的创建、删除和查看
  9. [原创]OpenvSwitch安装
  10. 后缀为frm是什么文件_Shell 点文件可以为你做点什么
  11. Layer数据表格监听排序切换
  12. vb rs.recordCount=-1的解决办法
  13. parser.parse_known_args()理解
  14. 程序员常用网站和工具(持续更新)
  15. LaTex 中 控制表格的行距
  16. [2021.8纪中集训Day14]
  17. 考研计算机西电和大连理工大学教务处,高考或考研,大连理工大学和电子科技大学怎么选?其实很简单...
  18. 期货分仓软件 /股票分仓软件的功能有哪些?
  19. python自带的shell、其性能优于ipython吗_尔雅通识课《社会体育学》答案
  20. XZ_Swift 之输入框的各种限制,看这一篇就够了:输入框只能输入字母、数字和中文,控制输入特殊字符和表情

热门文章

  1. 夯实Java基础(十八)——泛型
  2. git 日常用法记录
  3. 洛谷 P2089 烤鸡
  4. python 之遍历目录树(可匹配输出特定后缀的文件)
  5. 常用JS积累之获取节点高度(基于浏览器)
  6. mplayer error opening/initializing the selected video_out (-vo) device
  7. SpringBoot 入门知识点详解
  8. 【恋上数据结构】快速排序
  9. js休眠实现sleep[博]
  10. mongodb性能 mysql_MySQL和MongoDB的性能测试