zoukankan      html  css  js  c++  java
  • 吴恩达《机器学习》第十章:应用机器学习的建议

    十、应用机器学习的建议

    10.1 决定下一步做什么

    以房价预测为例,当预测时遇到很多无法接受的错误时,下一步该怎么做?

    • 获得更多的训练样本;
    • 减少特征数;
    • 觉得目前的特征信息量不够,要获得更多的特征;
    • 加入高次项系数(x12,x22,x1x2,etc)
    • 减小λ;
    • 增大λ;
             ~~~~~~       这些选择中任何一个都可能需要大几个月的时间才能完成,而最糟糕的是完成之后你觉得效果还是不怎么理想;
      通过下面几节来学会评价模型并做出正确的改进选择来达到目的;

    10.2 评估假设

    如何判断我的假设是不是过拟合?

    • 将样本数据分成两部分:训练集和测试集,典型的方法是按照7:3的比例,如果数据的分布有规律或者某种顺序,那么最好随机选择7:3;
      在这里插入图片描述

    • 训练那70%的训练数据,得到参数θ和训练误差J(θ);

    • 计算测试集误差Jtest(θ),这个θ是上一步训练训练集数据得到的参数θ;即后面30%测试数据的代价函数值;
      在这里插入图片描述
      逻辑回归和线性回归的步骤差不多,涉及到一个错误分类误差以及不同的代价函数;
      在这里插入图片描述

    10.3 模型选择和交叉验证集

    确定多项式参数;

    过拟合->泛化能力差;
    选择正确且合适的特征;

    在这里插入图片描述
    Q:难道这里对测试集进行检验仍不能验证它的泛化能力吗?

    评估假设:
    6:2:2 => 训练集:交叉验证:测试集;
    在这里插入图片描述
    从而可以计算出它们对应的误差;
    在这里插入图片描述
    都是一个公式;
    在这里插入图片描述
           ~~~~~~       意思就是用训练集来训练θ,用交叉验证集来选择多项式(选择验证误差最小的模型),用测试集来判断它的泛化能力;
    在原来的基础上更加严谨;

    10.4 诊断偏差与方差

    随着多项式次数增大,训练误差会越来越低,拟合得越来越好;而验证误差会先减少后增加;
    在这里插入图片描述
    导致验证误差大的两个问题:两个高偏差,高方差;
    通过训练误差和验证误差共同确定是高偏差问题还是高方差问题;
    在这里插入图片描述
    高偏差:训练误差和验证误差都很大;
    高偏差:训练误差小,验证误差大;

    10.5 正则化和偏差、方差

    在这里插入图片描述
    选择一个合适的λ值,从而最小化代价函数,得到合适的θ值;
    Q:如何选择出一个合适的λ值?
    在这里插入图片描述
    说白了就是一个个λ试,因为λ在代价函数中,每确定一次λ值就对代价函数进行最小化,得到对应的θ => λ和θ是关联的;确定若干组θ后,代入验证误差方程中取误差最小的那组θ;若其对应的λ很小,则可以忽略,代价函数直接用不加正则化,否则,不能忽略正则化;
    在这里插入图片描述
    λ越大,正则化级别越小,高次项前面的参数的重要程度越高,训练误差越大,越倾向于欠拟合;
    λ越小,正则化级别越高,高次项前面的参数的重要程度越低,训练误差越小,越倾向于过拟合;

    10.6 学习曲线

           ~~~~~~       使用学习曲线检查你的学习算法是否运行正常,以及是出现高偏差问题还是高方差问题,改进你的算法;

           ~~~~~~       训练样本数很小时,训练误差也会很小,因为很容易就把训练集拟合到很好;而随着训练样本数的增加,训练集的拟合程度可能开始下降,训练误差可能变大;

           ~~~~~~       而交叉验证集误差和测试集误差却相反,它们会随着训练样本数量的增加而减小,因为训练样本少的时候,虽然拟合得很好,但数据的泛化程度小,无法对训练集以外的数据进行很好的预测,从而导致验证误差、测试误差大;
    在这里插入图片描述
    对于高偏差情况:
    在这里插入图片描述
           ~~~~~~       当m很小的时候(可以想成m=1),那么训练集的高偏差无疑会很小,因为它会完美拟合这个样本,而代表泛化能力的交叉验证集的高偏大就会很大,因为泛化能力差;
    => 即对于高偏差的情况,随着样本数量持续增加,验证集的偏差基本保持不变,所以此时增加样本数量对改善算法无意

    对于高方差情况:
    在这里插入图片描述
           ~~~~~~       训练集误差随着样本数量增大而增加,但误差终究还是很小,因为样本越多越难拟合;而为什么验证误差和测试误差会随着样本数量增大而降低???我认为应该是当样本数量增加到一定程度时,原次项方程无法对它做出误差很小的拟合,这将使得过拟合程度下降,使交叉验证误差降低;

           ~~~~~~       所以,对于高方差情况,增大训练样本数对算法的优化有一定的帮助;
           ~~~~~~       所以,很有必要知道自己的算法是高偏差(欠拟合)还是高方差(过拟合),因为它可能会告诉你是否有必要花时间来增加更多的训练集数据;

    10.7 决定下一步做什么

    回到一开始的问题:
    以房价预测为例,当预测时遇到很多无法接受的错误时,下一步该怎么做?

    • 获得更多的训练样本;对高方差有用
    • 减少特征数;对高方差有用
    • 觉得目前的特征信息量不够,要获得更多的特征;解决高偏差问题
    • 加入高次项系数(x12,x22,x1x2,etc);适用于高偏差问题
    • 减小λ;适用于高偏差问题
    • 增大λ;适用于高方差问题
      在这里插入图片描述
  • 相关阅读:
    快速上手Unity原生Json库
    Unity3D安卓出包报错
    Git快速入门
    [Modern OpenGL系列(四)]在OpenGL中使用Shader
    [Modern OpenGL系列(三)]用OpenGL绘制一个三角形
    [Modern OpenGL系列(二)]创建OpenGL窗口
    [Modern OpenGL系列(一)]十步搞定OpenGL开发环境
    [Unity游戏开发]向量在游戏开发中的应用(三)
    [Unity游戏开发]向量在游戏开发中的应用(二)
    【leetcode】-两数之和
  • 原文地址:https://www.cnblogs.com/Luweir/p/14147216.html
Copyright © 2011-2022 走看看