吴恩达机器学习笔记(九)应用机器学习的建议
一、决定下一步做什么
当发现一个机器学习模型的测试效果不太好时,下一步该做什么呢?
你可能会想到很多种改善方法:
- 使用更多的训练样本
- 减少特征数量
- 增加特征数量
- 增加多项式特征
- 增大正则化项的参数 λ \lambda λ
- 减小正则化参数
λ
\lambda
λ
那么选择哪一种呢?
对模型进行评估、诊断和改善,将是我们这一章介绍的内容。评估和诊断可能还会花费你大量的时间,但这些都是值得的。
二、评估假设(Evaluatong a hypothesis)
通常将数据集分为两部分,70%作为训练集,30%作为测试集。
线性回归的评估方法:(预测值与标准值之间的均方误差)
分类问题的评估方法:(预测分类与实际分类是否一致的0/1判定)
三、模型的选择、训练、验证(Model Selection and Training/Validation/Test Sets)
如果我有10个可选的模型,不知道哪个是最优的。你可能会将10个模型分别在测试集上应用,分别求出在测试集的代价函数,选择表现最好的认为是最优模型。
这样会导致一个问题:模型选择是依据在测试集上的表现,那么选出的模型可能只是针对该指定测试集表现良好而已。如果在其他数据集上进行测试,可能泛化效果并不理想。
因此,我们通常将数据集分成3份:训练集、交叉验证集、测试集。将10个模型分别在交叉验证集上运行,选择出最优的模型。将最优模型在测试集上运行,来评估模型的泛化误差。
训练集、交叉验证集、测试集的误差计算公式如下:
(公式相同,只是数据集不同)
流程:
四、诊断偏差与方差(Diagnosing Bias and Variance)
高偏差:欠拟合
高方差:过拟合
如下图,随着多项式次数的升高,训练集上的误差逐渐变小,而交叉验证集上的误差先减小再增大。这是由于,次数过高时出现过拟合现象,导致在训练集上表现的非常好,但在交叉验证集上的表现就很差。
怎么判断是高偏差还是高方差呢?
高偏差(欠拟合):训练集和交叉验证集上的误差都很大。
高方差(过拟合):训练集上的误差很小,交叉验证集上的误差很大。
五、正则化和偏差、方差(Regularization and Bias/Variance)
正则化项
λ
\lambda
λ太大时,欠拟合。
λ
\lambda
λ太小时,过拟合。选取合适的
λ
\lambda
λ值很重要。
在下述过程中,
J
(
θ
)
J(\theta)
J(θ)是加入了正则化项的代价函数(用于训练模型),而
J
t
r
a
i
n
(
θ
)
J_{train}(\theta)
Jtrain(θ)是均方误差,不含正则化项(用于评估模型)。
设定12个不同的
λ
\lambda
λ值,得到12个模型,通过交叉验证集选出一个最优的,再放到测试集上进行测试。
随着
λ
\lambda
λ的增加,训练集上的误差和交叉验证集上的误差的变化趋势如下图。训练集的误差逐渐增加,这是因为
λ
\lambda
λ太大时,欠拟合;
λ
\lambda
λ太小时,过拟合。而交叉验证集上的误差是先减小再增大。
六、学习曲线(Learning Curves)
绘制学习曲线:随着样本数m的增加,训练集误差与交叉验证集误差的变化趋势,
高偏差(欠拟合):随着样本数m的增加,训练集误差逐渐增加,交叉验证集误差逐渐减小,但是最后趋于同一条直线,两者的误差都很大。此时,增大样本数对模型的提升不大。
高方差(过拟合):随着样本数m的增加,训练集误差逐渐增加,但始终保持一个在值很小的范围。交叉验证集误差逐渐减小,但始终大于训练集误差。当样本数很大很大很大时,二者误差也可以达到接近。对于高方差问题来说,增加样本数,可以提升模型的效果。
七、决定接下来做什么(Deciding What to Try Next)
回到我们最开始提到的问题,当一个模型的效果不好时,我们有很多种改善方案,那么选择哪一种呢?
- 使用更多的训练样本(适用于高方差)
- 减少特征数量(适用于高方差)
- 增加特征数量(适用于高偏差)
- 增加多项式特征(适用于高偏差)
- 增大正则化项的参数 λ \lambda λ(适用于高偏差)
- 减小正则化参数 λ \lambda λ(适用于高方差)
规模较小的神经网络容易出现欠拟合问题。规模较大的神经网络容易出现过拟合问题,但这个过拟合问题可以通过引入正则化项来改善。因此,在实际应用中,忽略计算量太大的因素,规模较大的神经网络的效果更好一些。
如果不知道设计几个隐藏层,那么可以分别设计一个、两个、多个隐藏层,然后通过交叉验证集来选出最合适的隐藏层层数。