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聚类评价指标的更多相关文章

  1. sklearn聚类模型:基于密度的DBSCAN;基于混合高斯模型的GMM

    1 sklearn聚类方法详解 2 对比不同聚类算法在不同数据集上的表现 3 用scikit-learn学习K-Means聚类 4 用scikit-learn学习DBSCAN聚类 (基于密度的聚类) ...

  2. 学习sklearn聚类使用

    学习利用sklearn的几个聚类方法: 一.几种聚类方法 1.高斯混合聚类(mixture of gaussians) 2.k均值聚类(kmeans) 3.密度聚类,均值漂移(mean shift) ...

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

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

  4. Python数模笔记-Sklearn(2)样本聚类分析

    1.分类的分类 分类的分类?没错,分类也有不同的种类,而且在数学建模.机器学习领域常常被混淆. 首先我们谈谈有监督学习(Supervised learning)和无监督学习(Unsupervised ...

  5. 聚类结果的评估指标及其JAVA实现

    一. 前言 又GET了一项技能.在做聚类算法的时候,由于要评估所提出的聚类算法的好坏,于是需要与一些已知的算法对比,或者用一些人工标注的标签来比较,于是用到了聚类结果的评估指标.我了解了以下几项. 首 ...

  6. Alink漫谈(二十二) :源码分析之聚类评估

    Alink漫谈(二十二) :源码分析之聚类评估 目录 Alink漫谈(二十二) :源码分析之聚类评估 0x00 摘要 0x01 背景概念 1.1 什么是聚类 1.2 聚类分析的方法 1.3 聚类评估 ...

  7. waiting list

    Problem: how to cluster non-stationary multivariate time series. What are stationary time series How ...

  8. sklearn:聚类clustering

    http://blog.csdn.net/pipisorry/article/details/53185758 不同聚类效果比较 sklearn不同聚类示例比较 A comparison of the ...

  9. 第八次作业:聚类--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 ...

随机推荐

  1. 语义分析的waf 目前就看到长亭 机器学习的waf有fortnet 阿里云的waf也算

    近期,在全球权威咨询机构 Gartner 发布的 2019 Web 应用防火墙魔力象限中,阿里云 Web 应用防火墙成功入围,是亚太地区唯一一家进入该魔力象限的厂商! Web 应用防火墙,简称 WAF ...

  2. computed和watch的用法和区别

    computed可以监听v-model(data)中的值,只要值发生变化 他就会重新去计算 computed必须是要有一个返回值的哦 <div id="app"> &l ...

  3. 201871010110-李华《面向对象程序设计(java)》第十六周学习总结

    博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...

  4. eclipse打可运行的jar

    参考:https://www.cnblogs.com/wangzhisdu/p/7832666.html 用eclipse打包可运行的jar比较坑的地方: 3.1 从下拉框选择该jar的入口文件,即m ...

  5. python-读取txt文本

    import tensorflow as tf import os with open('test_read.txt', 'r') as file: lines = file.readlines() ...

  6. opencv归一化图像

    cv::normalize(src, dst, 0.0, 255.0, cv::NORM_MINMAX);

  7. springboot整合OSS实现文件上传

    OSS 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量.安全.低成本.高可靠的云存储服务.OSS可用于图片.音视频.日志等海量文件的存储.各种终端 ...

  8. LoadRunner Controller集合点策略灰色问题 解决

    1.脚本里已经添加了集合点,但是在Controller里集合点策略是灰色的无法点击 2.问题解决: 将下图的勾选项去掉即可(系统默认是勾选上的) 去掉勾选后可以选择了:

  9. 微信小程序 - 结构目录 | 配置介绍

    结构目录 小程序框架提供了自己的视图层描述语言 WXML 和 WXSS,以及 JavaScript,并在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑. 一.小程序文件结构和传 ...

  10. JAVA List中剔除空元素(null)的方法

    方法一.list.removeAll(Collections.singleton(null)); 方法二.List nullList = new ArrayList();                ...