《machine learning》10 机器学习算法诊断
10.1 正确选择
如果预测出现很大偏差,需要尝试去:
- 收集更多的训练样本
- 尝试使用更少的特征
- 尝试使用更多的特征
- 增加特征的多项式,例如增加 x 1 2 , x 2 2 , x 1 x 2 , e t c . x^2_1,x^2_2,x_1x_2,etc. x12,x22,x1x2,etc.
- 尝试增大或减小正则化参数 λ \lambda λ值
诊断法:
是一种测试方法,通过测试可以了解算法问题所在,如何改进
10.2 评估假设函数
将样本分为训练集 m m m和测试集 m t e s t m_{test} mtest 7:3(样本需随机分布)
线性回归算法举例:
- 从训练集中学习出模型参数 θ \theta θ(最小化损失函数 J ( θ ) J(\theta) J(θ))
- 将得到的 θ \theta θ带入测试集计算出测试误差 J t e s t ( θ ) = 1 2 m t e s t ∑ i = 1 m t e s t ( h θ ( x t e s t ( i ) ) − y t e s t ( i ) ) 2 J_{test}(\theta)={1\over 2m_{test}}\sum_{i=1}^{m_{test}}(h_\theta(x_{test}^{(i)})-y_{test}^{(i)})^2 Jtest(θ)=2mtest1∑i=1mtest(hθ(xtest(i))−ytest(i))2
逻辑回归算法举例:
-
从训练集中学习出模型参数 θ \theta θ(最小化损失函数 J ( θ ) J(\theta) J(θ))
-
将得到的 θ \theta θ带入测试集计算出测试误差 J t e s t ( θ ) = 1 2 m t e s t ∑ i = 1 m t e s t [ y t e s t ( i ) l o g h θ ( x t e s t ( i ) ) + ( 1 − y t e s t ( i ) ) l o g h θ ( x t e s t ( i ) ) ] J_{test}(\theta)={1\over 2m_{test}}\sum_{i=1}^{m_{test}}[y_{test}^{(i)}logh_\theta(x_{test}^{(i)})+(1-y_{test}^{(i)})logh_\theta(x_{test}^{(i)})] Jtest(θ)=2mtest1∑i=1mtest[ytest(i)loghθ(xtest(i))+(1−ytest(i))loghθ(xtest(i))]
-
或者使用错误分类误差(0/1错误分类误差)
10.3 训练集、验证集、测试集
训练集误差不能体现模型对样本拟合情况的好坏
到底选择几次多项式的假设函数呢?设 d d d为最高次数
- 使用算法求不不同的多项式,得出不同的 Θ \Theta Θ参数矩阵
- 引入最高次 d d d这一参数使用验证集对不同的参数矩阵的假设函数进行评估
- 再使用测试集验证泛化能力。
训练集 m m m、交叉验证集 m c v m_{cv} mcv、测试集 m t e s t m_{test} mtest:6:2:2
训练误差training error:
J t r a i n ( θ ) = 1 2 m ∑ i − 1 m ( h θ ) ( x ( i ) − y ( i ) ) 2 J_{train}(\theta)={1\over 2m}\sum_{i-1}^m(h_\theta)(x^{(i)}-y^{(i)})^2 Jtrain(θ)=2m1i−1∑m(hθ)(x(i)−y(i))2
交叉验证误差cross validation error:
J c v ( θ ) = 1 2 m ∑ i = 1 m c v ( h θ ( x c v ( i ) ) − y c v ( i ) ) 2 J_{cv}(\theta)={1\over 2m}\sum^{m_{cv}}_{i=1}(h_\theta(x_{cv}^{(i)})-y_{cv}^{(i)})^2 Jcv(θ)=2m1i=1∑mcv(hθ(xcv(i))−ycv(i))2
测试误差test error:
J t e s t ( θ ) = 1 2 m t e s t ∑ i = 1 m t e s t ( h θ ( x t e s t ( i ) ) − y t e s t ( i ) ) 2 J_{test}(\theta)={1\over 2m_{test}}\sum_{i=1}^{m_{test}}(h_\theta(x_{test}^{(i)})-y_{test}^{(i)})^2 Jtest(θ)=2mtest1i=1∑mtest(hθ(xtest(i))−ytest(i))2
10.4 诊断偏差(欠拟合)方差(过拟合)
高偏差问题——欠拟合——训练误差和交叉验证误差(比训练误差大点)都很大
高方差问题——过拟合——训练误差极小,交叉验证误差很大
10.5 正则化参数对偏差和方差的影响
- 选择不同的正则化参数 λ \lambda λ
- 首先 λ \lambda λ从0开始到0.01再以两倍递增,算出不同 λ \lambda λ值下的误差函数 J ( θ ) J(\theta) J(θ)
- 再通过最小误差函数值 m i n J ( θ ) minJ(\theta) minJ(θ)得出某个参数向量 Θ ( i ) \Theta^{(i)} Θ(i)
- 再使用交叉验证评估不同 λ \lambda λ值在交叉验证集下的误差平方和
- 选择这些 λ \lambda λ值不同的模型中交叉验证集误差最小的
- 最后验证所选出来 λ \lambda λ值对应的参数向量 Θ ( i ) \Theta^{(i)} Θ(i)在测试集中的表现
当正则化参数 λ \lambda λ过大时,训练误差会很大,当 λ \lambda λ值很小时,训练误差很小
当正则化参数 λ \lambda λ过大时,交叉验证误差会很大(欠拟合高偏差),当 λ \lambda λ值很小时,交叉验证误差也会很大(过拟合高方差)
注意:这里误差函数有正则化项,训练误差函数和交叉验证函数没设正则化项。
10.6 学习曲线(诊断)
在假设函数次数一定时,随着训练样本集数量的增多,训练平均误差会逐渐增大。交叉验证平均误差会随着训练样本数量增多而逐渐减小。
当模型过于简单时平均误差曲线:(高偏差问题)
模型过于简单处于高偏差问题时,增加训练样本也没用
当模型过于复杂时的平均误差曲线:(高方差问题)
训练误差和交叉验证误差有很大一段距离
当模型过于复杂处于高方差问题时,增加训练数据集会使训练误差和验证误差接近,对改进算法有帮助。
10.7 判断改进方法
- 收集更多的训练样本数量——解决高方差问题
- 尝试使用更少的特征数量——解决高方差问题
- 尝试使用更多的特征数量——解决高偏差问题
- 增加特征的多项式,例如增加 x 1 2 , x 2 2 , x 1 x 2 , e t c . x^2_1,x^2_2,x_1x_2,etc. x12,x22,x1x2,etc.——解决高偏差问题
- 尝试增大正则化参数 λ \lambda λ值——解决高方差问题
- 尝试减小正则化参数 λ \lambda λ值——解决高偏差问题
使用大型神经网络更精准,如果出现了过拟合可以通过增大 λ \lambda λ值改善