聚类算法(三)—— 评测方法2_微知girl的博客-程序员秘密

技术标签: 聚类  机器学习  聚类算法  无监督学习  # 评价指标  自然语言处理  # 聚类算法  

聚类算法(三)—— 评测方法1

聚类相关:

聚类算法(一)——DBSCAN
聚类算法(二)—— 优缺点对比
聚类算法(三)—— 评测方法1
聚类算法(三)—— 评测方法2
聚类算法(三)—— 评测方法3(代码)
聚类算法(四)—— 基于词语相似度的聚类算法(含代码)
聚类算法(五)——层次聚类 linkage (含代码)
聚类算法(六)——谱聚类 (含代码)

当前聚类评测指标

评测指标整体概述

  • 聚类评测指标详细介绍 算法评测结果 Kmeans评测结果 link

内部评价指标

  • 主要为无监督聚类评价指标,多采用类内节点和类间节点距离相关计算得到,对于我们目前算法评测不合适,因为本身依据关键词相似度得到的聚类结果

外部评价指标

  • 主要有RI、ARI、FMI、JC、DI、Precision-Recall、AMI、homogeneity-completeness-V_measure
  • RI、ARI、FMI、JC、DI、AMI可解释性不强,针对当前业务场景使用来说,Precision-Recall 和 homogeneity-completeness-V_measure 评测较为合适,可以反映预测结果的类别中是否都是同一类别数据以及同一类别是否被分到了一个类中。

评价算法原理

Precision-Recall

  • 准确率和召回率,这里同常用的PR公式不同,含义也不相同,准确率表示预测同一类别中的样本实际为同一类别的指标;召回率表示标注中同一类别中的样本是否被分到同一类别的指标。
    Precision = a/(a+b)
    Recall = a/(a+c)
    a : 两个样本在预测和标注中为同一类别的数目
    b : 两个样本在预测中为同一类别,在标注中为不同类别的数目
    c : 两个样本在预测中为不同类别,在标注中为同一类别的数目

homogeneity-completeness-V_measure

  • Homogeneity (同质性):一个簇中是只包含一个类别的样本
  • Completeness (完整性): 同类别样本被归类到相同簇中
  • V_measure:Homogeneity 和 Completeness 的调和平均

sklearn的源码
需要先计算MI,然后根据MI计算其它值:
‘ M I ( U , V ) = ∑ i = 1 ∣ U ∣ ∑ j = 1 ∣ V ∣ ∣ U i ∩ V j ∣ N log ⁡ N ∣ U i ∩ V j ∣ ∣ U i ∣ ∣ V j ∣ ‘ `MI(U,V)=\sum_{i=1}^{|U|} \sum_{j=1}^{|V|} \frac{|U_i\cap V_j|}{N} \log\frac{N|U_i \cap V_j|}{|U_i||V_j|}` MI(U,V)=i=1Uj=1VNUiVjlogUiVjNUiVj
‘ h = M I ( U , V ) / e n t r o p y ( U ) ‘ `h=MI(U,V)/entropy(U)` h=MI(U,V)/entropy(U)
‘ c = M I ( U , V ) / e n t r o p y ( V ) ‘ `c=MI(U,V)/entropy(V)` c=MI(U,V)/entropy(V)

上面详细介绍中涉及的公式存在问题
根据 源码原理及一些相关参考,整理下个人理解:
在这里插入图片描述
其中U为预测类,V为标记类
MI为互信息(Mutual Information)
在这里插入图片描述

将p(k,l) p(k), p(l)统计值带入即可转化为上面MI(U,V)公式。

贴一个互信息、信息熵之间联系的图,便于理解这一评测指标的原理

在这里插入图片描述

假设粉色的圆圈为预测结果类信息熵,黄色的圆圈为实际类信息熵。那么交叠的部分为互信息
H = MI/H(U), 相当于交叠的部分在粉色圆圈中占的比例,也就是 预测结果和实际结果的重叠部分占预测结果的比例,预测结果越准确,重叠越多,H值越高。
C = MI/H(V),相当于交叠的部分在黄色圆圈中占的比例,也就是 预测结果和实际结果的重叠部分占实际类别的比例,预测结果越准确,重叠越多,C值越高。
最后调和平均
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/katrina1rani/article/details/108378667

智能推荐

OpenCV-Python系列·第二十五集:Harris角点检测_Seung-Yim Yau的博客-程序员秘密

Tip:Harris角点检测# -*- coding: utf-8 -*-"""Created on Sat Sep 22 21:18:41 [email protected]: Administrator"""import cv2import numpy as npimg = cv2.imread("pisa.jpg")cv2.imshow("original image",i...

POJ 2299 Ultra-QuickSort 快速排序求逆序对__lixiyi_的博客-程序员秘密

Ultra-QuickSortTime Limit: 7000MS Memory Limit: 65536K Total Submissions: 59356 Accepted: 21972 DescriptionIn this problem, you have to analyze a particular sorting algorithm. The algorit

linux把日志发送到日志服务器上_weixin_33836223的博客-程序员秘密

上一篇我们介绍了rsyslog配置文件。在现网环境中,无论是为了把日志存储更长的时间还是为了分析日志的方便性,我们通常会把日志发送到日志服务器或是日志收集分析系统上。接下来我们介绍一下如何配置。 实验环境: RHEL 7 实验目的: 我们把client上info级别以上的所有日志都发送到日志服务器192.168.202.130上。 client: 定义info级别...

新手前端的面经总结(已拿网易offer)_fe_lucifer的博客-程序员秘密

作者:凤鸣于岐来源:https://zhuanlan.zhihu.com/p/364664214月19日,本人拿到了网易的口头offer。已经决定去网易-杭研院实习。精神紧绷了一个半月,...

MapBox Android学习笔记2关于地图的一些基础设置_long_hai_d的博客-程序员秘密

MapBox Android学习笔记2关于地图的一些基础设置这里写自定义目录标题查看API上一篇Mapbox学习笔记中我们已经把基础地图加载出来了,现在就在地图上一些基础的设置,在mapboxMap中有一个UiSettings参数,通过UiSettings setting= mapboxMap.getUiSettings(),可以获得settings对象,我们看看UiSettings可以做那些事情呢?查看API我们只看一下set方法,这里set和get是对应的setCompassEnabled(bo

文本分类网络TextCNN,TextRNN介绍_暴躁的猴子的博客-程序员秘密

https://blog.csdn.net/u012762419/article/details/79561441https://blog.csdn.net/Torero_lch/article/details/82588732

随便推点

ZYNQ-Linux学习笔记(7)-Ubuntu下SDK编写linux应用程序 Petalinux 2018.2_网布的博客-程序员秘密

前言之前一篇说明了在windows下编写应用程序的方法,在ubuntu下使用Xilinx SDK编写应用程序还是比较方便的,主要有以下几个步骤。前提:安装好petalinux2018.2准备工作1.安装Xilinx SDK 2018.2 Linux版本解压缩sdk文件夹,得到如图所示文件夹内容:在文件夹下运行终端,在终端中输入./xsetup,进入到安装界面如下图所示进行勾选安装即可安装完成后在桌面会有SDK的图标2.生成可用的sysroot文件夹在petalinux工程的目录

Linux 系统下 Tomcat 服务器的安装与启动_xietansheng的博客-程序员秘密

本文链接: https://blog.csdn.net/xietansheng/article/details/844052081. 安装 JDKTomcat 使用 Java 实现,安装 Tomcat 之前,必须先安装 JDK,并且配置 JAVA_HOME 和 PATH 环境变量。如果已安装,忽略此步骤。参考: Linux 系统下 JDK 安装和 Java 环境变量配置2. 下载 Tom...

基于CPLD的CAN总线设计_三横①竖的博客-程序员秘密

最近,在做关于CAN总线设计的程序,想利用CPLD来设计CAN总线进行通信实验。程序大体上写好了,正在测试阶段……其中也遇到了不少问题,板子改了两次了,SJA1000和CPLD的接口电平不相等,需要靠双向总线收发器来进行电平转换,测试发现SJA1000里的寄存器都配置好了,就是发送时,看不到数据发送出去…… 只好继续测试啦^ 不知道有没有人做过这方面的设计……  

seata源码解析:seata server各种消息处理流程_Java识堂的博客-程序员秘密_seata server源码分析

介绍上一篇文章我们分析了seata-server端启动流程以及消息处理流程。这篇我们就来看第二个比较重要的内容,全局事务管理器是如何工作的?seata中有一个全局事务协调器DefaultCoordinator,它主要是处理来自RM和TM的请求来做相应的操作,但是实际的执行者并不是DefaultCoordinator,而是DefaultCoreDefaultCore的继承关系如下图,从继承图中我们可以看到其实Core类的实现类才是一个事务管理器。在seata中有4种事务管理模式,所以每种模式有一个具.

Swift面试题,看这些就够了_kidd风的博客-程序员秘密_swift面试题

最近看到一篇写swift面试题的文章,写的非常好,特此翻译过来供大家查阅,每个问题都会提供答案。书面问题初学者Question #1请用更好的方式写这个for循环:for var i = 0; i 5; i++ { print("Hello!")}Answer:for _ in 0...4 {

CStringArray用法_大风起兮云飞扬~~~的博客-程序员秘密_cstringarray

CStringArray使用之前先设置数组尺寸SetSize,才能使用SetAt                  CStringArray m_strScrkRfid ;                  m_strScrkRfid.SetSize (5);                  m_strScrkRfid.SetAt (0, _T( "001"));            

推荐文章

热门文章

相关标签