机器学习诊断法
机器学习诊断法本质上是一种测试, 通过这种测试可以知道机器学习算法哪里出了问题,下一步应该做些什么,如何改进。
1.评估假设
将所有数据分割成两组,一组作为训练集,一组作为测试集,一般按照训练集:测试集=7:3的比例分。
对训练集学习得到参数 θ \theta θ,使用包含得到的参数的假设函数对每个测试集中的样本进行处理从而得到针对于测试集的代价函数即测试误差 J t e s t ( θ ) J_{test}(\theta) Jtest(θ)。
2.模型选择:多项式次数
将数据分为三组:训练集、测试集、验证集。
其中训练集:验证集:测试集=6:2:2。
验证集也叫交叉验证集(Cross Validation)。
选择多项式次数:
- 列出一系列不同次数的多项式(如下图);
- 依次对各个多项式用训练集中的样本拟合出对应的 θ \theta θ;
- 对所有多项式求出验证集误差;
- 从这些模型中选出具有最小验证误差的多项式,用测试集作为输入检验此多项式的泛化能力是否出现欠拟合或过拟合现象等等。
总的来说就是在训练集上求出 θ \theta θ,在验证集上求出最好的多项式次数,在测试集上测试泛化。
下图是线性回归的三个集合的误差也就是代价函数:
m c v m_{cv} mcv是验证集中样本的数量
m t e s t m_{test} mtest是测试集中样本的数量
m m m是训练集中样本的数量
J c v ( θ ) J_{cv}(\theta) Jcv(θ)是验证集的误差
J t e s t ( θ ) J_{test}(\theta) Jtest(θ)是测试集的误差
J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)是训练集的误差也就是我们一直说的 J ( θ ) J(\theta) J(θ)
3.诊断偏差(bias)和方差(variance)
当我们运行一个算法但是这个算法不理想时,要么是偏差大要么是方差大,也就是说要么是欠拟合问题要么是过拟合问题,那么怎么诊断是偏差问题还是方差问题呢?
横轴是拟合的多项式次数,纵轴是误差大小
当是欠拟合(高偏差)问题时,我们可以发现验证误差和训练误差都很大,如上图左侧。
当是过拟合(高方差)问题时,我们可以发现验证误差很大但是训练误差很小,如上图右侧。
4.模型选择:正则化参数
相信大家都已经知道了正则化可以有效的防止过拟合问题,那么正则化是如何影响算法的方差和偏差的呢?
当惩罚项系数 λ \lambda λ特别大的时候, θ i \theta_i θi基本都等于0,这时输出的函数相当于 θ 0 + 0 \theta_0+0 θ0+0,是一条水平线,就会出现高偏差欠拟合的结果。
当惩罚项系数 λ \lambda λ特别小的时候, λ \lambda λ差不多趋于0,这时相当于没有正则化,结果就会出现高方差过拟合的情况。
故而选取一个大小适中的 λ \lambda λ值很重要。
定义以下几个函数:
选择正则化参数的步骤:
- 选取一系列 λ \lambda λ值,从 λ = 0 \lambda=0 λ=0开始,步长二倍增长, λ = 0.01 \lambda=0.01 λ=0.01、 λ = 0.02 \lambda=0.02 λ=0.02、 λ = 0.04 \lambda=0.04 λ=0.04、 λ = 0.08 \lambda=0.08 λ=0.08… λ = 10 ( . 24 ) \lambda=10(.24) λ=10(.24),也可以实施小于0.01、大于10的值,此处不予讨论;
- 求出各个 λ \lambda λ值对应的参数 θ \theta θ;
- 输入验证集中的样本求出各个模型的验证误差;
- 选取最小的验证误差的模型。
5.学习曲线(learning curves)
绘制学习曲线可以检查算法是否一切正常、是否可以优化、是否过拟合或欠拟合或两者都有等问题。
为了绘制一个学习曲线,我们通常先绘制出 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)或者 J c v ( θ ) J_{cv}(\theta) Jcv(θ),将其绘制成横轴为样本总数 m m m、纵轴为误差 e r r o r error error的曲线。
如果算法处于高偏差情况下,增加训练集样本到一定数量后再增加训练集样本不会降低验证误差,增加训练集样本数量对改进算法没有用。
此时的学习曲线:
如果算法处于高方差情况下,一直增加训练集样本数量可以降低验证误差,增加训练集样本数量对改进算法有用。
此时的学习曲线:
所以当我们想要改进算法时可以绘制出学习曲线看看是发生了高方差问题还是高偏差问题异或是两者都有,这样可以针对于具体问题改进我们的算法。
6.总结
方法:
- 增加训练样本
- 选取更少的特征值
- 选取更多的特征值
- 增加多项式次数
- 减小正则化系数
- 增大正则化系数
当处于高方差(过拟合)问题时:可以尝试1、2、6。
当处于高偏差(欠拟合)问题时:可以尝试3、4、5。
7.扩展:和神经网络之间的联系
单层神经网络:计算量小但容易出现欠拟合现象。
多层神经网络:计算量大容易出现过拟合现象,但是通常性能比较好。
使用正则化后的多层比单层受欢迎。
选择隐藏层层数和隐藏单元数量可以使用上面讲的模型选择方法,将样本分为训练集、验证集、测试集,选出最优解。