转:交叉验证和bias-tradeoff的权衡

机器学习问题中总是讲到训练数据集和测试数据集,但在实际情况中,很多时候直到项目部署以后,才会得到真正的测试集。所以本质上讲,模型的学习使用的都是训练数据,所以模型对于未知数据的效果到底如何,并没有方法得到一个准确的指示。解决这个问题的一个较为简单的方法是hold-out方法。大致过程如下:

1)将可用数据集的一部分拿出来,这部分数据不参与模型的学习与训练过程

2)用剩余的数据集训练模型

3)将保留的这部分数据集用作测试集,对模型效果进行评估

4)如果对模型效果不错,就用全部的数据对模型进行训练

5)部署模型

​这就是hold-out方法的大致过程,其中,采取何种策略选取保留的数据,1)到3)步迭代多少次,决定了通过该方法得到的模型其准确度如何。这个过程涉及方差和偏差的权衡,这里的方差和偏差都是针对测试数据集而言的。

1 The Validation Set Approach

将一般的数据用于训练模型,一般的数据用于测试模型。得到模型的误差估计后,可以再用之前用于测试的数据进行训练,之前训练的数据用于测试。这样,就会得到对于模型性能的两次评估情况。

这个方法存在两个主要缺点。第一个,只会得到两个对于模型的评估情况,虽然比没有测试集好一些,但仍有很大提升空间。第二个,保留一半的数据用于测试,使得偏差会较大。用一般数据集训练得到的模型并不能够和用全部数据集训练得到的模型相比。​

2 ​Leave-one-out-cross validation(LOOCV)

这种方法将1)到3)步重复进行多次,每次迭代时,只有一条样本数据被拿出来,剩余数据用于对模型进行训练。采用这种方法,训练+测试进行的次数可以与数据集中样本数目一样多。由于每一条样本数据既能够作为训练数据,又能够作为测试数据(在不同的迭代中),这种方法称为交叉验证。该方法的优点是测试过程中的固有偏差(bias)几乎可以忽略不计:每次训练时几乎使用了全部数据,得到的模型和实际情况非常接近。

​不过缺点是,测试中的方差会非常明显。每次只有一条样本数据用于测试,the variance in the estimates of your model’s error would be pretty high!(特别是当数据集中存在很多离群点时)。同时该方法的计算量也很大,模型的训练/测试次数和数据集中的样本数一样多,当数据集很大时,这种计算量会造成麻烦。

​通过上述讨论,理想的测试过程是:

1)最小化测试偏差

用于训练的数据集要足够大,就是说每次hold-out时,不希望保留太多数据用于测试,这是为了保证用训练数据学习得到的模型,能够和最终用全部数据训练得到的模型尽可能相近似。

2)最小化训练方差

​用于测试的数据集样本量应当是合理的,如果测试集样本量太小,则测试框架对于模型误差的估计就变得不可信,特别是当测试集不巧选取的是几个离群点。

3)训练+测试的过程应当进行多次,保证模型对于误差的估计能够​尽可能低。

由于LOOCV存在的一些问题,一种更好的思路是k-fold cross-validation

3 k-fold Cross-Validation

​这种思路能够使得模型在方差-偏差之间取得更好的权衡,并且能够保证模型自身具有较低的方差和偏差。过程大致如下:

1)将数据集随机的分成k个部分

2)迭代k次下列过程:

     a.选择k个部分中的一个(当然要选择之前没选过的部分)

     b.用剩余的k-1个部分训练模型

     c.将a中选出的部分用于测试,得到一个​对模型误差的估计(一共会得到k个)


如果数值k选择的合理,测试过程就能够对模型性能进行很好的估计。选择的值太小或者太小,会造成偏差、方差的波动,使得这些值太大。通常选择5-10作为k的值。

那如何使用k-fold来评估模型的方差-偏差特征?​

利用k-fold时,会得到k个对于模型误差的估计值,e1,e2,...,ek。由于ei是误差估计,理想状况下当然希望它能够为零。

为了检测模型的偏差,可以计算ei的平均值。如果平均值较低,说明模型的平均误差很低,​即模型对于数据的理解是足够准确的。

​为了检测模型的方差,可以计算ei的标准偏差,如果这个值很高,说明当训练数据变化时,模型的性能会有较大变化,而这个是我们不希望看到的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值