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 ...
随机推荐
- 莫烦RL-01小例子
# Python 3.6.5 :: Anaconda, Inc. import numpy as np import pandas as pd import time np.random.seed(2 ...
- zz2017-2018年AI技术前沿进展与趋势
2017年AI技术前沿进展与趋势 人工智能最近三年发展得如火如荼,学术界.工业界.投资界各方一起发力,硬件.算法与数据共同发展,不仅仅是大型互联网公司,包括大量创业公司以及传统行业的公司都开始涉足人工 ...
- JDOJ 2898 删数问题
洛谷 P1106 删数问题 https://www.luogu.org/problemnew/show/P1106 JDOJ 2898: 删数问题 https://neooj.com:8082/old ...
- oracle sql语言模糊查询
'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合.'$' 匹配输入字符串的结尾位置.如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n ...
- eclipse中查找类、方法及变量被引用的地方
1.选中要查看的类.方法或变量,然后Ctrl+Shift+G或右键-->References--->Project,就可以找到它所有被引用的地方. 2.对于方法,还可以通过右键--> ...
- appium--多点触控
前戏 对于放大缩小的,我们使用前面的滑动是不行的,例如地图的放大缩小,这里就要用到多点触控了 MultiAction是多点触控的类,可以模拟多点触控操作,主要包含add()和perform()两个方法 ...
- [LeetCode] 727. Minimum Window Subsequence 最小窗口序列
Given strings S and T, find the minimum (contiguous) substring W of S, so that T is a subsequence of ...
- matlab实现主成分分析(遥感图像处理)
数据说明:采用的数据源是从别人那里拷的2012年全年的Sea Surface Temperature(海标温度,SST)数据,一直想找一份比较好的主成分分析数据,也没找到. Matlab自身有主成分分 ...
- 推荐一款手机清理工具App悟空清理
推荐一款手机清理工具App悟空清理 1 介绍 悟空清理是一款完全免费的手机加速与存储空间清理工具软件,强力去除顽固垃圾,使手机运行更畅快. 2 特色功能介绍 悟空在手,清理无忧!悟空清理,人人都在用的 ...
- SpringCloud入门概述
SpringCloud入门概述 Spring的三大模块:SpringBoot(构建),Spring Cloud(协调),Spring Cloud Data Flow(连接)注意:Spring Boot ...