机器学习(四) -- 模型评估(4)

系列文章目录

机器学习(一) -- 概述

机器学习(二) -- 数据预处理(1-3)

机器学习(三) -- 特征工程(1-2)

机器学习(四) -- 模型评估(1-4)

未完待续……


目录

机器学习(四) -- 模型评估(1)

机器学习(四) -- 模型评估(2)

机器学习(四) -- 模型评估(3)

---

目录

系列文章目录

前言

四、 聚类模型评估指标

1、外部指标

1.1、兰德指数(RI,Rand index)

1.1.1、调整兰德指数(Adjusted Rand index)

1.2、基于互信息的分数(MI,Mutual Information-based Score)

1.2.1、标准化互信息(NMI,Normalized Mutual Information)

1.2.2、调整互信息(AMI,Adjusted mutual information)

1.3、同质性(Homogeneity Score)和完整性(Completeness Score)以及其调和平均(V-measure)

1.3.1、同质性(Homogeneity Score)

1.3.2、完整性(Completeness Score)

1.3.3、V-measure

1.4、Fowlkes-Mallows Scores(FMI)

 2、内部指标

2.1、轮廓系数(Silhouette Coefficient)

2.2、Calinski-Harabaz指数(Calinski-Harabaz Index,也称Variance Ratio Criterion)

2.3、戴维森堡丁指数(DBI,Davies-Bouldin Index)

 3、总结


前言

tips:这里只是总结,不是教程哈。

“***”开头的是给好奇心重的宝宝看的,其实不太重要可以跳过。

此处以下所有内容均为暂定,因为我还没找到一个好的,让小白(我自己)也能容易理解(更系统、嗯应该是宏观)的讲解顺序与方式。

第一文主要简述了一下机器学习大致有哪些东西(当然远远不止这些),对大体框架有了一定了解。接着我们根据机器学习的流程一步步来学习吧,掐掉其他不太用得上我们的步骤,精练起来就4步(数据预处理,特征工程,训练模型,模型评估),其中训练模型则是我们的重头戏,基本上所有算法也都是这一步,so,这个最后写,先把其他三个讲了,然后,在结合这三步来进行算法的学习,兴许会好点(个人拙见)。


衡量模型泛化能力的评价标准就是性能度量(模型评估指标、模型评价标准),而针对不同的任务有不同的评价指标。按照数据集的目标值不同,可以把模型评估分为分类模型评估、回归模型评估和聚类模型评估。

四、 聚类模型评估指标

聚类试图将数据集中的样本划分为若干个通常是互不相交的子集,每个子集叫做一个“簇”(cluster),好的聚类算法,一般要求类簇具有:
        簇内 (intra-cluster) 相似度高
        簇间 (inter-cluster) 相似度低

即同一簇尽可能相似,不同簇尽可能不同。

聚类性能度量大致有两种,
        一类是指当数据集的外部信息可用时,通过比较聚类划分与外部准则的匹配度,可以评价不同聚类算法的性能。即将聚类结果于某个“参考模型”(真实值)进行比较。称为“外部指标”(external index);
        另一类主要基于数据集的集合结构信息从紧致性、分离性、连通性和重叠度等方面对聚类划分进行评价。即基于数据聚类自身进行评估的。称为“内部指标”(internal index).

外部指标:【兰德指数(RI,Rand index)、调整兰德指数(Adjusted Rand index)】、
【基于互信息的分数(MI,Mutual Information-based Score)、标准化互信息(NMI,Normalized Mutual Information)、调整互信息(AMI,Adjusted mutual information)】、
【同质性(Homogeneity Score)和完整性(Completeness Score)以及其调和平均(V-measure)】、
【Fowlkes-Mallows Scores(FMI)】

内部指标:
轮廓系数(Silhouette Coefficient)、Calinski-Harabaz指数(Calinski-Harabaz Index,也称Variance Ratio Criterion)、戴维森堡丁指数(DBI,Davies-Bouldin Index)

1、外部指标

首先需要定义几个变量:
(可以理解为聚类给出的簇,就是你的模型计算出来的结果,参考模型给出的簇,就是“真实”的簇,实际应该分成这个样子。)。

举个例子,参考模型给出的簇与聚类模型给出的簇划分如下:
        编号:    1, 2, 3, 4, 5, 6
        聚类簇: 0, 0, 1, 1, 2, 2
        参考簇: 0, 0, 0, 1, 1, 1

那么满足a的样本对就是(1,2)、(5,6)【1号和2号的聚类簇都是0,参考簇都是0;5号和6号的聚类簇都是2,参考簇都是1】,总共有两个样本对满足a,所以a=2。

同理,满足b的样本对是(3,4)【3号和4号聚类簇都是1,但参考簇不同】,所以b=1。

同理,满足c的样本对是(1,3)(2,3)(4,5)(4,6)【他们分别都是聚类簇不同,参考簇相同】,所以c=4。

同理,满足d的样本对是(1,4)(1,5)(1,6)(2,4)(2,5)(2,6)(3,5)(3,6)【他们分别聚类簇不同,参考簇也不同】,所以d=8。

用代码展示大概就是这个样子。

# 聚类模型给出的簇
y_predict=[0,0,1,1,2,2]
# 参考模型给出的簇
y_true=[0,0,0,1,1,1]

# 计算abcd
def get_abcd(y_predict,y_true):
    a=b=c=d=0
    for i in range(0,(len(y_predict)-1)):
        for j in range(i+1,len(y_predict)):
            if(y_predict[i]==y_predict[j])&(y_true[i]==y_true[j]):
                a=a+1;
            if(y_predict[i]==y_predict[j])&(y_true[i]!=y_true[j]):
                b=b+1;
            if(y_predict[i]!=y_predict[j])&(y_true[i]==y_true[j]):
                c=c+1;
            if(y_predict[i]!=y_predict[j])&(y_true[i]!=y_true[j]):
                d=d+1;
    return a,b,c,d

a,b,c,d=get_abcd(y_predict,y_true)
print(a,',',b,',',c,',',d)

1.1、兰德指数(RI,Rand index)

兰德指数衡量的是聚类算法将数据点分配到聚类中的准确程度。兰德指数的范围从0到1,1的值表示两个聚类完全相同,接近0的值表示两个聚类有很大的不同。兰德指数只能用于评估将样本点分成两个簇的聚类算法

公式

      

其中 都是表示任意两个样本为一类有多少种组合,是数据集中可以组成的总元素对数。
用刚才的例子计算出来的结果就是  

API

from sklearn.metrics import rand_score

rand_score(y_true,y_predict)

  

1.1.1、调整兰德指数(Adjusted Rand index)

未调整的兰德指数类取值区间为[ 0,1],没有一个固定的值表示两个随即标签的关系 ;调整的兰德指数将评分规范到了[−1, 1] 之间,以0.0表示两个随机标签的关系。其中值越接近1表示聚类结果越准确,值越接近0表示聚类结果与随机结果相当,值越接近-1表示聚类结果与真实类别完全相反。

完美的标签的得分为1.0,无相关标签的得分是负数或接近于0.0分。

公式

其中E(RI)是兰德系数的期望值。【其实就和归一化有点像(不完全一样哈)--死去的记忆突然攻击QwQ】

API

from sklearn.metrics import adjusted_rand_score

adjusted_rand_score(y_true,y_predict)

调整兰德系数是对称的,交换参数不会改变得分。

1.2、基于互信息的分数(MI,Mutual Information-based Score)

衡量的是聚类结果与真实标签之间的相似性。基于互信息的分数的取值范围为[0,1],其中值越接近1表示聚类结果越准确,值越接近0表示聚类结果与随机结果相当,值越小表示聚类结果与真实类别之间的差异越大。基于互信息的分数是一种相对指标,它的取值受到真实类别数量的影响。当真实类别数量很大时,基于互信息的分数可能会受到偏差。

公式

假设U与V是对N个样本标签的分配情况。

 

API

from sklearn.metrics import mutual_info_score

mutual_info_score(y_true,y_predict)

1.2.1、标准化互信息(NMI,Normalized Mutual Information)

公式

假设U与V是对N个样本标签的分配情况,则两种分布的熵(熵表示的是不确定程度):

API

from sklearn.metrics import normalized_mutual_info_score

normalized_mutual_info_score(y_true,y_predict)

 

1.2.2、调整互信息(AMI,Adjusted mutual information)

公式

API

from sklearn.metrics import adjusted_mutual_info_score

adjusted_mutual_info_score(y_true,y_predict)

!!!注意:MI,NMI,AMI这三个的参数也是对称的,互换不影响结果。

1.3、同质性(Homogeneity Score)和完整性(Completeness Score)以及其调和平均(V-measure)

1.3.1、同质性(Homogeneity Score)

每个簇只包含一个类的成员

公式

API

from sklearn.metrics import homogeneity_score

homogeneity_score(y_true,y_predict)

1.3.2、完整性(Completeness Score)

给定类的所有成员都分配给同一个簇

公式

API

from sklearn.metrics import completeness_score

completeness_score(y_true,y_predict)

1.3.3、V-measure

V-measure是同质性homogeneity和完整性completeness的调和平均数。

公式

API

from sklearn.metrics import v_measure_score

v_measure_score(y_true,y_predict)

1.4、Fowlkes-Mallows Scores(FMI)

FMI是Precision(精度)和 Recall(召回)的几何平均数。取值范围为 [0,1],越接近1越好。

公式

API

from sklearn.metrics import fowlkes_mallows_score

fowlkes_mallows_score(y_true,y_predict)

 2、内部指标

2.1、轮廓系数(Silhouette Coefficient)

轮廓分数使用同一聚类中的点之间的距离,以及下一个临近聚类中的点与所有其他点之间的距离来评估模型的表现。它主要基于样本点与其所属簇内和最近邻簇之间的距离、相似性和紧密度等因素来计算。数值越高,模型性能越好。轮廓系数的取值范围是[-1,1],同类别样本距离越相近,不同类别样本距离越远,值越大。当值为负数时,说明聚类效果很差。

公式

其中:
        a:样本与同一类别中所有其他点之间的平均距离。 
        b:样本与下一个最近的簇中所有其他点之间的平均距离。

API

from sklearn.metrics import silhouette_score
from sklearn.datasets import load_iris

# 加载数据
iris=load_iris()

from sklearn.cluster import KMeans

# 模型训练
kmeans_model = KMeans(n_clusters=3, random_state=1).fit(iris.data)
labels = kmeans_model.labels_


from sklearn.metrics import silhouette_score

# 轮廓系数
silhouette_score(iris.data,labels)

2.2、Calinski-Harabaz指数(Calinski-Harabaz Index,也称Variance Ratio Criterion)

通过计算类中各点与类中心的距离平方和来度量类内的紧密度,通过计算各类中心点与数据集中心点距离平方和来度量数据集的分离度,CH指标由分离度与紧密度的比值得到。从而,CH越大代表着类自身越紧密,类与类之间越分散,即更优的聚类结果。

公式

API

from sklearn.metrics import calinski_harabasz_score

calinski_harabasz_score(iris.data,labels)

2.3、戴维森堡丁指数(DBI,Davies-Bouldin Index)

是计算任意两类别的类内距离平均距离之和除以两聚类中心距离求最大值。DB越小,意味着类内距离越小同时类间距离越大。零是可能的最低值,接近零的值表示更好的分区。

公式

API

from sklearn.metrics import davies_bouldin_score

davies_bouldin_score(iris.data,labels)

 3、总结

外部指标:

Rand Index:用于衡量聚类结果和真实标签之间的相似度。
Adjusted Rand Score:Rand Index的调整版本,可以对随机结果进行惩罚。
Mutual Information Score:衡量聚类结果和真实标签之间的相似度。
Normalized Mutual Information Score:Mutual Information Score的归一化版本。
Adjusted Mutual Information Score:Normalized Mutual Information Score的调整版本。
Homogeneity and Completeness Score:分别衡量聚类结果的同质性和完整性。
V-Measure:基于Homogeneity和Completeness Score计算的综合评估指标。
Fowlkes-Mallows Score:用于衡量聚类结果和真实标签之间的相似度。

内部指标:

Silhouette Score:用于衡量聚类结果中每个样本点与自身簇和其他簇之间的相似度。
Calinski-Harabasz Index:基于簇内和簇间方差之间的比值来计算聚类性能。
Davies-Bouldin Index:基于簇内的紧密度和簇间的分离度来计算聚类性能。

一般情况下,主要是对无标签的数据进行聚类操作。如果在评价中用到外部指标,就需通过人工标注等方法获取标签,成本较高,因此内部指标的实际实用性更强。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/303219.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

金和OA C6 CarCardInfo.aspx SQL注入漏洞复现

0x01 产品简介 金和网络是专业信息化服务商,为城市监管部门提供了互联网+监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 0x02 漏洞概述 金和OA C6 CarCardInfo.aspx接口处存在SQL注入漏洞,攻击者除了可以利用 SQL 注入漏洞…

2024腾讯云免费服务器申请入口,限制及申请攻略亲测!

腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM,轻量配置可选2核2G3M、2核8G7M和4核8G12M,CVM云服务器可选2核2G3M和2核4G3M配置,腾讯云百科txybk.com分享2024年最新腾讯云免费服务器…

01.08

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//窗口设置//设置窗口名称this->setWindowTitle("chat");//设置窗口图标this->setWindowIcon(QIcon("D:\\Qt\\pictrue\\pictrue\\plant.svg"));//设置窗口大小this…

SpringBoot集成Camunda

一&#xff1a;pom.xml 因camunda集成SpringBoot对SpringBoot的版本和JDK的版本都有一定的要求&#xff0c;所以这里贴个完整的依赖。可以去官网找每个SpringBoot的版本对应的camunda版本。 <?xml version"1.0" encoding"UTF-8"?> <project x…

市场复盘总结 20240108

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 今日空仓 最常用的二种方法: 方法一:指标选股找强势股 select * from dbo.ResultAll where 入选类型 like %指标选股% and 入选日期=20240108;方法二…

基于Java SSM框架实现时间管理系统项目【项目源码+论文说明】

基于java的SSM框架实现时间管理系统演示 摘要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于时间管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了时间管理…

第二百五十三回

文章目录 概念介绍使用方法示例代码 概念介绍 进度条是常用的组件之一&#xff0c;它主要用来显示某种动作的完成进度。Flutter提供了多种进度条组件&#xff0c;常用的是水平进度条&#xff1a;LinearProgressIndicator&#xff1b;圆形进度条 :CircularProgressIndicator和R…

HPM6750开发笔记《DMA接收和发送数据UART例程深度解析》

目录 概述&#xff1a; 端口设置&#xff1a; 代码分析&#xff1a; 运行现象&#xff1a; 概述&#xff1a; DMA&#xff08;Direct Memory Access&#xff09;是一种计算机系统中的数据传输技术&#xff0c;它允许数据在不经过中央处理器&#xff08;CPU&#xff09;的直…

CCF模拟题 202305-1 重复局面

试题编号&#xff1a; 202305-1 试题名称&#xff1a; 重复局面 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 题目背景 国际象棋在对局时&#xff0c;同一局面连续或间断出现3次或3次以上&#xff0c;可由任意一方提出和棋。 问题描述 国际象棋每一个局面可以用…

如何打开wps的备份中心查找备份文件

备份中心在我们使用WPS Office时扮演着重要的角色。经常保存文件的同时&#xff0c;我们也应该学会备份文件&#xff0c;以免意外损失。本文将向您介绍如何使用WPS备份中心来查找并恢复备份文件&#xff0c;方便您在需要时快速找到所需文件。 图片来源于网络&#xff0c;如有侵…

戴尔笔记本触摸板的右键区域没有效果

1、解决方案 试一下两个手指同时点击触控板。切记不是单个手指双击哦&#xff01;  这里很疑惑的是&#xff0c;触摸板的右下角进行右键单击是可有可无的选项&#xff0c;希望有明白的朋友可以一起交流。实际上&#xff0c;在触摸板任意一个区域用两个手指点击即可触发右键单…

基于GA-PSO遗传粒子群混合优化算法的DVRP问题求解matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 遗传算法&#xff08;GA&#xff09;基本原理 4.2 粒子群优化&#xff08;PSO&#xff09;基本原理 4.3 GA-PSO混合优化算法 4.4 GA-PSO在DVRP中的应用 5.完整程序 1.程序功能描述 车…

js highcharts图表控件

Highcharts是国外的一款功能强大、开源、美观、图表丰富、兼容绝大多数浏览器的纯js图表库 一、新建项目&#xff1a;HchartDemo 二、引入js <script src"~/lib/jquery/dist/jquery.min.js"></script> <script src"~/lib/hchart/highcharts.js…

数字IC芯片设计实现 | 时序Timing Signoff check_timing检查解析

今天分享在数字IC芯片设计实现做timing signoff阶段必须要看的report。check_timing的报告必须是clean的&#xff0c;否则芯片回来大概率是废片&#xff01;&#xff01;&#xff01;实际上一堆公司的芯片败在不看这个report了。 我们知道primetime(简称PT)做时序检查是基于我…

NVMe系统内存结构 - 命令格式

NVMe系统内存结构 - 命令格式 1 Submission Queue与Completion Queue定义1.1 空队列1.2 满队列1.3 队列大小1.4 队列标识符1.5 队列优先级 2 Submission Queue - 命令格式2.1 Command Dword 02.2 Command Format – Admin Command Set2.3 Command Format – NVM Command Set2.4…

#define宏定义的初探

前言&#xff1a; 最基本的#define定义方式 #define可以定义宏&#xff0c;这点相信大家并不陌生&#xff0c;其定义的方式十分简单&#xff0c;给大家随便来一个最简单、最基础的定义方式看看&#xff1a; #include<stdio.h> #define a 3 int main() { printf(&quo…

软件测试|SQL中的UNION和UNION ALL详解

简介 在SQL&#xff08;结构化查询语言&#xff09;中&#xff0c;UNION和UNION ALL是用于合并查询结果集的两个关键字。它们在数据库查询中非常常用&#xff0c;但它们之间有一些重要的区别。在本文中&#xff0c;我们将深入探讨UNION和UNION ALL的含义、用法以及它们之间的区…

Redisson 源码解析 - 分布式锁实现过程

一、Redisson 分布式锁源码解析 Redisson是架设在Redis基础上的一个Java驻内存数据网格。在基于NIO的Netty框架上&#xff0c;充分的利用了Redis键值数据库提供的一系列优势&#xff0c;在Java实用工具包中常用接口的基础上&#xff0c;为使用者提供了一系列具有分布式特性的常…

Java LeetCode篇-二叉搜索树经典解法(实现:二叉搜索树的最近公共祖先、根据前序遍历建树等)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 判断合法 1.1 使用遍历方式实现验证二叉搜索树 1.2 使用递归方式实现验证二叉搜索树 2.0 求范围和 2.1 使用非递归实现二叉搜索树的范围和 2.2 使用递归方式实现…

软件测试|测试平台开发-Flask 入门:URL组成部分详解

简介 Flask 是一款流行的 Python Web 框架&#xff0c;它简单轻量而灵活&#xff0c;适用于构建各种规模的 Web 应用程序。在 Flask 中&#xff0c;URL&#xff08;Uniform Resource Locator&#xff09;是指定 Web 应用程序中资源的唯一标识符。URL 组成部分是构成一个完整 U…