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

news2024/11/26 20:31:01

系列文章目录

机器学习(一) -- 概述

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

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

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

未完待续……


目录

系列文章目录

前言

一、模型评估概述

1、模型评估定义

2、基本概念

3、过拟合、欠拟合

3.1、过拟合

3.2、欠拟合

3.3、防止欠拟合,过拟合的方法

4、偏差、方差

4.1、偏差(biase)

4.2、方差(variance)

4.3、噪声(Noise)

二、评估方法

1、留出法

2、交叉验证法(k折交叉验证)

3、留一法

4、自助法



前言

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

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

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

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


一、模型评估概述

1、模型评估定义

对训练好的模型性能进行评估。

2、基本概念

错误率(error rate):分类错误的样本数/样本总数

精度(accuracy):1-错误率=分类正确的样本数/样本总数

误差(error):学习器(模型)的预测输出与样本真实输出的差异。(误差期望,排除数据集大小的影响)

        训练误差(training error,经验误差,empirical error):学习器在训练集上的误差。

         测试误差(test error):学习器在测试集上的误差。

         泛化误差(generalization error):学习器在未知新样本上的误差。(我们是为了得到泛化误差小的学习器。因为,泛化误差无法测量,因此,通常我们会将测试误差近似等同于泛化误差。)

3、过拟合、欠拟合

3.1、过拟合

模型对于训练数据拟合得太好了。
很可能已经把训练样本自身的一些特点当作所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降。反映到评估指标上,就是模型在训练集上的表现很好,但在测试集和新数据上的表现较差。

(过拟合是机器学习的关键障碍,虽然各类学习算法都必然带有一些针对过拟合的措施;然而,必须认识到过拟合是无法彻底避免的,我们所能做的只是“缓解”,或者说减小其风险。)

3.2、欠拟合

指模型在训练数据上拟合得不好。
反映到评估指标上,是模型在训练和预测时表现都不好的情况。主要原因在于模型的学习能力低下。

3.3、防止欠拟合,过拟合的方法

3.3.1、防止欠拟合

数据

        获得更多的训练数据:更多的样本能够让模型学习到更多更有效的特征,减小噪声的影响。

        添加新特征:当特征不足或者现有特征与样本标签的相关性不强时,模型容易出现欠拟合。

                挖掘“上下文特征”、“ID 类特征”、“组合特征”等新的特征。

                深度学习:因子分解机、梯度提升决策树、Deep-crossing 等都可以成为丰富特征的方法。

模型

        增加模型复杂度:通过增加模型的复杂度可以使模型拥有更强的拟合能力。

                线性模型:添加高次项。

                决策树模型:不采用剪枝手段,不限制叶节点的个数以及树的深度。

                神经网络:增加网络层数或神经元个数。

        减小正则化系数:针对性地减小正则化系数。(后面会说到)

3.3.2、防止过拟合

数据

        获得更多的训练数据:更多的样本能够让模型学习到更多更有效的特征,减小噪声的影响。

                图像分类问题:通过图像的平移、旋转、缩放等方式扩充数据。
                生成式对抗网络:合成大量的新训练数据。

模型

        降低模型复杂度:在数据较少时,模型过于复杂是产生过拟合的主要因素,适当降低模型复杂度可以避免模型拟合过多的采样噪声。
                神经网络:减少网络层数、神经元个数。
                决策树:降低树的深度和叶节点的个数、进行剪枝等。
        正则化方法:给模型的参数加上一定的正则约束,比如将权值的大小加入到损失函数中。常用的惩罚项有 L1 惩罚项和 L2 惩罚项。
        集成学习方法:把多个模型集成在一起,来降低单一模型的过拟合风险。

4、偏差、方差

模型泛化能力:指机器学习算法对未知样本的适应能力。 

通常我们会用过拟合、欠拟合来定性地描述模型是否很好地解决了特定的问题。
从定量的角度来说,可以用模型的偏差(Bias)与方差(Variance)来描述模型的泛化性能,这称为偏差-方差分解(bias-variance decomposition),是解释学习算法泛化性能(即为什么具有这样的性能)的一种重要工具。

这个训练数据集的损失与一般化的数据集的损失之间的差异就叫做泛化误差(generalization error)。而泛化误差可以分解为偏差(Biase)、方差(Variance)和噪声(Noise)

4.1、偏差(biase)

是用所有可能的训练数据集训练出的所有模型的输出的平均值真实模型输出值之间的差异。

4.2、方差(variance)

不同的训练数据集训练出的模型输出值之间的差异。即刻画了数据扰动所造成的影响。(预测值离散程度)

4.3、噪声(Noise)

噪声的存在是学习算法所无法解决的问题,数据的质量决定了学习的上限。假设在数据已经给定的情况下,此时上限已定,我们要做的就是尽可能的接近这个上限。

为了更好地说明偏差与方差的关系,以射击靶心作为例子。

二、评估方法

因为通常通过实验测试来对学习器的泛化误差进行评估并进而做出选择。而上面也说过因为泛化误差无法测量,因此,通常我们会将测试误差近似等同于泛化误差。所以需要将数据集进行划分。

1、留出法

留出法将测试数据集和训练数据集完全分开,采用测试数据集来评估算法模型。

其实就是和数据划分讲的一样。一般训练集S占70%-80%,测试集T占20%-30%。(数据量越大,训练集占比越大)
训练集用于训练算法生成模型。测试集通过模型来预测结果并与已知结果比较,最终通过一些模型评价指标评估算法模型的优劣。

训练集和测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。基于该情况考虑的采样方式称为“分层采样”。

API:

sklearn.model_selection.train_test_split
导入:
from sklearn.model_selection import train_test_split

eg:

from sklearn.model_selection import train_test_split

# 先查看原先数据集的尺寸
print(iris.data.shape)  # 输出 (150, 4)


# 按照 70%训练集 30% 测试集进行划分
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=134)
print(x_train.shape)  # 输出训练集尺寸(105, 4)
print(x_test.shape)  # 输出测试集尺寸(45, 4)

2、交叉验证法(k折交叉验证)

交叉验证法(cross validation)先将数据集 D 划分为 k 个大小相似的互斥子集,每次用k-1个子集的并集做训练集,余下那个做测试集,最终k次训练和测试,最终返回的是k个测试结果的均值。

 【当不知道如何选择分离数据集的方法时,请选择 K 折交叉验证来分离数据集;】
【当不知道如何设定 K 值时,请将 K 值设为 10。】

API:

sklearn.model_selection.cross_val_score
导入
from sklearn.model_selection import cross_val_score

实例:

from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier

score = cross_val_score(DecisionTreeClassifier(), iris.data, iris.target, cv=10)
print("%.3f%% (%.3f)" % (score.mean() * 100, score.std() * 100)) 
print(score)

3、留一法

留一法(Leave-One-Out,简称 LOO),假定数据集 D 中包含 m 个样本,若令 k = m,则得到交叉验证法的一个特例,即留一法,又被称为“弃一交叉验证”。

k=m,每个样本就是一个子集。

缺点:数据量较大时对算力要求较高

实例:

from sklearn.model_selection import LeaveOneOut
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier

loo = LeaveOneOut()
score = cross_val_score(DecisionTreeClassifier(), iris.data, iris.target, cv=loo)
print("%.3f%% (%.3f)" % (score.mean() * 100, score.std() * 100))  
print(score)

 

4、自助法

自助法(bootstraping)直接以自助采样法(bootstrap sampling)为基础。

D为基础,随机抽取放回抽样m次,产生D',
m次采样中始终不被采到的概率是(1-1/m)^m,取极限得到0.368
D'做训练集,D\D'(D-D')做测试集,即有36.8%做测试集

也可以如下描述:给定包含 m 个样本的数据集 D,对其进行采样产生数据集 D’:

每次随机从 D 中挑选一个样本,将其拷贝放入 D’;
然后再将该样本放回初始数据集 D 中,使得该样本在下次采样时仍有可能被采到,其实就是有放回地采样;
该过程重复执行 m 次后,就得到包含 m 个样本的数据集 D’。

这样的测试结果称为“包外估计”。

适用于:数据集较小,难以划分的时候。

缺点:改变初始数据集分布,会引入估计偏差

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

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

相关文章

阿里云PolarDB数据库不同配置租用价格表

阿里云数据库PolarDB租用价格表,云数据库PolarDB MySQL版2核4GB(通用)、2个节点、60 GB存储空间55元5天,云数据库 PolarDB 分布式版标准版2核16G(通用)57.6元3天,阿里云百科aliyunbaike.com分享…

全国计算机等级考试| 二级Python | 真题及解析(12)

一、选择题 1.在编写python程序时缩进的作用是()。 A.让程序更美观 B.只在for循环中使用 C.只在if语句中使用 D.用来界定代码块 2.已知列表list1=[8,22,34,9,…

【番外】【Airsim in Windows ROS in WSL2-Ubuntu20.04】环境配置大全

【番外】【Airsim in Windows &ROS in WSL2-Ubuntu20.04】环境配置大全 【前言(可省略不看)】1.在windows上面部署好UE4AirSim联合仿真环境2.在windows上面部署wsl2系统以及在wsl2上面部署ubuntu系统3.安装好ubuntu系统之后,目前只能在命…

代码随想录-刷题第四十六天

70. 爬楼梯(进阶) 题目链接:70. 爬楼梯 改为:一步一个台阶,两个台阶,三个台阶,…,直到 m 个台阶。问有多少种不同的方法可以爬到楼顶呢? 思路:本题是一个斐波…

国民技术与stm32 ADC采集

一、国民技术芯片ADC采集配置 /* PA1 ADC1_IN2 默认功能 DMA 通道1由ADC1触发 外部晶振16 系统时钟144M AHB 2分频 HCLK72M HCLK 经APB1 4分频 pclk1 18MHCLK/4 HCLK 经APB2 4分频 pclk2 18MHCLK/4ADCCLK不得超过14M*/ void DMA_ADC_Config(void) {ADC_InitType ADC_In…

Unity报错:InvalidOperationException: Insecure connection not allowed的解决方法

问题描述 在导入Steam VR 插件后报错&#xff1a; InvalidOperationException: Insecure connection not allowed UnityEngine.Networking.UnityWebRequest.SendWebRequest () (at <4139bb31c03640e7b650db6ec39d5754>:0) UnityEngine.WWW..ctor (System.String url) (…

大模型上下文长度的超强扩展:从LongLora到LongQLora

前言 本文一开始是《七月论文审稿GPT第2版&#xff1a;从Meta Nougat、GPT4审稿到Mistral、LongLora Llama》中4.3节的内容&#xff0c;但考虑到 一方面&#xff0c;LongLora的实用性较高二方面&#xff0c;为了把LongLora和LongQLora更好的写清楚&#xff0c;而不至于受篇幅…

[数据结构 C++] AVL树的模拟实现

文章目录 1、AVL树1.1 AVL树的概念 2、AVL树节点的定义3、AVL树的插入和旋转3.1 左单旋左旋代码实现 3.2 右单旋右旋代码实现 3.3 右左双旋右左双旋的代码实现 3.4 左右双旋左右双旋的代码实现 3.5 insert接口实现 4、判断是否为AVL树判断AVL树的代码实现 5、AVL树的性能 问题引…

Maven Resources Compiler: Maven project configuration required for module

Maven Resources Compiler: Maven project configuration required for module ‘cc-pdf’ isn’t available. Compilation of Maven projects is supported only if external build is started from an IDE. 报错原因是&#xff0c;我在git建立一个新空仓库&#xff0c;然后把…

C++线程池的原理(画图)及简单实现+例子(加深理解)

1.为什么线程池会出现&#xff0c;解决什么问题&#xff1f; C线程池&#xff08;ThreadPool&#xff09;的出现主要是为了解决以下几个问题&#xff1a; 1.性能&#xff1a;创建和销毁线程都是相对昂贵的操作&#xff0c;特别是在高并发场景下&#xff0c;频繁地创建和销毁线…

Linux下误删除后的恢复操作测试之extundelete工具使用

一、工具介绍 extundelete命令的功能可用于系统删除文件的恢复。在使用前&#xff0c;需要先将要恢复的分区卸载&#xff0c;以防数据被意外覆盖。 语法格式&#xff1a;extundelete [参数] 文件或目录名 常用参数&#xff1a; --after 只恢复指定时间后被删除的文件 --bef…

Linux学习(9)——RAID与服务器的常见故障

目录 一、服务器常见故障 1、系统不停重启进入不了系统 2、卡在开机界面右下角有fA B2 H8 3、系统安装不上 4、如何进入服务器的bios 5、一般进入阵列卡的快捷键 6.网络不通 7.硬盘不识别 二、RAID相关知识 1、RAID的概念 2、RAID功能实现 3、RAID实现的方式 三、…

机器学习笔记 - 偏最小二乘回归 (PLSR)

一、偏最小二乘回归:简介 PLS 方法构成了一个非常大的方法族。虽然回归方法可能是最流行的 PLS 技术,但它绝不是唯一的一种。即使在 PLSR 中,也有多种不同的算法可以获得解决方案。PLS 回归主要由斯堪的纳维亚化学计量学家 Svante Wold 和 Harald Martens 在 20 世纪 80 年代…

海外服务器2核2G/4G/8G和4核8G配置16M公网带宽优惠价格表

腾讯云海外服务器租用优惠价格表&#xff0c;2核2G10M带宽、2核4G12M、2核8G14M、4核8G16M配置可选&#xff0c;可以选择Linux操作系统或Linux系统&#xff0c;相比较Linux服务器价格要更优惠一些&#xff0c;腾讯云服务器网txyfwq.com分享腾讯云国外服务器租用配置报价&#x…

ByteTrack算法流程的简单示例

ByteTrack ByteTrack算法是将t帧检测出来的检测框集合 D t {\mathcal{D}_{t}} Dt​ 和t-1帧预测轨迹集合 T ~ t − 1 {\tilde{T}_{t-1}} T~t−1​ 进行匹配关联得到t帧的轨迹集合 T t {T_{t}} Tt​。 首先使用检测器检测t帧的图像得到检测框集合 D t {\mathcal{D}_{t}} …

手机技巧:分享10个vivo手机实用小技巧技巧,值得收藏

目录 1. 快速切换应用 2、智能助手Jovi 3. 轻按唤醒屏幕 4. 快速启动相机 5. 分屏功能 6. 手势操作 7. 一键清理 8.忘记密码 9.玩游戏耗电快 10.手机丢失后该怎么办 1. 快速切换应用 向右或向左滑动底部的虚拟按键即可。 2、智能助手Jovi vivo手机自带智能助手Jovi…

【Java EE初阶八】多线程案例(计时器模型)

1. java标准库的计时器 1.1 关于计时器 计时器类似闹钟&#xff0c;有定时的功能&#xff0c;其主要是到时间就会执行某一操作&#xff0c;即可以指定时间&#xff0c;去执行某一逻辑&#xff08;某一代码&#xff09;。 1.2 计时器的简单介绍 在java标准库中&#xff0c;提供…

CMake入门教程【核心篇】添加应用程序(add_executable)

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1. 概述2. 使用方法2…

【计算机视觉】常用图像数据集

图像数据集 模型需要好的数据才能训练出结果&#xff0c;本文总结了机器学习图像方面常用数据集。 MNIST 机器学习入门的标准数据集&#xff08;Hello World!&#xff09;&#xff0c;10个类别&#xff0c;0-9 手写数字。包含了60,000 张 28x28 的二值训练图像&#xff0c;10…

计算机网络(2)

计算机网络&#xff08;2&#xff09; 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 计算机网络和因特网&#xff08;2&#xff09;分组交换网中的时延、丢包和吞吐量时延丢包吞吐量总结 协议层次及其服务模型模型类型OSI模型分析TCP/IP模型分析 追溯历史 小程一言 我…