假设使用正则化线性回归预测房价:
J(θ)=12m[∑i=1m(hθ(x(i))−y(i))2+λ∑j=1nθ2j]
当把假设函数用于新的数据集,发现在预测时出现了很大误差。此时,可以执行的下一步措施包括:
- 获取更多训练样本;
- 尝试更少特征值;
- 尝试更多特征值;
- 尝试增加多项式特征值;
- 减小λ值;
- 增大λ值。
机器学习诊断法:通过执行一种测试方法,能够了解某种算法是否有用,通常也能告诉你,想要改进一种算法的效果应该做什么样的尝试。
诊断法需要花费时间,但是一种很有效的方法。
假设拥有一组训练样本,为确保可以评估假设函数,将训练样本分成两部分,70%作为训练集,30%作为测试集,mtest作为测试样本总数:
训练集:(x(1),y(1)),(x(2),y(2)),⋯,(x(m),y(m))
测试集:(x(1)test,y(1)test),(x(2)test,y(2)test),⋯,(x(mtest)test,y(mtest)test)
若训练数据存在某种规律,训练集、测试集的选取应采用随机原则。
具体执行步骤:
- 利用训练集进行学习,得到参数θ;
- 计算测试误差:
对于线性回归:
Jtest(θ)=12mtest∑i=1mtest(hθ(x(i)test)−y(i)test)2
对于逻辑回归:
Jtest(θ)=−1mtest∑i=1mtest(y(i)testlog(hθ(x(i)test))+(1−y(i)test)log(1−hθ(x(i)test)))
另一种表达方式:0/1误分率:
err(hΘ(x),y)={1,0,if (hΘ(x)⩾0.5 and y=0) or (hΘ(x)<0.5 and y=1)otherwiseTest Error=1mtest∑i=1mtesterr(hΘ(x),y)
模型选择问题
在实际应用中,为了更好地评价某个假设函数,通常采用上述方法的升级版:
将一组训练样本分成三部分:训练集、交叉验证集、测试集,典型的分隔比例为(60%:20%:20%)
训练集:(x(1),y(1)),(x(2),y(2)),⋯,(x(m),y(m))
交叉验证集:(x(1)cv,y(1)cv),(x(2)cv,y(2)cv),⋯,(x(mcv)cv,y(mcv)cv)
测试集:(x(1)test,y(1)test),(x(2)test,y(2)test),⋯,(x(mtest)test,y(mtest)test)
训练误差: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
若存在以下假设函数:
1. hθ(x)=θ0+θ1x
2. hθ(x)=θ0+θ1x+θ2x2
3. hθ(x)=θ0+θ1x+θ2x2+θ3x3
⋯
10. hθ(x)=θ0+θ1x+⋯+θ10x10
选择假设函数的具体方法如下:
- 用训练集优化各假设函数的参数θ;
- 用交叉验证集找到误差最小的假设函数;
- 用测试集估算步骤2中误差最小的假设函数的泛化误差。
由于欠拟合和过拟合的存在,随着假设函数的多项式最高项的增大,训练误差和交叉验证误差的变化如下图:
上图中,交叉验证误差曲线的左边对应高偏差,右边对应高方差;
高偏差对应欠拟合:训练误差和交叉验证误差均很大,且训练误差≈交叉验证误差,原因为多项式最高次项过低;
高方差对应过拟合:训练误差较小,交叉验证误差很大,原因为多项式最高次项过高。
正则化与偏差/方差的关系:
假设要对高阶多项式进行拟合: hθ(x)=θ0+θ1x+θ2x2+θ3x3+θ4x4
则:J(θ)=12m[∑i=1m(hθ(x(i))−y(i))2+λ∑j=1nθ2j]
关于λ的取值有三种情况:
-
λ取值很大,则θ0≈0,⋯,θ4≈0,hθ(x)≈θ0,欠拟合,高偏差;
-
λ取值很小, λ≈0,正则化没有起作用,过拟合,高方差;
-
λ取值适当,拟合度正好。
为选取合适的λ参数,需要进行如下步骤:
- 创建一个λ取值列表,如λ∈{0,0.01,0.02,⋯,10.24};
- 创建一个模型集,即不同阶或包含其他的变量的不同假设函数;
- 迭代遍历λ,对于每个λ,都遍历所有的假设函数,用测试集得到其θ取值;
- 使用步骤3得到的θ带入假设函数,不进行正则化或λ=0,计算交叉验证误差Jcv(θ);
- 选择Jcv(θ)最小的λ和θ对应关系;
- 用选择的那对λ和θ,计算Jtest(θ)看是否有好的泛化效果。
学习曲线
训练误差:Jtrain(θ)=12m∑i=1m(hθ(x(i))−y(i))2
交叉验证误差:Jcv(θ)=12mcv∑i=1mcv(hθ(x(i)cv)−y(i)cv)2
当学习算法存在高偏差:
- 训练集规模较小时,Jtrain(θ)较小,而Jcv(θ)较大;
- 训练集规模较大时,Jtrain(θ)与Jcv(θ)趋近,即Jtrain(θ)≈Jcv(θ),但均较大。
此时,增加训练样本数量对训练算法无帮助。
当学习算法存在高方差:
- 训练集规模较小时,Jtrain(θ)较小,而Jcv(θ)较大;
- 训练集规模较大时,Jtrain(θ)随着样本数增大而增大,Jcv(θ)随着样本数增大而减小,Jtrain(θ)依然小于Jcv(θ),但差距变小。
此时,增加训练样本数量对训练算法有帮助。
本文最开始提到的修正算法的措施具体作用方向如下:
- 获取更多训练样本:解决高方差;
- 尝试更少特征值:解决高方差;
- 尝试更多特征值:解决高偏差;
- 尝试增加多项式特征值:解决高偏差;
- 减小λ值:解决高偏差;
- 增大λ值:解决高方差。
诊断神经网络:
- 简单的神经网络趋近于欠拟合,但计算简单;
- 复杂的神经网络趋近于过拟合,但计算复杂,可以使用正则化(增大λ)解决。