偏差(bias)和方差(variance)及其与K折交叉验证的关系

时间:2024-08-02 16:38:14

先上图:

偏差(bias)和方差(variance)及其与K折交叉验证的关系

泛化误差可表示为偏差、方差和噪声之和

偏差(bias):学习算法的期望预测与真实结果(train set)的偏离程度(平均预测值与真实值之差),刻画算法本身的拟合能力;

方差(variance):使用同规模的不同训练集进行训练时带来的性能变化(预测值与平均预测值之差的平方的期望),刻画数据扰动带来的影响;

但是这两者其实是有冲突的,这称为bias-variance trade-off。给定一个任务,我们可以控制算法的训练程度(如决策树的层数)。在训练程度较低时,拟合能力较差,因此训练数据的扰动不会让性能有显著变化,此时偏差主导泛化错误率;在训练程度较高时,拟合能力很强,以至于训练数据自身的一些特性(噪音)都会被拟合,从而产生过拟合问题,训练数据的轻微扰动都会令模型产生很大的变化,此时方差主导泛化错误率。这个我的理解也是欠拟合和过拟合之间的冲突。

举一个例子,一次打靶实验,目标是为了打到10环,但是实际上只打到了7环,那么这里面的Error就是3。具体分析打到7环的原因,可能有两方面:一是瞄准出了问题,比如实际上射击瞄准的是9环而不是10环;二是枪本身的稳定性有问题,虽然瞄准的是9环,但是只打到了7环。那么在上面一次射击实验中,Bias就是1,反应的是模型期望与真实目标的差距,而在这次试验中,由于Variance所带来的误差就是2,即虽然瞄准的是9环,但由于本身模型缺乏稳定性,造成了实际结果与模型期望之间的差距。

cross-validation,它把training set拿一部分出来验证,k-fold validation的目的就是通过对k次validation的误差求平均、观察它们的波动,来尽量避免对某个特定数据集的验证导致的过度拟合。专业术语来说,我们的目标是用CV得到的error来估计testing set的error,而我们希望这一估计比较准、波动小,也就是具有较小的bias(此处反映平均估计误差与真实误差的偏离)与variance(此处反映估计误差与真实误差的波动程度),使得该估计很准确而且很稳定。然而这时不可能的。k很大的时候使得cv的test error 估计的bias很小,variance很大。从另一个角度理解:模型的bias是可以直接建模的,只需要保证模型在训练样本上训练误差最小就可以保证bias比较小,而要达到这个目的,就必须是用所有数据一起训练,才能达到模型的最优解。因此,k-fold Cross Validation的目标函数破坏了前面的情形,所以模型的Bias一般要会增大。

参考: 链接:https://www.zhihu.com/question/27068705/answer/35151681

         《机器学习》周志华