如果我们正利用正则化线性回归来预测房价,代价函数如公式
J(θ)=12m⎡⎣∑i=1m(hθ(xi)−yi)2+λ∑jnθ2j⎤⎦备注:Andrew Ng的ppt中公式有误,我这里更改了过来
然而,当你在新数据集上测试你的假设时,会发现预测结果的错误率不可接受。那下一步该怎样做?
获取更多的训练数据尝试更小的特征集尝试获取额外的特征尝试添加多项式特征尝试减小 λ 尝试增大 λ-什么是诊断? 诊断就是一种测试,该测试可以让你更加清楚哪些有利于学习算法,哪些有害于学习算法,给你更好地改善学习算法性能提供更多指导。
诊断很费时,但很有用。
如果选择的特征过多,模型可能对不在训练集中的数据缺乏泛化能力。 如图1所示,这里选择了4个特征 [x1,x2,x3,x4] ,假设为:
hθ(x)=θ0+θ1x+θ2x2+θ3x3+θ4x4 这种请情况就是过拟合。过拟合造成对训练数据拟合非常好,但对测试数据缺乏泛化推广能力。图1 过拟合
-通过最小化训练误差 J(θ) 来学习参数 θ
-计算测试误差
-通过训练数据来学习参数 θ
-计算测试集误差 Jtest(θ)=−1mtest∑mtesti=1(y(i)testloghθ(x(i)test)+(1−y(i)test)loghθ(x(i)test))
-误分类误差
对于如图1所示的过拟合例子,一旦参数 θ0,θ1,....,θ4 对训练集能够很好地拟合,训练集获得的参数误差可能比真是的泛化误差低。 通过测试集误差 Jtest(θ(5)) 来反映模型泛化能力的好坏, Jtest(θ(5)) 通常可能是泛化误差的乐观的估计。选择额外的参数能够对测试集进行拟合。
训练误差:
Jtrain(θ)=12m∑i=1m(hθ(x(i))−y(i))2交叉验证误差:
Jcv(θ)=12mcv∑i=1mcv(hθ(x(i)cv)−y(i)cv)2训练误差:
Jtest(θ)=12mtest∑i=1mtest(hθ(x(i)test)−y(i)test)2如下三张图分别代表了高偏差(欠拟合)、“正好”、高方差(过拟合)
图2 欠拟合-适中-过拟合
训练误差:
Jtrain(θ)=12m∑i=1m(hθ(x(i))−y(i))2交叉验证误差:
Jcv(θ)=12mcv∑i=1mcv(hθ(x(i)cv)−y(i)cv)2随着多项式维度d的增大,训练误差逐渐减小;但交叉验证误差开始时会随多项式维度增大而减小,但当维度超过临界值后,交叉验证误差会随着维度的增大而增大。因此,多项式维度要选择适当大小的值。
如果学习算法的性能比预期的差( Jcv(θ) 或 Jtest(θ) 高)。那它是偏差问题还是方差问题?
从图2可以看出偏差(欠拟合)问题和方差(过拟合)问题的差别: -偏差问题(欠拟合): 训练误差 Jtrain(θ) 大,测试误差与交叉验证误差也较大并且近似相等; -方差问题(过拟合): 训练误差 Jtrain(θ) 小,交叉验证误差远大于训练集误差( Jcv(θ)>>Jtrain(θ) );
选择的模型为:
hθ(x)=θ0+θ1x+θ2x2+θ3x3+θ4x4 代价函数为: J(θ)=12m∑i=1m(hθ(x(i))−y(i))2+λ2m∑j=1nθ2j尝试不同的正则化参数 λ ,可以做出交叉验证集的代价函数 Jcv(θ) ,训练集的代价函数 Jtrain(θ) 与正则化参数 λ 的关系曲线,如图所示
从图中可以看出,当正则化参数 λ 较小时,训练集的代价函数 Jtrain较小,并随着 \lambda 增大而增大;交叉验证集的代价函数 J_{cv}(\theta) ,随着 \lambda 增大先减少后增大。说明,正则化参数 \lambda$参数要适中。
选择不同的训练集规模(即 m 不同),交叉验证集的代价函数Jcv(θ),训练集的代价函数 Jtrain(θ) 也会发生变化。训练集的代价函数 Jtrain随着 m 增大而增大;交叉验证集的代价函数 J_{cv}(\theta) ,随着 \lambda$增大而减少,如图所示。
当学习算法经历高偏差时,增加过多的训练集数据也不会由太大帮助,因为随着样本数 m 的增大,训练集的代价函数Jtrain随着m 增大而增大;交叉验证集的代价函数 J_{cv}(\theta) ,随着 \lambda 增大而减少,但最后都会很快收敛,并且 J_{cv}(\theta) 略大于 J_{cv}(\theta)$。增长曲线如图所示。
当学习算法经历高方差时,增加过多的训练集数据可能会很有用,因为随着样本数 m 的增大,训练集的代价函数Jtrain随着m 增大而增大;交叉验证集的代价函数 J_{cv}(\theta) ,随着 \lambda 增大而减少,并且 J_{cv}(\theta) 略大于 J_{cv}(\theta)$。增长曲线如图所示。
回到开始提到的问题,当算法性能不理想时,该如何进行处理: - 高方差——获取更多的训练数据 - 高方差——尝试更小的特征集 - 高偏差——尝试获取额外的特征 - 高偏差——尝试添加多项式特征 - 高偏差——尝试减小 λ - 高方差——尝试增大 λ