当我们想要找一个函数来做一件事情,比如说我想找一个函数来预测一只宝可梦进化后的数值,那么我们就需要先假设一个函数f*,这个f需要我们输入这个宝可梦的种类、现有的数值等等,然后我们用许多宝可梦的数据来training这个函数。
有了好多f,但我们发现,这个函数在训练集测试集下的表现并不好,于是我们想到,可能是我们假设的这个函数公式太简单了,所以我们把函数变复杂(比如说加高幂次项)。
但是这里会出现一个有趣的现象,那就是我们的函数在训练集下的error会变大,这就是所谓的“过拟合”。什么是过拟合?简而言之就是,你的函数model变复杂了,但是你的训练结果却变差了。这个原因是因为方差变大了而造成的。
而另一个结果就是欠拟合。当你的偏移量bias很大时,你的函数可能在训练集下的表现会很好,但是到了使用测试集时,你的模型表现就会很差。而且,欠拟合的模型,无论你怎么添加训练数据,它都不会变好。
这里是李宏毅老师ppt的一张图,形象地说明了欠拟合和过拟合的区别。
可以看出,undetfitting也就是欠拟合,虽然variance很小,但是它根本就和靶心无关,因为Bias太大了,所以你无论怎么训练,让点变得密集,也无济于事。而右边的overfiting,因为variance很大,所以点很分散,但是只要训练数据增加,那么点变得密集了,它也可以达到很好的效果。
综上所述,overfitting和underfitting都是我们不愿意看到的两个现象,但是如果比烂的话,underfitting要更烂一些,因为它基本上属于没救了,而overfitting至少可以通过增加训练数据来补救一下。
通过过拟合和欠拟合,我们也可以看出bias和variance的区别,当你bias很大时,你的variance再小也没有用,因为如上图,偏离靶心时点再密集也无济于事;相反,如果你的bias很小,variance很大时,只要你想办法让点密集一下,那么这个model依然可以变得很好。
当然,在现实情况下,bias和variance并不能兼得,如何调节二者从而达到最好的效果,就要实践出真知了。
关于过拟合和欠拟合
最新推荐文章于 2024-07-06 14:11:57 发布