1、背景
在机器学习过程中,可能出现预测结果偏差很大的情况,遇到这种情况该如何处理呢?
可以选择的方式很多,下面就是常见的方式:
- 获取更多样本。很多情况下,会意味着耗费更多的时间。
- 选择较少的特征。
- 选择较多的特征。
- 增加多项式特征。
- 增大正则化参数 λ \lambda λ。
- 减少正则化参数 λ \lambda λ。
那究竟该选择哪种方式进行优化呢?
如果不明就里,盲目的选择,会造成事倍功半的效果,可以采用“诊断法”,确定问题的原因之后再针对性的选择优化方法,才能达到事半功倍的效果。
2、交叉验证
交叉验证法是非常有效的一种“诊断”方式。
先把数据集合打乱顺序,然后把整个数据集合按照60%、20%、20%的比例分成训练集、验证集、测试集3部分。通过验证集来对训练集的模型进行验证,看误差值是否在可接受范围内;通过测试集来观察模型的泛化能力如何。
除了通过误差来衡量模型效果外,在分类问题中,还可以通过错误率来观察模型的好坏:错误率越高则模型效果越差。
3、偏差、方差
偏差指的是模型误差很大,即“欠拟合”;
方差指的是模型在训练集上效果非常好,但是在新样本上效果很差,即“过拟合”。
4、多项式次数选择
4.1 选择过程
多项式次数选择,是影响评估函数的重要部分,我们使用d来表示。
多项式的次数,指的就是特征的几次方,如下图所示,
x
x
x代表次数为1,
x
2
x^2
x2代表次数为2,
x
n
x^n
xn代表次数为n。
我们使用交叉验证方式来获取最合适的d,获取过程为:
- 假设d的取值范围是(1,10)。
- 在训练集上计算多项式次数为1的评估函数,获取最优 θ \theta θ。
- 把获得的评估函数代入到验证集,计算出误差值。
- 在训练集上计算多项式次数为2的评估函数,获取最优 θ \theta θ。
- 把获得的评估函数代入到验证集,计算出误差值。
- …
- 一直重复上述步骤,直到把d的各种情况在验证集上的误差都计算完成,然后取误差最小的d作为最终的d。
4.2 变化曲线
我们使用
J
t
r
a
i
n
(
θ
)
J_{train}(\theta)
Jtrain(θ)标识训练集的误差;使用
J
C
V
(
θ
)
J_{CV}(\theta)
JCV(θ)表示验证集的误差;使用d标识多项式的次数。
则误差随d的变化曲线如下图所示:
总结:
- d接近于0的时候,评估函数类似一条直线,可以想象预测结果与世界结果的误差是非常大的,如上图左上角部分所示。
- d变大, J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)效果拟合的越来越好,但是在验证集上的表现则越来越差,如上图右半部分所示。
- 观察d的趋势,当d有小变大时,偏差变小;当d由大变小时,方差变小。
5、正则化参数 λ \lambda λ的选择
正则化参数 λ \lambda λ的选择步骤,与d的选择步骤是一样的,不再赘述,下面看看正则化参数的变化曲线图。
我们知道, λ \lambda λ影响的是 θ \theta θ的大小, λ \lambda λ与 θ \theta θ成反比: λ \lambda λ越大则 θ \theta θ越小, θ \theta θ越小,则对应的特征值的影响越小,评估函数就越趋近于一条直线。
比如评估函数为 h θ ( x ) = θ 0 + θ 1 ∗ x 1 h_{\theta}(x)=\theta_0+\theta_1*x_1 hθ(x)=θ0+θ1∗x1,如果 θ 1 \theta_1 θ1趋近于0的话,则 h θ ( x ) h_{\theta}(x) hθ(x)趋近于一条直线。
所以 λ \lambda λ的变化曲线为:
总结:
- λ \lambda λ较小时,属于高方差。
- λ \lambda λ较大时,属于高偏差。
- λ \lambda λ由小变大时,有助于缓解高方差。
- λ \lambda λ由大变小时,有助于缓解高偏差。
6、学习曲线
学习曲线指的是样本数量对偏差、方差的影响。
先看一个正常模型下,样本数量的变化的曲线情况:
如上图所示,随着训练样本的增加,模型的效果会越来越好。
模型为高偏差的情况:
高偏差的情况下,模型在训练集上的拟合效果很差,随着样本的增加,验证集和训练集的效果越来越接近(都很差),所以这种情况下,增加样本数量对于优化算法没啥效果。
模型为高方差的情况:
高方差情况下,训练集的集合效果非常好,而验证集的效果就差很多了,但是随着训练集样本数量的增加,得出的模型在验证集上的效果也会变好,所以高方差情况下,增加样本数量有助于改善算法。
7、总结
文章开头提到过6中优化算法的方法,经过上面的分析,可以发现当算法处于偏差、方差时,不同的优化方法的效果是不一样的:
- 获取更多样本。很多情况下,会意味着耗费更多的时间。(有助于降低方差)
- 选择较少的特征。(有助于降低方差)
- 选择较多的特征。(有助于降低偏差)
- 增加多项式特征。(有助于降低偏差)
- 增大正则化参数 λ \lambda λ。(有助于降低方差)
- 减少正则化参数 λ \lambda λ。(有助于降低偏差)