当前位置:网站首页>机器学习模型的评估方法
机器学习模型的评估方法
2022-07-17 12:38:00 【tt丫】
入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。
目录
一、模型评估依据——测试集
通常我们使用测试集来测试我们的模型对新样本的判别能力,并且以测试误差作为泛化误差的近似。通常我们尽可能的让测试集中的测试样本不在训练集中出现。
一般来说,测试集至少含30个样例。
对于我们手上一个包含m个样例的数据集D,我们有以下几个评估方法来产生训练集S和测试集T。
考虑点:评估结果要有高稳定性,可靠性和保真性。
二、留出法
1、方法描述
直接将数据集D划分为两个互斥的集合——一个作为训练集S,另一个作为测试集T。
2、注意点和实际做法
(1)在划分的过程中要尽可能保持数据分布的一致性,避免因数据划分过程中引入的额外偏差而对最终结果产生影响。
(比如说在分类任务中保持样本的类别比例相似——举个二分类的例子:S的正反例占比各50%,那么T的比例应与之相似)
(2)即便在给定训练集和测试集的样本比例后,仍存在多种划分方式对初始数据集D进行分割。不同的划分方法会产生不同的训练集和测试集,模型评估结果也会因此改变。
所以:
单次使用留出法得到的估计结果往往不够可靠稳定。
一般要采用若干次随机划分,重复进行试验评估后取均值作为留出法的评估结果
3、问题和其对应的通用解决做法
(1)问题描述
若训练集较大,那么训练出来的模型更接近于直接拿数据集D训练得出的模型,并且测试集T比较小,评估结果可能不太稳定可靠;
若让测试集T大些,那么训练集和数据集的差别更大了,训练出来的模型与直接拿数据集D训练得出的模型相差较大,从而降低了评估结果的保真性(预测结果和真实结果的拟合程度)。
(2)做法:
没有完美解决方案,一般情况下将2/3到4/5的样本用于训练,其余的用于测试。
4、python具体实现
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=1)
三、交叉验证法(k倍/折交叉验证)
1、方法描述
先将数据集D分为k个大小相似的互斥子集,即,
。并且每个子集都尽可能地保持数据分布的一致性——通过从D中分层采样得到。
然后每次使用k-1个子集的并集作为训练集,剩下的作为测试集,这样就有k组训练集+测试集,可以进行k次训练,最终的评估结果就是着k次结果的均值。
2、注意点和实际做法
(1)该方法的评估结果的稳定性和保真性与k密切相关。k最常取值为10。
(2)与留出法类似:存在多种划分方式对初始数据集D进行分割。不同的划分方法会产生不同的训练集和测试集,模型评估结果也会因此改变。
因此:
k折交叉验证通常随即使用不同的划分重复p次,最终评估结果取均值。即最终进行了p*k次训练+测试。
常见的有10次10折交叉验证。
3、交叉验证法特例——留一法
令k=m(数据集D的样例数),它不受随机样本划分方式的影响。
优点:
每一回合中几乎所有的样本皆用于训练模型,因此最接近原始样本的分布,这样评估所得的结果比较可靠;
实验没有随机因素,整个过程是可重复的。
缺点:
计算成本高。—— 当m非常大时,计算耗时。除非每次训练分类器得到模型的速度很快,或是可以用并行化计算减少计算所需的时间。
4、python实现
以iris数据和逻辑回归为例子
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score,KFold
from sklearn.linear_model import LogisticRegression
iris=load_iris()
X=iris.data
Y=iris.target
logreg=LogisticRegression()
kf=KFold(n_splits=10)
score=cross_val_score(logreg,X,Y,cv=kf)
四、自助法
1、方法描述
我们进行m次可重复地在D中进行随机抽取一个样本出来,组成新的数据集D‘(有一部分样本可能会在D’中反复出现,而有些不存在)
样本在m次采样中始终不被采到的概率是,则
我们把D‘作为训练集,D-D’作为测试集。
2、优缺点
(1)优点:
- 在数据集小,难以有效划分训练/测试集时效果很好
- 能从数据集D中产生多个不同的训练集
(2)缺点:
自助法产生的数据集改变了原数据集的分布,可能会引入估计偏差
(因此,该方法比较少用)
欢迎大家在评论区批评指正,谢谢大家~
边栏推荐
- Through middle order traversal and pre order traversal, the subsequent traversal will always build a binary tree
- Complete knapsack problem code template
- How to realize the association between interfaces in JMeter?
- Convert excel table to word table, and keep the formula in Excel table unchanged
- 十分钟从 PyTorch 转 MXNet(转)
- The R language uses the plot function in the native package (basic import package, graphics) to visualize the scatter plot
- AutoJs学习-动态解密
- [Niuke swipe questions] / *c language realizes left-hand rotation of strings*/
- 【牛客刷题】/*C语言实现字符串左旋*/
- Lvi-sam: laser IMU camera tight coupling mapping
猜你喜欢
KunlunBase 线上Meetup等您来~
2022年全国最新消防设施操作员(中级消防设施操作员)模拟试题及答案
2022 Hunan secondary vocational group "Cyberspace Security" packet analysis infiltration Pacpng parsing (super detailed)
机械臂速成小指南(零点五):机械臂相关资源
为什么磁力变速齿轮会反转?
【牛客刷题】/*C语言实现字符串左旋*/
C语言自定义类型详解
如何使用SVG制作沿任意路径排布的文字效果
Quick completion guide of manipulator (zero five): resources related to manipulator
Lvi-sam: laser IMU camera tight coupling mapping
随机推荐
Bidirectional NAT Technology
Through middle order traversal and pre order traversal, the subsequent traversal will always build a binary tree
华为机试:连续出牌数量
mysql不能启动了?相关组件缺失?系统升级?组件不匹配?开始重装mysql
Zhongke Panyun - Cyberspace Security packet capture topic b.pcap
SAP AppGyver 简介
SAP AppGyver 的 Universal Theme System 使用介绍
[csp-j 2021] summary
自动化之图形界面库pyautogui
SAP S4 Material Management 库存模块 MARD 数据库表读取技术细节介绍
架构实战营|模块7
HCIA 静态综合实验报告 7.10
笔记本键盘失灵解决办法
Effectively understand FreeSQL wheredynamicfilter and deeply understand the original design intention [.net orm]
2022年全国最新消防设施操作员(中级消防设施操作员)模拟试题及答案
内核态和用户态
二叉树的概念及三种遍历方法(C语言)
C# SerialPort配置和属性了解
Analysis and solution of application jar package conflict in yarn environment
通过中序遍历和前序遍历,后续遍历来构建二叉树