【机器学习】课程笔记09_应用机器学习的建议(Advice for Applying Machine Learning)

应用机器学习的建议

  • 决定下一步做什么(Deciding What to Try Next)
  • 评估假设(Evaluating a Hypothesis)
  • 模型选择和训练、验证、测试集(Model Selection and Training/Validation/Test Sets)
  • 诊断偏差与方差(Diagnosing Bias vs. Variance)
  • 正则化和偏差、方差(Regularization and Bias/Variance)
  • 学习曲线(Learing Curves)
  • 决定接下来做什么(Deciding What to Try Next(Revisited))

决定下一步做什么(Deciding What to Try Next)

  • 训练好了的模型来预测未知数据的时候发现有较大的误差,我们下一步可以做什么?

    • 获得更多的训练样本——通常是有效的,但代价较大,下面的方法也可能有效,可考虑先采用下面的几种方法。

    • 尝试减少特征的数量

    • 尝试获得更多的特征

    • 尝试增加多项式特征

    • 尝试减少正则化程度 λ \lambda λ

    • 尝试增加正则化程度 λ \lambda λ

  • 不应该随机选择上面的某种方法来改进我们的算法,而是运用一些机器学习诊断法来帮助我们知道上面哪些方法对我们的算法是有效的。

评估假设(Evaluating a Hypothesis)

  • 目的: 检验算法是否过拟合

  • 方法: 随机将数据分成训练集(70%)和测试集(30%),测试集评估在通过训练集让我们的模型学习得出其参数后,对测试集运用该模型,我们有两种方式计算误差:

    • 对于线性回归模型:

      • 利用测试集数据计算代价函数 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)=\cfrac{1}{2m_{test}}\displaystyle\sum^{m_{test}}_{i=1}(h_\theta(x^{(i)}_{test})-y^{(i)}_{test})^2 Jtest(θ)=2mtest1i=1mtest(hθ(xtest(i))ytest(i))2.
    • 对于逻辑回归模型:

      • 利用测试机数据计算代价函数 J t e s t ( θ ) = − 1 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 θ ( 1 − x t e s t ( i ) ) J_{test}(\theta)=-\cfrac{1}{m_{test}}\displaystyle\sum^{m_{test}}_{i=1}y^{(i)}_{test}logh_\theta(x^{(i)}_{test})+(1-y^{(i)}_{test})logh_\theta(1-x^{(i)}_{test}) Jtest(θ)=mtest1i=1mtestytest(i)loghθ(xtest(i))+(1ytest(i))loghθ(1xtest(i)).

      • 误分类错误比率:
        e r r ( h θ ( x ) , y ) = { 1 i f   h θ ( x ) ≥ 0.5 ,   y = 0   o r   i f   h θ ( x ) < 0.5 ,   y = 1 0 o t h e r w i s e err(h_\theta(x),y)= \begin{cases} 1 &if \ h_\theta(x) \geq 0.5, \ y=0 \ or \ if \ h_\theta(x) < 0.5, \ y=1 \\ 0 &otherwise \end{cases} err(hθ(x),y)={10if hθ(x)0.5, y=0 or if hθ(x)<0.5, y=1otherwise

        T e s t   e r r o r = 1 m t e s t ∑ i = 1 m t e s t e r r ( h θ ( x t e s t ( i ) ) , y t e s t ( i ) ) Test \ error = \cfrac{1}{m_{test}}\displaystyle\sum^{m_{test}}_{i=1}err(h_\theta(x^{(i)}_{test}),y^{(i)}_{test}) Test error=mtest1i=1mtesterr(hθ(xtest(i)),ytest(i))

模型选择和训练、验证、测试集(Model Selection and Training/Validation/Test Sets)

  • 首先用训练集得到一个最优的参数 θ \theta θ,然后用测试集进行评估误差。通过这样的方式可以在众多模型中选择一个理想的模型。

  • 但是这样做并不能评估模型的泛化能力,通过测试集评估选择的模型,可能刚好适合测试集的数据,并不能说明它对其他数据的预测能力,这时就引入了验证集

  • 将数据集分为:

    • 训练集(training set,60%):用于训练出多个模型,得到每个模型的 Θ \Theta Θ

      训练误差: J t r a i n ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J_{train}(\theta)=\cfrac{1}{2m}\displaystyle\sum^{m}_{i=1}(h_\theta(x^{(i)})-y^{(i)})^2 Jtrain(θ)=2m1i=1m(hθ(x(i))y(i))2.

    • 交叉验证集(验证集)(cross validation set,20%):计算交叉验证误差,选取代价函数最小的模型。

      验证误差: J c v ( θ ) = 1 2 m c v ∑ i = 1 m c v ( h θ ( x c v ( i ) ) − y c v ( i ) ) 2 J_{cv}(\theta)=\cfrac{1}{2m_{cv}}\displaystyle\sum^{m_{cv}}_{i=1}(h_\theta(x^{(i)}_{cv})-y^{(i)}_{cv})^2 Jcv(θ)=2mcv1i=1mcv(hθ(xcv(i))ycv(i))2.

    • 测试集(test set,20%):计算得出推广误差,从而评估泛化能力。

      测试误差: 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)=\cfrac{1}{2m_{test}}\displaystyle\sum^{m_{test}}_{i=1}(h_\theta(x^{(i)}_{test})-y^{(i)}_{test})^2 Jtest(θ)=2mtest1i=1mtest(hθ(xtest(i))ytest(i))2.

诊断偏差与方差(Diagnosing Bias vs. Variance)

  • 欠拟合:高偏差,训练误差和验证误差都很大(误差近似)
  • 过拟合:高方差,训练误差小,验证误差大(验证集误差>>训练集误差)

【机器学习】课程笔记09_应用机器学习的建议(Advice for Applying Machine Learning)_第1张图片

正则化和偏差、方差(Regularization and Bias/Variance)

  • 我们会使用正则化方法来防止过拟合,但正则化的程度可能过高或过低,需要选择合适的 λ \lambda λ.

  • λ \lambda λ取值: 通常是0-10之间的2倍关系,例如0, 0.01, 0.02, 0.04, 0.08, 0.16, 0.32, …, 5.12, 10共12个。

  • 方法:

    • 使用训练集训练出12个不同程度正则化的模型
    • 用12个模型分别对交叉验证集计算的出交叉验证误差
    • 选择得出交叉验证误差最小的模型
    • 运用步骤3中选出模型对测试集计算得出推广误差
  • λ \lambda λ较小:过拟合,训练误差小,验证误差大。

    λ \lambda λ较大:欠拟合,训练误差和验证误差都大。

    【机器学习】课程笔记09_应用机器学习的建议(Advice for Applying Machine Learning)_第2张图片

学习曲线(Learing Curves)

  • 随着数据量的增加:

    • J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ)的误差慢慢增大,因为数据越少,模型越容易拟合;
    • J c v ( θ ) J_{cv}(\theta) Jcv(θ)慢慢减少,因为数据越多,模型越精准,所以误差减小。
  • 学习曲线: ** 将训练集误差和交叉验证集误差作为训练集样本数量( m m m)的函数绘制的图表。是学习算法的一个很好的合理检验**(sanity check),可以来判断某一个学习算法是否处于偏差、方差问题。

    【机器学习】课程笔记09_应用机器学习的建议(Advice for Applying Machine Learning)_第3张图片

  • 高偏差(欠拟合):

    因为参数很少,数据很多,所以随着数据的增多,高偏差的模型的 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ) J c v ( θ ) J_{cv}(\theta) Jcv(θ)接近。这时选择增加数据样本数量就不是很好的选择了,可以尝试增加数据的特征

    【机器学习】课程笔记09_应用机器学习的建议(Advice for Applying Machine Learning)_第4张图片

  • 高方差(过拟合):

    高方差的特点是 J t r a i n ( θ ) J_{train}(\theta) Jtrain(θ) J c v ( θ ) J_{cv}(\theta) Jcv(θ)之间有很大的差距,这时可以选择增加数据样本数量,随着图像右移可以看出训练误差和验证误差会慢慢接近。

    【机器学习】课程笔记09_应用机器学习的建议(Advice for Applying Machine Learning)_第5张图片

决定接下来做什么(Deciding What to Try Next(Revisited))

  • 回顾9-1中提出的六种可选的下一步,选择方法:

    • 获得更多的训练样本——解决高方差
    • 尝试减少特征的数量——解决高方差
    • 尝试获得更多的特征——解决高偏差
    • 尝试增加多项式特征——解决高偏差
    • 尝试减少正则化程度λ——解决高偏差
    • 尝试增加正则化程度λ——解决高方差
  • 神经网络的方差和偏差:

    • 较小的神经网络:容易导致高偏差和欠拟合,但计算代价较小。
    • 较大的神经网络:易导致高方差和过拟合,虽然计算代价比较大,但是可以通过正则化手段来调整而更加适应数据。

    通常选择较大的神经网络并采用正则化处理会比采用较小的神经网络效果要好。

    【机器学习】课程笔记09_应用机器学习的建议(Advice for Applying Machine Learning)_第6张图片

  • 隐藏层的层数的选择: 通常从一层开始逐渐增加层数,可以把数据分为训练集、交叉验证集和测试集,针对不同隐藏层层数的神经网络训练神经网络, 然后选择交叉验证集代价最小的神经网络。

你可能感兴趣的:(机器学习,人工智能,算法)