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_matrix
labels_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_matrix
labels_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官方文档
sklearn聚类评价指标的更多相关文章
- sklearn聚类模型:基于密度的DBSCAN;基于混合高斯模型的GMM
1 sklearn聚类方法详解 2 对比不同聚类算法在不同数据集上的表现 3 用scikit-learn学习K-Means聚类 4 用scikit-learn学习DBSCAN聚类 (基于密度的聚类) ...
- 学习sklearn聚类使用
学习利用sklearn的几个聚类方法: 一.几种聚类方法 1.高斯混合聚类(mixture of gaussians) 2.k均值聚类(kmeans) 3.密度聚类,均值漂移(mean shift) ...
- 机器学习之sklearn——聚类
生成数据集方法:sklearn.datasets.make_blobs(n_samples,n_featurs,centers)可以生成数据集,n_samples表示个数,n_features表示特征 ...
- Python数模笔记-Sklearn(2)样本聚类分析
1.分类的分类 分类的分类?没错,分类也有不同的种类,而且在数学建模.机器学习领域常常被混淆. 首先我们谈谈有监督学习(Supervised learning)和无监督学习(Unsupervised ...
- 聚类结果的评估指标及其JAVA实现
一. 前言 又GET了一项技能.在做聚类算法的时候,由于要评估所提出的聚类算法的好坏,于是需要与一些已知的算法对比,或者用一些人工标注的标签来比较,于是用到了聚类结果的评估指标.我了解了以下几项. 首 ...
- Alink漫谈(二十二) :源码分析之聚类评估
Alink漫谈(二十二) :源码分析之聚类评估 目录 Alink漫谈(二十二) :源码分析之聚类评估 0x00 摘要 0x01 背景概念 1.1 什么是聚类 1.2 聚类分析的方法 1.3 聚类评估 ...
- waiting list
Problem: how to cluster non-stationary multivariate time series. What are stationary time series How ...
- sklearn:聚类clustering
http://blog.csdn.net/pipisorry/article/details/53185758 不同聚类效果比较 sklearn不同聚类示例比较 A comparison of the ...
- 第八次作业:聚类--K均值算法:自主实现与sklearn.cluster.KMeans调用
import numpy as np x = np.random.randint(1,100,[20,1]) y = np.zeros(20) k = 3 def initcenter(x,k): r ...
随机推荐
- 关于微信小程序开发环境苹果IOS真机预览报SSL协议错误问题解决方案
微信小程序开发环境苹果IOS真机预览报SSL协议错误问题 原文来自:https://blog.csdn.net/qq_27626333/articl ...
- React 受控组件和非受控组件
需求用户名自动获取 onChange用户状态发生改变 就获取值 就是时时获取值 使用onChange 点击按钮 获取密码 只要绑定了点击事件 就可以获取值 通过 let usercont=event. ...
- mysql基础sql进阶
回顾前面的基础命令语句 修改数据表 添加字段: alter table 表名 add 字段名 列类型[not null|null][primary key][unique][auto_incremen ...
- 201871010114-李岩松《面向对象程序设计(java)》第十三周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- 网络服务—NFS
什么是NFS ? NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操作 ...
- Java8——Lambda表达式
/* * 一.Lambda 表达式的基础语法:Java8中引入了一个新的操作符 "->" 该操作符称为箭头操作符或 Lambda 操作符 * 箭头操作符将 Lambda 表达 ...
- js:
JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端执行的语言) Net ...
- zz开源 MNN:淘宝在移动 AI 上的实践
开源 MNN:淘宝在移动 AI 上的实践 陈以鎏(离青) 阅读数:40612019 年 6 月 28 日 随着深度学习的快速发展和端侧设备算力的不断提升,原本在云端执行的推理预测工作正在部分迁 ...
- 8.5 NOIP模拟测试13 矩阵游戏+跳房子+优美序列
T1矩阵游戏 数学题.首先这一列这一行先乘还是后乘对最后答案没有影响.a[i][j]表示矩阵中原始的值,h[i]表示i行的累乘,l[i]表示i列的累乘.易得ans=Σa[i][j]*h[i]*l[i] ...
- shell之startup
#!/bin/sh # # # # PROJECT=$ APPWORK_DIR=~/apps/$PROJECT LOGPATH=~/logs/$ LOGFILE=~/logs/$PROJECT/${P ...