机器学习|正则化|评估方法|分类模型性能评价指标|吴恩达学习笔记
前文回顾:逻辑回归
目录
📚正则化
🐇过拟合的问题
🐇代价函数
🐇正则化线性回归
🐇正则化的逻辑回归模型
📚模型评估方法
🐇留出法(hold-out)
🐇交叉验证法(cross-validation)
🐇自助法(bootstrap)
🐇比较总结
📚分类模型性能评价指标
🐇混淆矩阵
🐇准确度(Accuracy)
🐇精确度(precision)和召回率(Recall,TPR)
🐇精确度和召回率的调和平均(F_score)
🐇假阳性率(FPR)和真阴性率(TFR)
🐇ROC曲线与AUC的值
🐇PR曲线(Precision-recall Curve)
🐇ROC曲线与PR曲线的关系
📚正则化
🐇过拟合的问题
🌟如何处理过拟合问题?
- 丢弃一些不能帮我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙。
- 正则化。保留所有的特征,但是减少参数的大小。
🐇代价函数
🐇正则化线性回归
对于线性回归的求解,我们之前推导了两种学习算法:一种基于梯度下降,一种基于正规方程。
🐇正则化的逻辑回归模型
以上参考学习链接:【中英字幕】吴恩达机器学习系列课程,以上对应7.1-7.4
📚模型评估方法
关于测试集与训练集:
- 将训练集类比为模拟试卷,将测试集类比为正式考试试卷。
- 测试集要尽可能地与训练集互斥(即测试样本尽量不在训练集中出现),显然,正式考试的题在模拟卷里做过,会影响测试结果。
- 测试集和训练集的划分要尽可能地保持数据分布的一致性(避免因数据划分过程中引入额外的偏差而对最终结果产生影响),显然,只有模拟卷的题型和正式考试的题型差不多,刷模拟卷的效果才更好。
🐇留出法(hold-out)
留出法是直接将数据集D划分为两个互斥的集合,其中一个作为训练集S,另一个作为测试集T。模型是从训练集归纳出来的,性能是在测试集上进行评估。
为了保持训练集和测试集数据分布一致,避免额外的误差,我们可以采用分层随机抽样(分层采样),从而保持相同的类分布。
假设数据集D:1000,其中训练集S(70%),测试集T(30%)。若数据集D包含500正例,500反例,那么最终采样的结果是训练集有350正例,350反例,测试集有150正例,150反例。
留出法具有较高的方差。T的评估可能在很大程度上取决于哪些数据点最终出现在训练集中,哪些数据点最终出现在测试集中。且可用于训练的样本较少,因为有些样本被保留用于测试。因此,单独使用留出法得到的估计结果往往不够稳定可靠。为提高性能,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。
依然存在的限制:
- 留出法没有尽可能多地利用数据进行训练
- 它也无法控制每条记录用于测试和训练的次数
🐇交叉验证法(cross-validation)
最简单的交叉验证(2折交叉):假设我们把数据分成两个大小相等的子集,我们选择其中一个子集进行训练,另一个进行测试。然后我们交换子集的角色,使之前的训练集称为测试集,反之亦然。最后总误差是通过对两次运行的误差求平均得到。
一般地,k折交叉验证是将数据分成k个大小相等的分区,在每次运行过程中,选择一个分区进行测试,而其余分区则用于训练。这个过程重复k次,以便每个分区恰好用于测试一次。总误差是通过对所有k次运行的误差进行平均得到的。类似于留出法,k折交叉法同样可以重复几次。
k折交叉法的一种特殊情况:设置k=N(即数据集的大小),这就是所谓的留一法(leave-out-out)。每个测试集只包含一条记录。留一法不受划分方式的影响,每个样本都是一个分区。留一法的评估结果往往被认为是比较准确的,不过当数据集比较大的时候,训练m个模型的计算开销难以承受。
🐇自助法(bootstrap)
在自助法中,训练集被替换采样,即已经选择用于训练的数据被返回原始数据集,这样它被重新选中的概率和原来相等。平均而言,一个大小为N的自举样本包含原始数据集中约63.2%的数据。
没有包含在自举样本中的数据作为测试集。
假设数据集D有N个样本,通过抽取返回的方式从数据集D中抽取N个样本,这抽取出的N个样本就是D'。数据集D中有部分样本从来没有被抽到过,那么没被抽到过的这些数据集就作为测试集D-D',训练集为D'。
自助法可以从相同的原始数据集生成许多不同的训练集,这使得它在数据集小、难以有效划分训练/测试集时很有用。但自助法会改变初始数据集的分布,会引入估计偏差。因此,如果我们有足够的数据,留出法和交叉验证法将被更广泛地使用。
🐇比较总结
📚分类模型性能评价指标
🐇混淆矩阵
🐇准确度(Accuracy)
对于给定的测试集,模型正确分类的样本数与总样本数之比。
更高的准确性并不一定意味着在目标任务上有更好的表现(偏向多数类),它的隐含假设是例子之间的类分布是相对平衡的。
考虑一个二元分类例子:0类示例的数量为9990,1类的数量为10,如果预测全部为0,那准确率也有9990/10000=99.9%,但这显然不正确。
🐇精确度(precision)和召回率(Recall,TPR)
精确度 | 召回率 |
对于给定测试集,分类模型将正类样本预测为正类的数量与将样本预测为正类的综述的比例。 | 对于给定测试集,模型将正类样本分为正类的数量与模型分类正确的数量的比值。 |
TP / (TP+FP) | TP / (TP+FN) |
一般来说,精确度和召回率是相互矛盾的衡量标准,Recall↑ → Precision↓,反之亦然,why?
在信息检索中,我们可以认为:
- TP = 实际相关的检索文档
- FP = 实际不相关的检索文档
- TN = 实际不相关的未检索文档
- FN = 实际相关的未检索文档
为了尽可能多地检索相关文档(增加查全率),我们尽可能多地检索文档。最极端的情况是所有的文档都会被检索到,其中所有相关的文档肯定都会被检索到(Recall =1)。然而,精度会相当低。Recall↑ → Precision↓
为了提高精度,我们只检索置信度高的文档,但这样难免会遗漏一些相关的文档,降低查全率。即有Precision↑ → Recall↓
🐇精确度和召回率的调和平均(F_score)
该指标用来综合的衡量模型的召回率和精确度,β是权重因子,当β=1,即为F1_score。
有时我们可能有多个混淆矩阵:重复训练几次;在多个数据集上进行训练;多类或多标签
我们如何评价多类分类的精度和召回率?
假设我们有一组照片。每张照片显示一种动物:猫、鱼或母鸡。我们的分类器需要预测每张照片中显示的是哪种动物。
宏查准率、宏查全率和宏F1
微查准率、微查全率和微F1
🐇假阳性率(FPR)和真阴性率(TFR)
🐇ROC曲线与AUC的值
ROC曲线是衡量分类器性能的一种常见方法。ROC曲线的实际意义在于评估分类器在不同阈值下的真阳性率和假阳性率,以达到最优的分类效果。ROC曲线下面积越接近1,从图中看曲线越接近左上角,说明分类器的性能越好。ROC曲线下面积的值即为AUC值。
设置不同的阈值可以得到不同的混淆矩阵,而每个混淆矩阵又会对应一个TPR、FPR值,在图中对应得到一个点,改变不同的阈值,得到不同的点,最终画出该分类器对应的ROC曲线。
关于分类器阈值以及ROC曲线的实际含义解释,推荐观看该哔哩哔哩视频
- 横坐标为假阳性率——FPR = FP / (TN+FP)
- 纵坐标为真阳性率——TPR = TP / (TP+FN)
🐇PR曲线(Precision-recall Curve)
Precision-Recall Curve可以反映分类器在不同的查全率和查准率条件下的性能表现,评估分类器在不同阈值下的查全率和查准率。通常来说,我们希望分类器在保证尽可能高的查准率的基础上,能够达到较高的查全率。因此,我们可以通过对比不同分类器在同一数据集上的Precision-Recall Curve来选择最优的分类器。曲线越接近右上角,表示分类器的性能越好。
- 横坐标为查全率(召回率,Recall,TPR)——TP / (TP+FN)
- 纵坐标为查准率(精确度,Precision)——TP / (TP+FP)
其中,召回率是指所有真实正样本中被分类器成功预测为正样本的比例,而精确度则是指所有被分类器成功预测为正样本的样本中真正正样本的比例。(详见上文)
🐇ROC曲线与PR曲线的关系
每一个ROC曲线都有唯一的一个PR曲线与之对应,并且如下图,ROC曲线中在左边的那条线对应PR中在上方的那条线。
ROC曲线与PR曲线的适用场景
以下是一个直观的极度不平衡的例子
- 我们可以很明显地看出右边这个图效果是很差的(越靠近右上角的越好),而左边这个图它感觉这个模型效果还是很好的。
- 当预值为0.5的情况,可以得到右上角这样的一个混淆矩阵,它正类是一个都没预测对,尽管是在这么差的情况下,左边的ROC曲线,看上去分类器效果仍然非常好,而右边这个分类器能够反映出这个模型效果不太好。
所以在这种情况下,我们需要选用 PR曲线,也就是说,如果我们更关心的是正类预测结果,并且给到的数据集非常的不平衡的话,那我们一定要选用PR曲线,而不能选用ROC曲线。
学习视频
机器学习 | 模型评估: ROC曲线与PR曲线(一): ROC曲线与PR曲线的关系
机器学习 | 模型评估: ROC曲线与PR曲线(二): ROC曲线与PR曲线的适用场景
参考博客
深度学习评估方法
常用的分类模型性能评价指标
相关文章:

机器学习|正则化|评估方法|分类模型性能评价指标|吴恩达学习笔记
前文回顾:逻辑回归 目录 📚正则化 🐇过拟合的问题 🐇代价函数 🐇正则化线性回归 🐇正则化的逻辑回归模型 📚模型评估方法 🐇留出法(hold-out) &#…...

python迭代器详解
不懂的问题:什么是协变、逆变?渐进式? _T_co TypeVar("_T_co", covariantTrue) # Any type covariant containers.作者:20岁爱吃必胜客(坤制作人),近十年开发经验, 跨域学习者&…...

关于Docker逃逸
关于Docker逃逸 文章目录关于Docker逃逸前言一、判断是否为docker容器?二、privileged特权模式启动容器逃逸三、 Docker Remote API未授权访问逃逸四、危险挂载导致Docker逃逸五、危险挂载Docker Socket逃逸六、 挂载宿主机procfs逃逸七、脏牛漏洞来进行docker逃逸八…...

@Autowired和@Resource区别
Autowired和Resource到底有什么区别 Autowired 和 Resource 都是用来实现依赖注入的注解(在 Spring/Spring Boot 项目中),但二者却有着 5 点不同: 来源不同:Autowired 来自 Spring 框架,而 Resource 来自…...

动态内存管理详细讲解
目录 1.为什么存在动态内存分配 2. 动态内存函数的介绍 2.1 malloc和free 2.2 calloc 2.3 realloc 今天要和大家分享的内容是的动态内存管理,我们先从他的定义入手学习。 1.为什么存在动态内存分配 我们到现在已经掌握了内存开辟的方式就是要么创建一个变量…...

Python和Excel的完美结合:常用操作汇总(案例详析)
在以前,商业分析对应的英文单词是Business Analysis,大家用的分析工具是Excel,后来数据量大了,Excel应付不过来了(Excel最大支持行数为1048576行),人们开始转向python和R这样的分析工具了&#…...

卡特兰数、斯特林数基础
卡特兰数 从格点(0,0)(0,0)(0,0)走到格点(n,n)(n,n)(n,n),只能向右或向上走,不能穿过对角线,的路径的条数,称为卡特兰数HnH_nHn。 则有H01H_01H01。 通项公式: Hn(2nn)−(2nn−1)H_n\begin{pmatrix} 2n\\ n \en…...
STL——mapmultimap和setmultiset
一、关联式容器 与序列式容器相同,关联式容器也是用于存储数据的,不同的是,关联式容器里存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。 二、键值对 用来表示具有一一对应的一种结构,该…...

2023热门抖音权重查询小程序源码
2023热门抖音权重查询小程序源码 跟抖音上很火的一模一样,小程序适配优化。接口免费。小程序不是网页 修改教程: 1,如果想修改或者去除水印,直接删除或修改“index.html”12~22行 2,如果想修改logo,直接…...

153.网络安全渗透测试—[Cobalt Strike系列]—[生成hta/exe/宏后门]
我认为,无论是学习安全还是从事安全的人多多少少都会有些许的情怀和使命感!!! 文章目录一、后门简介1、hta后门2、exe后门3、宏病毒后门二、生成后门并测试0、测试环境1、生成hta后门并测试2、生成exe后门并测试3、生成宏病毒后门…...

如何成为优秀的程序员
崔宝秋,现任小米首席架构师、小米云平台负责人。1995年赴美留学,纽约州立大学石溪分校计算机科学系博士毕业,曾任IBM高级工程师和高级研发经理、雅虎搜索技术核心团队主任工程师、LinkedIn主任工程师,2012年回国加入小米科技。 20…...

多线程(四):线程安全
在开始讲解线程安全之前我们先来回顾一下我们学了那些东西了: 1. 线程和进程的认识 2. Thread 类的基本用法 3. 简单认识线程状态 4. 初见线程安全 上一章结束时看了一眼线程安全问题,本章将针对这个重点讲解。 一个代码在单线程中能够安全执行&am…...

[ROC-RK3568-PC] [Firefly-Android] 10min带你了解Camera的使用
🍇 博主主页: 【Systemcall小酒屋】🍇 博主追寻:热衷于用简单的案例讲述复杂的技术,“假传万卷书,真传一案例”,这是林群院士说过的一句话,另外“成就是最好的老师”,技术…...

C++之模拟实现string
文章目录前言一、包含的相关头文件二、构造和析构1.构造函数2.拷贝构造1.传统写法2.现代写法3.赋值运算符重载1.传统写法2.现代写法4.析构函数三、iterator四、modify1.push_back(尾插一个字符)2.append(尾插一个字符串)3.运算符重载1.尾插字…...

SpringBoot实战(十三)集成 Admin
目录一、简介二、搭建 springboot-admin 管理服务1.Maven 依赖2.application.yml3.添加 EnableAdminServer4.启动服务,查看页面三、搭建 springboot-admin-client 客户端服务1.Maven 依赖2.application.yml3.启动服务,查看页面四、搭配 Eureka 使用1.搭建…...

mke2fs命令:建立ext2文件系统
以下内容源于网络资源的学习与整理,如有侵权请告知删除。 使用格式 mke2fs [options] [设备名称] [区块数] options与含义 -c:检查是否有损坏的区块。-F:不管指定的设备为何,强制执行mke2fs。-M:记录最后一次挂入的…...

免费分享一个springboot+vue的办公系统
springbootvue的OA系统项目介绍项目部署项目特点项目展示项目介绍 这是一个采用前后端分离开发的项目,前端采用 Vue 开发、后端采用 SpringBoot Mybatis 开发。 很适合java初学者练手和学习。 前端技术:Vue3.2 Vue-Router Pinia Ant Design Vue 3.X…...

STM32数据搬运工DMA
DMA的概念DMA,全称为:Direct Memory Access,即直接存储器访问。DMA 传输方式无需 CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路ÿ…...

4、操作系统——进程间通信(2)(system V-IPC介绍)
目录 一、system V-IPC常识 1、key和ID 2、文件描述符 3、函数(ftok) ftok产生IPC对象的健值key(类似文件路径) 4、例子 5、使用命令查看或删除当前系统中的IPC对象 一、system V-IPC常识 1、key和ID (1&#x…...

基于CentOS Stream 9平台搭建Nacos2.0.4集群以及OpenResty反向代理
目录展示Nacos2.0.4集群搭建1. 下载2. 解压3.修改配置3.1分别修改下启动类中JDK路径以及启动大小3.2 分别配置数据源3.3 创建nacos数据库3.4 修改cluster.conf配置3.4.1 复制并修改3.4.2 编辑文件,修改三台主机地址3.4.3 分别放入另外两个nacos的conf目录下:4. 启动…...

老杜MySQL入门基础 第二天
导入演示数据 1、连接MySQL 2、创建"bjpowernode"数据库 create database bjpowernode;3、选择数据库 use bjpowernode4、导入数据 source D:\bjpowernode.sql(文件的路径)1 去除重复记录(把查询结果去除重复记录)(原表数据不会改变) 使用关键字dist…...

Python深度学习实战:人脸关键点(15点)检测pytorch实现
引言 人脸关键点检测即对人类面部若干个点位置进行检测,可以通过这些点的变化来实现许多功能,该技术可以应用到很多领域,例如捕捉人脸的关键点,然后驱动动画人物做相同的面部表情;识别人脸的面部表情,让机…...

linux简单入门
目录Linux简介Linux目录结构Linux文件命令文件处理命令文件查看命令常用文件查看命令Linux的用户和组介绍Linux权限管理Linux简介 Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯本纳第克特托瓦兹࿰…...

给准备面试网络工程师岗位的应届生一些建议
你听完这个故事,应该会有所收获。最近有一个23届毕业的大学生和我聊天,他现在网络工程专业大四,因为今年6、7月份的时候毕业,所以现在面临找工作的问题。不管是现在找一份实习工作,还是毕业后找一份正式工作࿰…...

主线程与子线程之间相互通信(HandlerThread)
平时,我们一般都是在子线程中向主线程发送消息(要在主线程更新UI),从而完成请求的处理。那么如果需要主线程来向子线程发送消息,希望子线程来完成什么任务。该怎么做?这就是这篇文章将要讨论的内容。 一、…...

13基于双层优化的电动汽车日前-实时两阶段市场竞标
MATLAB代码:基于双层优化的电动汽车日前-实时两阶段市场竞标 关键词:日前-实时市场竞标 电动汽车 双层优化 编程语言:MATLAB平台 参考文献:考虑电动汽车可调度潜力的充电站两阶段市场投标策略_詹祥澎 内容简介:…...

REDIS19_zipList压缩列表详解、快递列表 - QuickList、跳表 - SkipList
文章目录①. 压缩列表 - zipList②. 快递列表 - QuickList③. 跳表 - SkipList①. 压缩列表 - zipList ①. ZipList是一种特殊的"双端链表",由一系列特殊编码的连续内存块组成。可以在任意一端进行压入/弹出操作,并且该操作的时间复杂度为O(1) (oxff:11111111) type…...

JavaScript 基础 - 第3天
文章目录JavaScript 基础 - 第3天笔记数组数组的基本使用定义数组和数组单元数据单元值类型数组长度属性操作数组JavaScript 基础 - 第3天笔记 数组 数组的基本使用 定义数组和数组单元 <script>// 1. 语法,使用 [] 来定义一个空数组// 定义一个空数组let…...

23.3.26总结
康托展开 是一个全排列与自然数的映射关系,康托展开的实质是计算当前序列在所有从小到大的全排列中的顺序,跟其逆序数有关。 例如:对于 1,2,3,4,5 来说,它的康托展开值为 0*4!0*3!0*2!0*1&…...

【Java学习笔记】37.Java 网络编程
Java 网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。 java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题&…...