前言
在机器学习中,如果我们选择不同的模型,或者使用不同的数据集来训练模型,那么我们训练出的模型在测试集上的误差一般也是不同的。这个误差难以避免,而越复杂的模型一般也不会让误差更小。那我们本篇文章探讨的就是误差的来源,偏差(bias)和方差(variance),以及在后面会简单介绍如何据此选择一个合适的模型。
本篇文章参考自李宏毅老师的机器学习课程,附课程链接
李宏毅2020机器学习深度学习
感谢李宏毅老师!
知道error的来源,才能更高效的improve我们的model啊!
偏差和方差
首先我们都知道偏差表示偏离真实值的程度,方差表示的是一组数据的差异程度
附一张机器学习中经典的图
记真实分布函数为
f
^
\hat{f}
f^,预测分布函数为
f
∗
f^*
f∗,预测值的平均值为
f
ˉ
\bar{f}
fˉ
则我们能很清楚的看到Bias是
f
ˉ
\bar{f}
fˉ与
f
^
\hat{f}
f^的直线距离,而Variance为每次
f
∗
f^*
f∗与
f
ˉ
\bar{f}
fˉ的直线距离
由于训练数据不同,我们会得到不同的模型
假设现在有100组数据,对于选择不同复杂程度的模型,训练出的结果更是大相径庭
Variance
对于方差来说,我们可以看到简单的模型对每组数据训练出来的模型差异较小,即方差相对较低。而对于复杂模型,不同数据训练出的模型差异较大,即方差相对较大。
Bias
如果error主要来自方差的话,那说明我们训练的模型是过拟合的
如果error主要来自偏差的话,那说明我们训练的模型是欠拟合的
结论
如果模型不能很好的不能很好的适配训练样本,那就说明该模型偏差比较大,也就是欠拟合,Underfitting
如果模型可以较好的适配训练数据,但再测试数据上有较大的误差,那说明该模型可能有大的方差,也就是过拟合,Overfitting
优化方法
What to do with large bias?
对于存在偏差,可能需要我们重新设计模型
- 增加更多的特征来作为输入
- 选择更为复杂的模型
What to do with large variance?
- 用更多的数据来训练模型
机器学习的四要素是数据、模型、学习准则、优化算法。
有时大量有效的训练数据比算法本身更重要,但要获取大量有效数据本身又是一个挑战,这里暂不赘述。 - Regularization 正则化
所谓正则话就是训练模型时加入正则化项,使训练出的模型更为平滑,常见的有L1正则化,L2正则化。下图的例子就是随着正则化力度的增加,模型的变的更加平滑。
- 集成模型
把不同数据集上得到的模型做一个平均,对于很多变量,它们的平均对应的方差一定是小于自身的方差的。
模型选择
那么我们该如何选择模型呢?
因为我们有太多的模型可以选择,太多的参数可以调。
那我们希望可以找到一个可以同时权衡偏差和方差(trade-off bias and variance)的模型,并且这个模型的偏差和方差都尽可能小
直接把训练数据划分为训练集和测试集(不推荐)
如果我们把样本数据划分为训练集和测试集,直觉来看可能会觉得如果练出来的模型在测试集上的error越小,那这个模型就会越好。但是我们已有的测试集存在的不可比避免的偏差,所以这个error往往在真实测试集中更大 (所谓真实数据集就比如我们模型上线后面对的真实用户产生的数据集)。这里我们记真实测试集为real testing set 或 private testing set。
交叉验证
将训练集分为两部分:训练集(Testing Set)和 验证集 (Validation Set)
在训练集上训练模型,选择在验证集上错误最小的模型
N折交叉验证
那如果我们的数据本来就很稀疏的话,进一步的划分会使测试集更稀疏。
这时候就可以使用交叉验证的方法:
将训练集分为 S组,每次选择S-1组作为训练集,剩下的1组作为验证集,取验证集上平均性能最好的一组
结语
偏差和方差是机器学习中最基本的知识点,本篇文章只从偏差和方差本身代表的含义入手来进行分析探讨其在机器学习中的相关意义。想要更深入理解偏差和方差在机器学习中的意义,还需读者了解一些数学知识,最好是自行推导下相关的公式,如期望风险R(f) = ( b i a s ) 2 (bias)^2 (bias)2 + variance + ε。后面有机会笔者也会再介绍一些,希望大家学习顺利!