机器学习模型的评估方法

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。

目录

一、模型评估依据——测试集

二、留出法

1、方法描述

2、注意点和实际做法

3、问题和其对应的通用解决做法

4、python具体实现

三、交叉验证法(k倍/折交叉验证)

1、方法描述

2、注意点和实际做法

3、交叉验证法特例——留一法

4、python实现

四、自助法

1、方法描述

2、优缺点


一、模型评估依据——测试集

通常我们使用测试集来测试我们的模型对新样本的判别能力,并且以测试误差作为泛化误差的近似。通常我们尽可能的让测试集中的测试样本不在训练集中出现。

一般来说,测试集至少含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 = D_{1}\cup D_{2}\cup...\cup D_{k}D_{i}\cap D_{j} = \oslash (i\neq j)。并且每个子集都尽可能地保持数据分布的一致性——通过从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次采样中始终不被采到的概率是(1-1/m)^{m},则\lim_{m\rightarrow \propto }(1-1/m)^{m} = 1/e\approx 0.368

我们把D‘作为训练集,D-D’作为测试集。

2、优缺点

(1)优点:

  • 在数据集小,难以有效划分训练/测试集时效果很好
  • 能从数据集D中产生多个不同的训练集

(2)缺点:

自助法产生的数据集改变了原数据集的分布,可能会引入估计偏差

(因此,该方法比较少用)


欢迎大家在评论区批评指正,谢谢大家~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tt丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值