机器学习(十二)如何选择学习模型以及如何评估和优化你的学习模型?

如何评估和优化你的学习算法以及学习模型如何选择?

前言 :

前面我们学习了线性回归,逻辑回归,神经网络等相关的机器学习算法,那么你如何评价你的算法好坏?如果你的算法执行结果并不是令人满意的结果,那么你又如何改进和优化你的学习算法?本文将讲解一些评价算法的方法,以及优化算法的一些高效指标。

一、如果你测试发现你的预测函数表现得并不好,你如何做?

假设你实现了线性回归去预测房价,
但是你测试发现hθ(x)在新的房价测试集上,表现出很大的误差,此时你会怎么做?
机器学习(十二)如何选择学习模型以及如何评估和优化你的学习模型?
对于这种情况,大部分人会选择以下方法去改进他的学习算法:
1、获得更多的训练样本
2、尝试减少特征变量
3、尝试增加特征变量
4、尝试增加多项式特征(如x12;x22;x1x2等等)
5、减小λ
6、增加λ

上面这些确实是解决学习算法不能很好的应用到新数据集中的问题的方法,但是,如果没有一定思路的乱用上面的方法,那也许你在该方法上花了很多时间,但学习算法仍然没有改进。例如,有的人发现自己的学习算法在新的数据集上表现很差,他就不管三七二十一,直接花大把的时间去收集样本数据,他想当然的认为,自己学习算法效果不好,是因为训练样本太少,但是也许你的学习算法执行效果不好,根本不是训练样本个数的问题,那么你花费再多的时间在收集训练样本上,都将是徒劳的!因此我们应该有一定章法的评估自己的学习算法,以及学习算法执行效果不理想的原因,再根据分析的原因进而选择合适的方法来改进学习算法。

二、评估预测函数

1、将数据集随机分为训练集和测试集两部分,经典的分法是将数据集中70%作为训练集,另外30%作为测试集。例如已经随机分布的房屋价格数据集如下表分为训练集和测试集:

size price
2104 400
1600 330
2400 369
1416 232
3000 540
1985 300
1534 315
1427 199
1380 212
1494 243

note:训练集数据表示如下:
(x(1),y(1));(x(2),y(2));… (x(m),y(m)),其中m为从数据集中选出的70%的训练集数量
测试集数据表示如下:
机器学习(十二)如何选择学习模型以及如何评估和优化你的学习模型?
其中mtest为从数据集中选出的30%的测试集数量。

2、对于线性回归中预测函数的评价过程
a、从训练集中学习得到参数θ,进而得到hθ(x);
b、用测试集计算预测函数hθ(x)的误差Jtest(θ),公式如下:
机器学习(十二)如何选择学习模型以及如何评估和优化你的学习模型?
3、对于逻辑回归中预测函数的评价过程
a、从训练集中学习得到参数θ,进而得到hθ(x);
b、用测试集计算预测函数hθ(x)的误差Jtest(θ),公式如下:
机器学习(十二)如何选择学习模型以及如何评估和优化你的学习模型?
c、0/1错分类误差test error,计算方式如下:
机器学习(十二)如何选择学习模型以及如何评估和优化你的学习模型?

三、确定预测函数的多项式次数

1、如何确定预测函数的多项式次数,我们可以用训练集分别得到各个多项式次数的预测函数hθ(x),然后对各个hθ(x)用测试集进行误差评估,最后选出误差最小的hθ(x)作为预测函数。示例过程如下:
机器学习(十二)如何选择学习模型以及如何评估和优化你的学习模型?
其中d代表多项式的次数,取出计算的Jtest(i))中最下的hθ(x),作为最终的预测函数

上面的过程看似合理,但是,我们会发现d的取值,是通过测试集中的数据得到,那么也就是我们由此得到预测函数在测试集中表现良好,但是放在新的数据集中表现如何就不得而知了,因此,上面的过程得到多项式的次数,并不可靠。

2、为了解决上面的问题,我们可以将数据集随机分为训练集,交叉验证集和测试集三个部分,也就增加了交叉验证集(cross validation)。经典的分法是训练集占60%;交叉验证集占20%;测试集占20%;例如已经随机分布的房屋价格数据集如下表分为训练集,交叉验证集和测试集:

size price
2104 400
1600 330
2400 369
1416 232
3000 540
1985 300
1534 315
1427 199
1380 212
1494 243

训练集和测试集的表示方法不变,交叉验证集的表示方法如下
机器学习(十二)如何选择学习模型以及如何评估和优化你的学习模型?
有了交叉验证集,我们就可以用交叉验证集来计算各个多项式次数对应的误差,然后选择误差最小的预测函数,再用测试集评估预测函数的好坏,这样就能保证得到的预测函数可以泛化到新的数据集中

那么我们可以利用同样的思路去选择模型中正则化参数λ

3、线性回归中训练集误差,交叉验证集误差,测试集误差计算公式分别如下:
机器学习(十二)如何选择学习模型以及如何评估和优化你的学习模型?
机器学习(十二)如何选择学习模型以及如何评估和优化你的学习模型?
机器学习(十二)如何选择学习模型以及如何评估和优化你的学习模型?

四、诊断一个学习算法是偏差(欠拟合)还是方差(过拟合)问题

1、Jcv(θ)和Jtrain(θ)关于多项式的次数的曲线图如下所示:
机器学习(十二)如何选择学习模型以及如何评估和优化你的学习模型?
当多项式的次数太小时,预测函数处于欠拟合状态,即偏差问题,此时,训练集误差和交叉验证误差都很高;
当多项式的次数太大时,预测函数处于过拟合状态,即方差问题,此时,训练集误差很小,而交叉验证误差很高;两则随着多项式次数的增加呈现分道扬镳的趋势。

2、Jcv(θ)和Jtrain(θ)关于正则化参数λ的曲线图如下所示:
机器学习(十二)如何选择学习模型以及如何评估和优化你的学习模型?
当λ太小时,预测函数处于过拟合状态,即方差问题,此时,训练集误差很低,而交叉验证误差都很高;
当λ太大时,预测函数处于欠拟合状态,即偏差问题,此时,训练集误差和交叉验证误差都很高;两则随着λ的增加,误差呈现不断接近,并越来越大的趋势。

通过上面图的特点,我们可以不断尝试自己的多项式次数和λ,找到图形的中间位置,也就找到了合适的模型。

五、学习曲线—判断你的学习模型时处于高偏差还高方差

1、高偏差状态下,Jcv(θ)和Jtrain(θ)关于训练样本数量m的曲线图如下所示:
机器学习(十二)如何选择学习模型以及如何评估和优化你的学习模型?
高偏差即欠拟合的学习器随着训练样本数的增多,误差越来越大,而交叉验证误差一直处于较高的误差值,最后两者趋于几乎不变的状态。也就是如果你的预测函数处于高偏差的状态,此时,你收集再多的训练样本也无济于事,它不会改善你的学习结果的。

2、高方差状态下,Jcv(θ)和Jtrain(θ)关于训练样本数量m的曲线图如下所示:
机器学习(十二)如何选择学习模型以及如何评估和优化你的学习模型?
高偏差即过拟合的学习器随着训练样本数的增多,交叉验证误差越来越小。也就是如果你的预测函数处于过拟合的状态,此时你采取收集更多的训练样本是可以改善你的学习算法的。

六、综上所述,如何正确选取对应的方法来提高自己的学习算法效能?

方法 适用情况
获得更多的训练样本 高方差(过拟合)
尝试减少特征变量 高方差(过拟合)
尝试增加特征变量 高偏差(欠拟合)
尝试增加多项式特征(如x12;x22;x1x2等等) 高偏差(欠拟合)
减小λ 高偏差(欠拟合)
增加λ 高方差(过拟合)