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

news2024/9/20 0:53:18

系列文章目录

机器学习(一) -- 概述

机器学习(二) -- 数据预处理(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:基于簇内的紧密度和簇间的分离度来计算聚类性能。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EF Core 在实际开发中,如何分层?

前言:什么是分层? 分层就是将 EF Core 放在单独的项目中,其它项目如 Asp.net core webapi 项目引用它这样的好处是解耦和项目职责的清晰划分,并且可以重用 EF Core 项目但是也会数据库迁移变得复杂起来 Step by step 步骤 创建一…

java常用应用程序编程接口(API)——String概述及使用案例

前言: 开始学到api的String,整理下心得。打好基础,daydayup! API: API是什么? API(Application Programming Interface)又名应用程序编程接口。是别人编好的程序的合集。 为什么要使用API&…

计算机基础面试题 |17.精选计算机基础面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

详解Java中的serialVersionUID概念以及作用(附上Demo)

目录 前言1. 概念2. Demo 前言 原本实现Serializable接口的时候一直都没有serialVersionUID属性,直到看到涉及MybatisPlus新项目中都有该属性,于是做了一期学习了解,最后发现该属性类似深度学习训练中的种子seed,类似版本控制&am…

RuntimeError: CUDA error: invalid device ordinal解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Vue.js设计与实现阅读2

Vue.js设计与实现阅读-2 1、前言2、框架设计的核心要素2、1 提升用户体验2、2 控制代码体积2、3 Tree-Shaking2、4 特性开关2、5 错误处理 1、前言 上一篇我们了解到了 命令式和声明式的区别,前者关注过程,后者关注结果了解了虚拟dom存在的意义&#x…

[C#]winform部署yolov5-onnx模型

【官方框架地址】 https://github.com/ultralytics/yolov5 【算法介绍】 Yolov5,全称为You Only Look Once version 5,是计算机视觉领域目标检测算法的一个里程碑式模型。该模型由ultralytics团队开发,并因其简洁高效的特点而备受关注。Yol…

异常处理:全面覆盖与精细化管理的平衡

异常处理:全面覆盖与精细化管理的平衡 在软件开发中,异常处理是保证系统稳定性和用户体验的重要环节。对于是否应当全面覆盖所有异常并设立兜底机制,业界存在着两种主流思路:全面覆盖原则和精细化处理。如何在这两者间取得平衡&a…

嵌入式Qt-动手编写并运行自己的第1个ARM-Qt程序

介绍了如何搭建在Linux开发板中搭建Qt的运行环境,并测试了Qt自带的例程。 本篇,来介绍如何自己编写一个Qt程序,并将编译结果放到Linux开发板中运行。 1 Windows上编写Qt程序 因为Qt是支持跨平台的,所以我们可以先在Windows平台…

一天一个设计模式---单例模式

概念 单例模式是一种创建型设计模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。这意味着在应用程序中的任何地方,只能有一个实例存在,而不会创建多个相同类型的实例。 具体内容 单例模式通常包括以下几个要素…

深度学习:图神经网络——在推荐系统中的应用

PinSage是工业界应用图神经网络完成推荐任务的第一个成功案例,其从用户数据中构造图(graph)的方法和应对大规模图而采取的实现技巧都值得我们学习。PinSage被应用在图片推荐类Pinterest上。在Pinterest中,每个用户可以创建并命名图…

工程管理系统功能设计与实践:实现高效、透明的工程管理

在现代化的工程项目管理中,一套功能全面、操作便捷的系统至关重要。本文将介绍一个基于Spring Cloud和Spring Boot技术的Java版工程项目管理系统,结合Vue和ElementUI实现前后端分离。该系统涵盖了项目管理、合同管理、预警管理、竣工管理、质量管理等多个…

深入了解网络流量清洗--使用免费的雷池社区版进行防护

​ 随着网络攻击日益复杂,企业面临的网络安全挑战也在不断增加。在这个背景下,网络流量清洗成为了确保企业网络安全的关键技术。本文将探讨雷池社区版如何通过网络流量清洗技术,帮助企业有效应对网络威胁。 ![] 网络流量清洗的重要性&#x…

Wpf 使用 Prism 实战开发Day08

备忘录页面设计 1.效果图 一.布局设计跟第7章节一样&#xff0c;只是内容方面发生变化&#xff0c;其他样式都一样。直接把代码粘出来了 MemoView.xaml 页面代码 <UserControl x:Class"MyToDo.Views.MemoView"xmlns"http://schemas.microsoft.com/winfx/2…

jQuery页面整屏滚动

效果展示 jQuery页面整屏滚动 Html代码块 <div id"fullpage" class"fullpage-index"><!-- index01 --><div class"indexitem index01 section" id"#page1"><img src"img/img01.jpg"/></div>…

设计模式——工厂方法模式(Factory Method Pattern)

简单工厂模式 概述 说工厂方法模式之前&#xff0c;先说下简单工厂模式&#xff0c;简单工厂模式并不属于GoF 23个经典设计模式&#xff0c;但通常将它作为学习其他工厂模式的基础&#xff0c;它的设计思想很简单&#xff0c;其基本流程如下&#xff1a;首先将需要创建的各种不…

NODE笔记 0

一些简单的node学习笔记记录&#xff0c;是Vue等前端框架的基础 入门学习备忘录 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 node.js 内置网络服务器&#xff0c;是前端框架学习的基础&#xff1a; 概念&#xff1a;…

大模型机器人发展史:从VoxPoser、RT2到斯坦福Mobile ALOHA、Google机器人

前言 23年7月&#xff0c;我在朋友圈评估Google的RT2说道&#xff1a; “大模型正在革新一切领域啊&#xff0c;超帅&#xff0c;通过大模型不仅能理解“人话”&#xff0c;还能对“人话”进行推理&#xff0c;并转变为机器人能理解的指令&#xff0c;从而分阶段完成任务。回…

Web前端-jQuery

文章目录 jQuery1.1 jQuery 介绍1.1.1 JavaScript 库1.1.2 jQuery的概念1.1.3 jQuery的优点 1.2 jQuery 的基本使用1.2.1 jQuery 的下载1.2.2 jQuery快速入门1.2.3 jQuery入口函数1.2.4 jQuery中的顶级对象$1.2.5 jQuery 对象和 DOM 对象1.2.6. jQuery 对象和 DOM 对象转换 1.3…

二叉树OJ练习(二)

1. 二叉树的最近公共祖先 题目描述&#xff1a; ​ 题解: 1.p或者q其中一个等于root&#xff0c;那么root就是最进公共祖先 2.p和q分布在root的左右两侧&#xff0c;那么root就是最进公共祖先 3.p和q在root的同一侧&#xff0c;就是要遍历这棵树&#xff0c;遇到p或者q返回 ​…