误差引起有两个方面:Bias 和 Variance
Bias
为什么称为bias?
顾名思义,bias就是因为人的偏见而忽略了data中的模式,在training的过程中,一味重复地做同样的事情(其实就是因为bias导致无法透彻学习data),因此无法捕获数据中的全部特征。这种情况下,bias导致了模型复杂度不够。
特点:
- Bias越高,越容易欠拟合
- 在训练集中的loss较高,而测试精度还说的过去
原因:
特征选取不足,只使用了少量特征,在少量特征上产生了偏见(bias)
例子:
- 我们的分类任务是根据物体的形状和颜色进行分类识别,例如识别出彩蛋,但是我们的模型由于存在Bias,只能在颜色层面上进行识别(工作),那么我们的模型就会将“彩虹”识别为“彩蛋”,因为他们在色彩上很相似,都是五颜六色的。
2. 举一个连续数据的例子,比如我们的数据是由多项式产生的,而我们的模型却是一个线性模型,因此再给多少数据,我们的模型也不可能“挖掘”出数据中多项式关系,因为我们的模型存在线性的Bias
- 具体拿 KNN 算法来说明bias具体指什么。在KNN中在3个方面存在bias(或者说hyperthesis):1)距离函数;2)平滑方式; 3) 特征选择。
3.1 距离函数的选取。需要确定合适的距离函数,不同的距离函数如欧式距离、曼哈顿距离,他们有自身的领域假设,在某些问题上很适用,在其他领域问题上就不是很适用。因此,该领域假设也被常称为“领域知识”(说白了就是bias :D,再直白一点就是超参选择、算法选择的问题)。PS:针对特定领域的问题,一定存在一个最优的距离函数!
3.2 平滑方式的选择 (一般采用average假设)。
3.3 特征选择。一般的KNN认为不同特征的重要程度是一致的
简而言之,Bias就是说我们的模型无能,复杂度不够,基础不牢固,在“根”上就无法进行建模,需要增加模型复杂度(换模型)
Variance
为什么称为Variance?
方差指的是对测试数据预测产生的方差?(Here variance is a measure of how much the predictions vary for any given test sample.)高的方差即模型过度关注训练数据,缺少了对测试数据的bias,而没有很好的泛化性能,对没见过的数据不能做出很好的预测。就是我们学习过程中无法“举一反三”,学知识学的太死板。
特点:
- Variance越高,越容易过拟合。
- 在训练集中的loss较低,而测试精度较差
原因:
- 特征选取太多
- 并且参数调节的过于细致,在训练集上表现太完美,遇到没见过的(测试数据)就嗝屁。
解决办法:
1.增加训练数据。
2.降低模型复杂度。
理想的模型
因此,同时减小bias和variance,达到二者的权衡,是一个理想的目标。
一个重要的途径,是如何选取有效的特征,这会极大影响 偏置-方差 困境。
维度诅咒
特征增加时,必须指数级别地增加训练数据,才能达到更好地泛化性能。
过拟合在不同模型中的体现
- 决策树发生过拟合往往是随着树的深度加深而产生,也就是模型结构发生了变化。
- DNN发生过拟合,往往是随着训练次数增多而发生。也就是说!-即便是模型结构不发生变化,也会产生过拟合,因为模型的权重发生了变化。