聚类总结(二)聚类性能评估、肘部法则、轮廓系数

2023-05-16

文章目录

  • 一、聚类K的选择规则
    • 1.1 肘部法则–Elbow Method
    • 1.2 轮廓系数–Silhouette Coefficient
  • 二、聚类性能评估
    • 2.1 外部评估(external evaluation)
      • 2.1.1 Adjusted Rand Index(兰德指数)
      • 2.1.2 Entropy 熵
      • 2.1.3 purity(纯度)
      • 2.1.4 Accuracy(AC)
    • 2.2 内部评估(internal evaluation)
      • 2.2.1 Silhouette coefficient(轮廓系数)
      • 2.2.2 Calinski-Harabaz(CH)
    • 2.3 其它内部评估方法(others)
      • 2.3.1 Davies-Bouldin Index(DBI)
      • 2.3.2 Dunn Index(DI)
  • 有趣的事,Python永远不会缺席
  • 培训说明

聚类(一)https://blog.csdn.net/u010986753/article/details/97821890
聚类(二)https://blog.csdn.net/u010986753/article/details/97885955

一、聚类K的选择规则

1.1 肘部法则–Elbow Method

  我们知道k-means是以最小化样本与质点平方误差作为目标函数,将每个簇的质点与簇内样本点的平方距离误差和称为畸变程度(distortions),那么,对于一个簇,它的畸变程度越低,代表簇内成员越紧密,畸变程度越高,代表簇内结构越松散。 畸变程度会随着类别的增加而降低,但对于有一定区分度的数据,在达到某个临界点时畸变程度会得到极大改善,之后缓慢下降,这个临界点就可以考虑为聚类性能较好的点。

from sklearn.cluster import KMeans
model = KMeans(n_clusters=k)
model.fit(vector_points)
md = model.inertia_ / vector_points.shape[0]

在这里插入图片描述

基于这个指标,我们可以重复训练多个k-means模型,选取不同的k值,来得到相对合适的聚类类别(簇内误方差(SSE))
在这里插入图片描述

from sklearn.cluster import KMeans
model = KMeans(n_clusters=k)
model.fit(vector_points)
md = model.inertia_ 

  如上图所示,在k=3时,畸变程度得到大幅改善,可以考虑选取k=3作为聚类数量,附简单代码:

1.2 轮廓系数–Silhouette Coefficient

  对于一个聚类任务,我们希望得到的类别簇中,簇内尽量紧密,簇间尽量远离,轮廓系数便是类的密集与分散程度的评价指标,公式表达如下
                  s=(b−a)/max(a,b)

  • a簇样本到彼此间距离的均值
  • b代表样本到除自身所在簇外的最近簇的样本的均值
  • s取值在[-1, 1]之间。
  • 如果s接近1,代表样本所在簇合理,若s接近-1代表s更应该分到其他簇中。 同样,利用上述指标,训练多个模型,对比选取合适的聚类类别:
    在这里插入图片描述

  图, 当k=3时,轮廓系数最大,代表此时聚类的效果相对合理,简单代码如下:

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
model = KMeans(n_clusters=k)
model.fit(vector_points)
s = silhouette_score(vector_points, model.labels_)
 

二、聚类性能评估

  说到聚类性能比较好,就是说同一簇的样本尽可能的相似,不同簇的样本尽可能不同,即是说聚类结果簇内相似度(intra-cluster similarity),而簇间相似度(inter-cluster similarity)
  有监督的分类算法的评价指标通常是accuracy, precision, recall, etc;由于聚类算法是无监督的学习算法,评价指标则没有那么简单了。因为聚类算法得到的类别实际上不能说明任何问题,除非这些类别的分布和样本的真实类别分布相似,或者聚类的结果满足某种假设,即同一类别中样本间的相似性高于不同类别间样本的相似性。聚类模型的评价指标如下:

2.1 外部评估(external evaluation)

  将结果与某个“参考模型”(reference model)进行比较。

2.1.1 Adjusted Rand Index(兰德指数)

ARI的优点:

  • 随机均匀的标签分布的ARI值接近0,这点与raw Rand Index和 V-measure指标不同;
  • ARI值的范围是[-1,1],负的结果都是较差的,说明标签是独立分布的,相似分布;ARI结果是正的,1是最佳结果,说明两种标签的分布完全一致;
  • 不用对聚类结果做任何假设,可以用来比较任意聚类算法的聚类结果间的相似性。
    ARI的缺点:
      ARI指标需要事先知道样本的真实标签,这和有监督学习的先决条件是一样的。然而ARI也可以作为一个通用的指标,用来评估不同的聚类模型的性能。

数学公式:
  如果C是真实类别,K是聚类结果,我们定义a和b分别是:

  • a: 在C和K中都是同一类别的样本对数

  • b: 在C和K中都是不同类别的样本对数

  • C 2 n C^n_2 C2nsamples 是样本所有的可能组合对.

raw Rand Index 的公式如下

2.1.2 Entropy 熵

  对于一个聚类i,首先计算。指的是聚类 i 中的成员(member)属于类(class)j 的概率,。其中是在聚类 i 中所有成员的个数,是聚类 i 中的成员属于类 j 的个数。每个聚类的entropy可以表示为,其中L是类(class)的个数。整个聚类划分的entropy为,其中K是聚类(cluster)的数目,m是整个聚类划分所涉及到的成员个数。

2.1.3 purity(纯度)

  使用上述Entropy中的定义,我们将聚类 i 的purity定义为。整个聚类划分的purity为,其中K是聚类(cluster)的数目,m是整个聚类划分所涉及到的成员个数。

def purity(cluster, labels, k, label_set):
    p = np.zeros((k, len(label_set)))
    purity = 0
    for i in range(len(cluster)):
        p[int(cluster[i]), label_set.index(labels[i])] += 1

    purity = sum(np.max(p, axis=1))/len(labels)

    return purity

2.1.4 Accuracy(AC)

  Accuracy, (Accuracy 里可以包含了precision, recall, f-measure.),AC是目前最流行的聚类评价指标。在很多文献里面,都将AC作为聚类结果的评价指标。

  map(pi) 是一个排列映射函数,将聚类得到的标签映射到与之等价的真实标签,聚类标签与真实标签之间是1-1映射(不一定是满的)。

  • CA计算 聚类正确的百分比
  • CA越大证明聚类效果越好
def f_score(cluster, labels, label_set):
    TP, TN, FP, FN = 0, 0, 0, 0
    n = len(labels)
    # a lookup table
    for i in range(n):
        if i not in cluster:
            continue
        for j in range(i + 1, n):
            if j not in cluster:
                continue
            same_label = (labels[i] == labels[j])
            same_cluster = (cluster[i] == cluster[j])
            if same_cluster:
                if same_label:
                    TP += 1
                else:
                    FP += 1
            elif same_label:
                FN += 1
            else:
                TN += 1
    precision = TP / (TP + FP)
    recall = TP / (TP + FN)
    fscore = 2 * precision * recall / (precision + recall)
    return fscore, precision, recall, TP + FP + FN + TN

在二分类中:

  • TP(true positive):分类正确,把原本属于正类的样本分成正类。
  • TN(true negative):分类正确,把原本属于负类的样本分成负类。
  • FP(false positive):分类错误,把原本属于负类的错分成了正类。
  • FN(false negative):分类错误,把原本属于正类的错分成了负类。

2.2 内部评估(internal evaluation)

  直接考虑聚类结果而不利用任何参考模型。

2.2.1 Silhouette coefficient(轮廓系数)

  轮廓系数–Silhouette Coefficient 1.2 已讲。

2.2.2 Calinski-Harabaz(CH)

  CH也适用于实际类别信息未知的情况,以下以K-means为例,给定聚类数目K

2.3 其它内部评估方法(others)

2.3.1 Davies-Bouldin Index(DBI)

  • σi:本簇中到其它所有样本点的距离的平均;
  • cici :簇的中心;
  • d(ci,cj):样本间距。

DBI越小越好。

2.3.2 Dunn Index(DI)

  • d(i,j) :样本间距;
  • d′(k) :本簇内样本对间的最远距离

DI越大越好。

加油

有趣的事,Python永远不会缺席

欢迎关注小婷儿的博客

    文章内容来源于小婷儿的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

    如需转发,请注明出处:小婷儿的博客python    https://www.cnblogs.com/xxtalhr/

博客园 https://www.cnblogs.com/xxtalhr/

CSDN https://blog.csdn.net/u010986753

有问题请在博客下留言或加作者:
     微信:tinghai87605025 联系我加微信群
     QQ :87605025
     python QQ交流群:py_data 483766429

培训说明

OCP培训说明连接 https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16HkiuA

OCM培训说明连接 https://mp.weixin.qq.com/s/7-R6Cz8RcJKduVv6YlAxJA

     小婷儿的python正在成长中,其中还有很多不足之处,随着学习和工作的深入,会对以往的博客内容逐步改进和完善哒。重要的事多说几遍。。。。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

聚类总结(二)聚类性能评估、肘部法则、轮廓系数 的相关文章

  • BGP基本配置与总结

    使用BGP路由协议的意义是将自治系统中的路由通告到外部 xff0c 而自治系统内使用的是IGP路由 xff0c 这就是为什么内部BGP管理距离这么高 xff0c 而外部BGP管理距离这么低的原因了 1 建立BGP邻居的前提 xff1a 在B
  • Flink常见报错持续更新

    Flink 1 10 1 Job因为没有可用的任务slot而失败 2021 06 24 12 50 36 433 INFO org apache flink runtime executiongraph ExecutionGraph Job
  • IDEA一劳永逸设置默认maven

    前言 每次发现新建项目的时候maven设置便自动重置是不是很恼火 xff0c 别急这里记录下一劳永逸的办法 提示 xff1a 以下是本篇文章正文内容 xff0c 下面案例可供参考 一 设置 示例 xff1a IntelliJ IDEA 20
  • 远程debug docker中应用

    前言 最近在研究kylin相关的内容 xff0c 采用官方提供的docker化一键部署的方式来进行 xff0c 作为远程服务本地debug的原理是相通的 xff0c 这里记录下来以便参考 提示 xff1a 以下是本篇文章正文内容 xff0c
  • Kylin接入外部Jdbc Mysql数据源

    前言 Kylin目前不仅仅支持Hive作为数据源构建cube xff0c 也可以支持使用外部jdbc作为数据源进行构建 xff0c 比如使用MySQL数据源的时候会让我们下载sqoop安装包 xff0c 本质上是使用sqoop全量同步我们要
  • SpringBoot有关数组对象转JSON

    文章目录 前言一 数据的插入二 查询数据1 插入数据2 查询数据 总结 前言 比如 xff0c 有个List lt AlarmInfo gt 对象需要存储到mysql中 xff0c 我们可以存储为varchar类型 xff0c 也可以存储为
  • 分页中遇到的一个传值问题

    文章目录 前言一 传入Integer值参数二 传入String值参数 前言 目的 xff1a 在前端传入一个参数对所选的结果进行分页过滤 xff0c 这应该是非常常见的一个需求吧 xff0c 但是如何传Integer值使用mybatis p
  • Python2.7升级版本记录

    文章目录 前言一 环境二 升级步骤1 安装各类依赖库2 编译3 编译安装4 添加软连接5 修改yum安装6 升级pip7 验证 参考 前言 python2 x版本已经废弃了 xff0c 有些软件安装的是会遇到如下提示 xff0c Sorry
  • MySQL笔记

    MySQL Version 5 7 25 一 常见面试问题汇总 1 select for update会锁表还是锁行 如果是纯select是不会加锁的 xff0c 但是这里会加锁 xff0c 而且还是悲观锁 xff0c 但是具体锁表还是锁行
  • mybatis-plus最好用的逻辑删除

    文章目录 前言一 逻辑删除1 添加全局配置2 设置实体中的字段 总结 前言 为了防止人为的因素导致误删除无法恢复的情况所以我们需要逻辑意义上的删除 xff0c 而通常最简便的方式就是打标记 xff0c 这个步骤可以由mybatis plus
  • IDEA Git常用操作

    前言 Git的操作可以使用命令行 xff0c 当然为了偷懒熟练使用IDEA的git未尝不是一个好办法 xff01 一 当前修改的分支想要暂存怎么办 xff1f 这个需要是因为当前修改的分支还没有修改完 xff0c 突然有另外的需求需要去处理
  • Ubuntu14.04安装build-essential失败,包依赖问题如何解决?

    正在读取软件包列表 完成 正在分析软件包的依赖关系树 正在读取状态信息 完成 有一些软件包无法被安装 如果您用的是 unstable 发行版 xff0c 这也许是 因为系统无法达到您要求的状态造成的 该版本中可能会有一些您需要的软件 包尚未
  • 关于需求沟通的一点思考

    作为一名程序员 xff0c 可能会来自各方的需求沟通问题 xff0c 而且更多的时候是横插进来的任务 xff0c 每个人都说这个任务优先级高 xff0c 尽快做 xff0c 是不是有点焦头烂额了 xff0c 马上就开始啪啪敲代码了吗 xff
  • Go同目录下多个main声明会导致编译失败的问题

    问题 xff1a Go同目录下多个main声明会导致编译失败的问题 main redeclared in this block 表示在同级目录下main重复声明 xff0c 在学习中可以依照不同的文件夹进行分割 xff0c 也可以按照如下方
  • 嵌入式debian没有lsusb命令解决

    问题 bash lsusb command not found 解决
  • Python学习笔记-PyQt6状态栏

    QMainWindow有自带的状态栏 xff0c 可以通过statusBar 方法获取自身的状态栏 xff0c 或者通过实例化QStatusBar类 xff0c 然后使用QMainWindow setStatusBar 方法将状态栏添加到主
  • 未完成的IT路停在回车键---2014年末总结篇

    时间都去哪儿了 xff1f 一晃而过 xff0c 越来越能体会到这个词的真实感 特别是过了二十岁 xff0c 这种感觉越来越深刻 xff0c 越来越强烈 xff0c 犹如小编做公交车的时候一直向后排排倒的香樟树 xff0c 还记得有首歌叫时
  • 这一次,VR离我们真的很近

    从高考作文开始 今年号称是VR元年 xff0c 虽然目前VR还没能像手机一样走进千家万户 xff0c 但关于VR设备的关讨论是层出不穷 而今年高考 xff0c 浙江省的作文题就与VR相关 网上购物 视频聊天等在我们生活中越来越普及 有人预言
  • 补.从零开始学习C语言--scanf的%c前为什么加空格

    include lt stdio h gt int main void int i char ch scanf 34 d 34 amp i scanf 34 c 34 amp ch 这行的 C前有个空格 printf 34 i 61 d n

随机推荐

  • svn status 返回值详解

    转http blog linuxphp org archives 652 svn 是在提交前查看本地文本和版本库里面的文件的区别 返回值有许多种具体含义如下 xff1a url 61 L abc c svn已经在 svn目录锁定了abc c
  • ubuntu杀毒软件clamAV运维笔记

    1 安装 xff1a apt get install clamav 2 守护进程安装 xff1a apt get install clamav daemon 3 更新病毒库 xff1a freshclam 或手动下载安装 cvd文件 备注
  • shell 教程一:变量,字符串,传参

    一 xff0c hello shell strong span class pln style color rgb 72 72 76 vi hello span span class pun style color rgb 147 161
  • 树莓派Ubuntu20.04创建虚拟内存文件并设置开机自动启用

    目录 一 检查有没有虚拟内存 二 创建虚拟内存文件并设置权限 三 设置并激活虚拟内存文件 四 设置开机自动启用虚拟内存 五 重启后检测虚拟内存是否正常启用 一 检查有没有虚拟内存 树莓派Ubuntu20 04默认没有虚拟内存 xff0c 可
  • 随着稻香河流继续奔跑 ——致2016

    写在前面 xff0c 2016于我而言 xff0c 是丰收的一年 这一年 xff0c 我收获了能力与本领 xff0c 收获了美丽与自信 xff0c 收获了欣赏和肯定 2017 xff0c 我会不忘来时路 xff0c 继续前行 2016的驿站
  • 浅谈strtok函数的使用心得

    经常使用strtok函数进行文本操作 xff0c 其实他是一个很好用的函数 xff0c 很方便 xff0c 能够简单的实现一行文本的切分操作 xff0c 总结一下使用心得 函数原型char strtok char s const char
  • 局域网内Windows使用RealVNC远程连接CentOS6.5桌面

    1 进入root终端 xff0c 检查是否安装VNC server xff1a rpm q tigervnctigervnc server 2 如果未安装VNC server xff0c 则 xff1a yum install ytiger
  • CentOS7安装tigerVNC

    一 首先系统是已经安装了图形界面 并默认是启动到图形界面 xff0c 如果你的系统没安装图形界面 xff0c 就请给系统安装图形界面 xff1a yum y span class token function groups span spa
  • openstack主要版本亮点

    openstack主要版本亮点 1 Stein 在Stein新增的几十项功能特性中 xff0c 主要亮点有三 xff1a 容器功能的强化 用于支持5G 边缘计算和网络功能虚拟化 xff08 NFV xff09 用例的网络升级功能 资源管理和
  • OpenStack 学习之 OVN : L2网络 ( Logical switches 逻辑交换机)

    OVN Manual install amp Configuration Open vSwitch 官网 参考 OVN学习 xff08 一 xff09 OVN实战一之GNS3操作指南及OVN入门 简单理解和知识 按照 OVN Manual
  • linux vncserver设置及配置自动启动

    VNC 服务端 vncserver 启动VNC vncserver kill num num一般从1开始 因为0被x server占用了 vncpasswd 设置vnc连接密码 要使用VNC图形界面修改 vnc xstartup配置文件中末
  • 【125】Linux 中 ps -ef|grep和ps、grep详解

    一 ps ef grep详解 xff08 原文见公众号python宝 xff09 ps命令将某个进程显示出来 PS是LINUX下最常用的也是非常强大的进程查看命令 grep命令是查找 xff0c 是一种强大的文本搜索工具 xff0c 它能使
  • Pycharm Debug调试(纯干货)

    内容目录 xff08 原文见公众号python宝或www xmmup com xff09 一 打断点二 代码调试三 界面小图标介绍四 控制台介绍 数字转换为大写人民币 import sys import io sys stdout 61 i
  • 【217】#!/usr/bin/env 的意义

    题目部分 xff08 原文见公众号 xff1a python宝 xff09 python宝 https mp weixin qq com mp profile ext action 61 home amp biz 61 MzU5NjIyOT
  • 使用Scrum进行敏捷项目管理

    Scrum是一种敏捷方法 xff0c 旨在指导团队进行产品的迭代和增量交付 通常被称为 敏捷项目管理框架 xff0c 其重点是使用经验过程 xff0c 使团队能够快速 xff0c 有效 xff0c 有效地做出改变 传统的项目管理方法确定了需
  • 【246】Python -继承(父类、子类、super)

    题目部分 xff08 原文见公众号 xff1a python宝 xff09 python宝 xff1a https mp weixin qq com mp profile ext action 61 home amp biz 61 MzU5
  • 【250】Python 的基本数据类型

    题目部分 xff08 原文见公众号 xff1a python宝 xff09 python宝 xff1a https mp weixin qq com mp profile ext action 61 home amp biz 61 MzU5
  • 【252】Python3 常见异常和处理方法

    题目部分 xff08 原文见公众号 xff1a python宝 xff09 python宝 xff1a https mp weixin qq com mp profile ext action 61 home amp biz 61 MzU5
  • 500 : Internal Server Error(jupyter)

    如需转发 xff0c 请注明出处 xff1a 小婷儿的python https www cnblogs com xxtalhr p 10739036 html 一 报错 jupyter notebook能打开目录页 xff0c 但是打不开i
  • 聚类总结(二)聚类性能评估、肘部法则、轮廓系数

    文章目录 一 聚类K的选择规则1 1 肘部法则 Elbow Method1 2 轮廓系数 Silhouette Coefficient 二 聚类性能评估2 1 外部评估 xff08 external evaluation xff09 2 1