笔记:机器学习——吴恩达 第六周

课程目录

十、应用机器学习的建议(Advice for Applying Machine Learning)
10.1 决定下一步做什么
10.2 评估一个假设
10.3 模型选择和交叉验证集
10.4 诊断偏差和方差
10.5 正则化和偏差/方差
10.6 学习曲线
10.7 决定下一步做什么

十一、机器学习系统的设计(Machine Learning System Design)

11.1 首先要做什么
11.2 误差分析
11.3 类偏斜的误差度量
11.4 查准率和查全率之间的权衡
11.5 机器学习的数据

笔记内容


十、应用机器学习的建议(Advice for Applying Machine Learning) 

10.1 决定下一步做什么 

       为明白怎样选择一条最合适、最正确的道路,而不是总是把时间浪费在毫无意义的尝试上,接下来几节将会介绍一些实用的建议和指导,帮助你明白怎样进行选择。

       具体来讲,将重点关注的问题是假如你在开发一个机器学习系统,或者想试着改进一个机器学习系统的性能,你应如何决定接下来应该选择哪条道路。

       幸运的是,有一系列简单的方法能让你事半功倍,排除掉尝试单子上的至少一半的方法,留下那些确实有前途的方法,同时也有一种很简单的方法,只要你使用,就能很轻松地排除掉很多选择,从而为你节省大量不必要花费的时间。最终达到改进机器学习系统性能的目的。

       假设我们需要用一个线性回归模型来预测房价,当我们运用训练好了的模型来预测未知数据的时候发现有较大的误差,我们下一步可以做什么? 

       1. 获得更多的训练实例——通常是有效的,但代价较大,下面的方法也可能有效,可考虑先采用下面的几种方法。 
       2. 尝试减少特征的数量 
       3. 尝试获得更多的特征 
       4. 尝试增加多项式特征 
       5. 尝试减少归一化程度 λ 

       6. 尝试增加归一化程度 λ  

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

       在接下来的几节中,将首先介绍怎样评估机器学习算法的性能,这被称为"机器学习诊断法"。“诊断法”的意思是:

       这是一种测试法,你通过执行这种测试,能够深入了解某种算法到底是否有用。这通常也能够告诉你,要想改进一种算法的效果,什么样的尝试,才是有意义的。我们将介绍具体的诊断法,但要提前说明一点的是,这些诊断法的执行和实现,是需要花些时间的,有时候确实需要花很多时间来理解和实现,但这样做的确是把时间用在了刀刃上,因为这些方法让你在开发学习算法时,节省了几个月的时间,因此,在接下来几节课中,将先来介绍如何评价你的学习算法。在此之后,我将介绍一些诊断法,希望能让你更清楚在接下来的尝试中,如何选择更有意义的方法。 


10.2 评估一个假设 

       在本节中我想介绍一下怎样用学过的算法来评估假设函数。在之后的课程中,我们将以此为基础来讨论如何避免过拟合和欠拟合的问题。 


       当我们确定学习算法的参数的时候,我们考虑的是选择参数来使训练误差最小化,但非常小的训练误差并不能说明它就一定是一个好的假设函数,因为可能会出现过拟合的问题。 

       那么,你该如何判断一个假设函数是过拟合的呢?对于这个简单的例子,我们可以对假设函数 h(x) 进行画图,然后观察图形趋势,但对于特征变量不止一个的这种一般情况,想要通过画出假设函数来进行观察,就会变得很难甚至是不可能实现。 因此,我们需要另一种方法来评估我们的假设函数过拟合检验。 

       为了检验算法是否过拟合,我们将数据分成训练集测试集,通常用 70%的数据作为训练集,用 剩下 30%的数据作为测试集 。很重要的一点是训练集和测试集均要含有各种类型的 数据,通常我们要对数据进行“洗牌”,然后再分成训练集和测试集。 


       在通过训练集让我们的模型学习得出其参数后,对测试集运用该模型,我们有两种方式计算误差: 
       1. 对于 线性回归模型 ,我们利用测试集数据计算代价函数 J 

       2. 对于 逻辑回归模型 ,我们除了可以利用测试数据集来计算代价函数外:


       误分类的比例,对于每一个测试集实例,计算:

       然后对计算结果求平均。


10.3 模型选择和交叉验证集 

        假设我们要在10个不同次数的二项式模型之间进行选择:

   

       显然越高次数的多项式模型越能够适应我们的训练数据集,但是适应训练数据集并不代表着能推广至一般情况,我们应该选择一个更能适应一般情况的模型。我们需要使用 交叉验证集 来帮助选择模型。即:使用 60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用 20%的数据作为测试集 

 

       模型选择的方法为: 

       1. 使用训练集训练出 10 个模型 
       2. 用 10 个模型分别对交叉验证集计算得出 交叉验证误差(代价函数的值) 
       3. 选取代价函数值最小的模型 

       4. 用步骤 3 中选出的模型对测试集计算得出 推广误差(代价函数的值) 

 


10.4 诊断偏差和方差 

       当你运行一个学习算法时,如果这个算法的表现不理想,那么多半是出现两种情况:要么是 偏差 比较大,要么是 方差 比较大。换句话说,出现的情况要么是 欠拟合,要么是 过拟合问题。那么这两种情况,哪个和偏差有关,哪个和方差有关,或者是不是和两个都有关?搞清楚这一点非常重要,因为能判断出现的情况是这两种情况中的哪一种,其实是一个很有效的指示器,指引着可以改进算法的最有效的方法和途径。

  

       我们通常会通过将 训练集 交叉验证集 的 代价函数误差 与 多项式的次数 绘制在同一张图表上来帮助分析: 

                       

       
       对于训练集,当 d 较小时,模型拟合程度更低,误差较大;随着 d 的增长,拟合程度提高,误差减小。 

       对于交叉验证集,当 d 较小时,模型拟合程度低,误差较大;但是随着 d 的增长,误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候。 

       如果我们的交叉验证集误差较大,我们如何判断是方差还是偏差呢? 根据上面的图表,我们知道: 


       训练集误差和交叉验证集误差近似时:偏差/欠拟合 

       交叉验证集误差远大于训练集误差时:方差/过拟合 


10.5 归一化和偏差/方差 

       在我们在训练模型的过程中,一般会使用一些 归一化 方法来 防止过拟合 。但是我们可能会归一化的程度太高或太小了,即我们在选择 λ 的值时也需要思考与刚才选择多项式模型次数类似的问题。 

 

        我们选择一系列的想要测试的 λ 值,通常是 0-10 之间的呈现 2 倍关系的值 
(如:0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10 共 12 个)。 我们同样把数据分为训练集、交叉验证集和测试集。 

        

   
      选择 λ 的方法为: 
      1. 使用训练集训练出 12 个不同程度 归一化 的模型 
      2. 用 12 模型分别对交叉验证集计算的出 交叉验证误差 
      3. 选择得出交叉验证误差最小的模型 

      4. 运用步骤 3 中选出模型对测试集计算得出 推广误差 

      我们也可以同时将训练集和交叉验证集模型的 代价函数误差  λ 的值绘制在一张图表上: 


       当 λ 较小时,训练集误差较小(过拟合)而交叉验证集误差较大 

       随着 λ 的增加,训练集误差不断增加(欠拟合),而交叉验证集误差则是先减小后增加 


10.6 学习曲线 

       学习曲线 是一种很好的工具,可以使用学习曲线来判断某一个学习算法是否处于偏差、方差问题。学习曲线是学习算法的一个很好的 合理检验(sanity check)。学习曲线是将训练集误差和交叉验证集误差作为训练集实例数量(m)的函数绘制的图表。 即,如果我们有 100 行数据,我们从 1 行数据开始,逐渐学习更多行的数据。
       思想是:当训练较少行数据的时候,训练的模型将能够非常完美地适应较少的训练数据,但是训练出来的模型却不能很好地适应交叉验证集数据或测试集数据。


       如何利用学习曲线识别高偏差/欠拟合:我们将尝试用一条直线来适应下面的数据,可以看出,无论训练集有多么大误差都不会有太大改观: 


       也就是说在 高偏差/欠拟合 的情况下,增加数据到训练集不一定能有帮助。 

       如何利用学习曲线识别 高方差/过拟合: 假设我们使用一个非常高次的多项式模型,并且归一化非常小,可以看出,当交叉验证集误差远大于训练集误差时,往训练集增加更多数据可以提高模型的效果。 


       也就是说在 高方差/过拟合 的情况下,增加更多数据到训练集可能提高算法效果。


10.7 决定下一步做什么 

       我们已经介绍了怎样评价一个学习算法,我们讨论了模型选择问题,偏差和方差的问题。那么这些诊断法则怎样帮助我们判断,哪些方法可能有助于改进学习算法的效果,而哪些可能是徒劳的呢? 

       回顾 1.1 中提出的六种可选的下一步,让我们来看一看我们在什么情况下应该怎样选择: 

      1. 获得更多的训练实例——解决 高方差 
      2. 尝试减少特征的数量——解决 高方差 
      3. 尝试获得更多的特征——解决 高偏差 
      4. 尝试增加多项式特征——解决 高偏差 
      5. 尝试减少归一化程度 λ——解决 高偏差 

      6. 尝试增加归一化程度 λ——解决 高方差 

      神经网络的方差和偏差: 

  

       使用 较小的神经网络,类似于参数较少的情况,容易导致 高偏差和欠拟合,但计算代价较小;使用 较大的神经网络,类似于参数较多的情况,容易导致 高方差和过拟合,虽然计算代价比较大,但是可以通过 归一化 手段来调整而更加适应数据。 

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

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


       以上就是我们介绍的偏差和方差问题,以及诊断该问题的学习曲线方法。在改进学习算法的表现时,你可以充分运用以上这些内容来判断哪些途径可能是有帮助的。而哪些方法可能是无意义的。如果你理解了以上几节介绍的关于方差、偏差,以及学习曲线为代表的诊断法的内容,并且懂得如何运用,那么你已经可以更有效率地应用机器学习方法有效的解决实际问题了。


十一、机器学习系统的设计(Machine Learning System Design) 

11.1 首先要做什么 

       在下面几节中,我们会试着给出一些关于如何巧妙构建一个复杂的机器学习系统的建议,这可能在构建大型的机器学习系统时,节省大量的时间。 

      以一个垃圾邮件分类器算法为例,为解决这一个问题,我们首先要做的决定是如何选择并表达 特征向量 x。我们可以选择一个由 100 个最常出现在垃圾邮件中的词所构成的列表,根据这些词是否有在邮件中出现,来获得我们的特征向量(出现为 1,不出现为 0),尺寸为 100×1。 

       为了构建这个分类器算法,我们可以做很多事,例如: 
       1. 收集更多的数据,让我们有更多的垃圾邮件和非垃圾邮件的样本 
       2. 基于邮件的路由信息开发一系列复杂的特征 
       3. 基于邮件的正文信息开发一系列复杂的特征,包括考虑截词的处理 

       4. 为探测刻意的拼写错误(把 watch 写成 w4tch)开发复杂的算法  

       在上面这些选项中,非常难决定应该在哪一项上花费时间和精力,作出明智的选择。当我们使用机器学习时,总是可以“头脑风暴”一下,想出一堆方法来试试。实际上,当你需要通过头脑风暴来想出不同方法来尝试去提高精度的时候,你可能已经超越了很多人了。

       我们将在随后的课程中讲 误差分析,我会告诉你怎样用一个更加系统性的方法,从一堆不同的方法中,选取合适的那一个。


11.2 误差分析 

       在本节中,我们将会讲到 误差分析(error analysis)的概念。这会帮助你更系统地做出决定,如果你准备研究机器学习的东西,或者构造机器学习应用程序,最好的实践方法不是建立一个非常复杂的系统,拥有多么复杂的变量,而是先构建一个简单的算法,以便你可以很快地实现它。 

       当研究机器学习的问题时,通常最多只会花24小时的时间,来试图很快的把结果搞出来。即便效果不好,但是也把它运行一遍,最后通过 交叉验证 来检验数据。一旦做完,你可以画出 学习曲线,通过画出学习曲线,以及 检验误差,来找出你的算法是否有 高偏差 和 高方差 的问题,或者别的问题。在这样分析之后,再来决定用更多的数据训练,或者加入更多的特征变量是否有用。

       原因是:在刚接触机器学习问题时,并不能提前知道你应该做什么,是否需要复杂的特征变量,是否需要更多的数据,还是其他东西。因为你缺少证据,缺少学习曲线。因此,你很难知道你应该把时间花在什么地方来提高算法的表现。但是当你实践一个非常简单即便不完美的方法时,你可以通过画出学习曲线来做出进一步的选择。你可以用这种方式来避免一种电脑编程里的过早优化问题,这种理念是:我们必须用证据来领导我们的决策,怎样分配自己的时间来优化算法,而不是仅仅凭直觉,凭直觉得出的东西一般总是错误的。

       除了画出 学习曲线 之外,一件非常有用的事是 误差分析:当我们在构造垃圾邮件分类器时,我会看一看我的交叉验证数据集,然后亲自看一看哪些邮件被算法错误地分类。因此,通过这些被算法错误分类的垃圾邮件与非垃圾邮件,你可以发现某些系统性的规律:什么类型的邮件总是被错误分类。经常地这样做之后,这个过程能启发你构造新的特征变量,或者告诉你:现在这个系统的短处,然后启发你如何去提高它。 


       构建一个学习算法的推荐方法为: 
       1. 从一个 简单的能快速实现的算法 开始,实现该算法并用 交叉验证集 数据测试这个算法 
       2. 绘制 学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择 
       3. 进行 误差分析人工检查交叉验证集 中我们算法中产生预测误差的实例,看看这些 实例是否有某种 系统化的趋势 

      以我们的垃圾邮件过滤器为例,误差分析要做的既是 检验交叉验证集 中我们的算法产生错误预测的所有邮件,看是否能将这些邮件按照类分组。然后看分类器对哪一组邮件的预测误差最大,并着手优化,思考怎样能改进分类器。例如,发现是否缺少某些特征,异常的邮件路由情况出现了多少次等等,从出现次数最多的情况开始着手优化。 


      误差分析并不总能帮助我们判断应该采取怎样的行动。有时我们需要尝试不同的模型,然后进行比较,在模型比较时,用数值来判断哪一个模型更好更有效,通常我们是看 交叉验证集的误差。 

   在 我 们 的 垃 圾 邮 件 分 类 器 例 子 中 , 对 于 “ 我 们 是 否 应 该 将 discount/discounts/discounted/discounting 处理成同一个词?”如果这样做可以改善我们算法,我们会采用一些截词软件。误差分析不能帮助我们做出这类判断,我们只能尝试采用和不采用截词软件这两种不同方案,然后根据数值检验的结果来判断哪一种更好。 

       因此,当你在构造学习算法的时候,你总是会去尝试很多新的想法,实现出很多版本的学习算法,如果每一次你实践新想法的时候,你都要手动地检测这些例子,去看看是表现差还是表现好,那么这很难让你做出决定。到底是否使用词干提取,是否区分大小写。

       但是通过一个 量化的数值评估,你可以看看这个数字,误差是变大还是变小了。你可以通过它更快地实践你的新想法,它基本上非常直观地告诉你:你的想法是提高了算法表现,还是让它变得更坏,这会大大提高你实践算法时的速度。所以我强烈推荐 在交叉验证集上来实施误差分析 ,而不是在测试集上。 

       总结一下,当你在研究一个新的机器学习问题时,推荐先实现一个较为简单快速、即便不是那么完美的算法。而大家经常干的事情是:花费大量的时间在构造算法上,构造他们以为的简单的方法。因此,不要担心你的算法太简单,或者太不完美,而是尽可能快地实现你的算法。当你有了初始的实现之后,它会变成一个非常有力的工具,来帮助你决定下一步的做法。因为我们可以先看看算法造成的错误,通过误差分析,来看看他犯了什么错,然后来决定优化的方式。

      另一件事是:假设你有了一个快速而不完美的算法实现,又有一个数值的评估数据,这会帮助你尝试新的想法,快速地发现你尝试的这些想法是否能够提高算法的表现,从而你会更快地做出决定,在算法中放弃什么,吸收什么误差分析可以帮助我们系统化的选择该做什么。


11.3 类偏斜的误差度量 

       在前面的课程中,我提到了误差分析,以及设定误差度量值的重要性。那就是,设定某个实数来评估你的学习算法,并衡量它的表现。有一件重要的事情要注意,就是使用一个合适的误差度量值,这有时会对于你的学习算法造成非常微妙的影响,这件重要的事情就是 偏斜(skewed classes)的问题。类偏斜情况表现为我们的训练集中有非常多的同一种类的实例,只有很少或没有其他类的实例。 

       例如我们希望用算法来预测癌症是否是恶性的,在我们的训练集中,只有 0.5%的实例是恶性肿瘤。假设我们编写一个非学习而来的算法,在所有情况下都预测肿瘤是良性的,那么误差只有 0.5%。然而我们通过训练而得到的神经网络算法却有 1%的误差。这时,误差的大小是不能视为评判算法效果的依据的。 

       查准率(Precision)和 查全率(Recall)我们将算法预测的结果分成四种情况: 
       1. 正确肯定(True Positive,TP):预测为真,实际为真 
       2. 正确否定(True Negative,TN):预测为假,实际为假 
       3. 错误肯定(False Positive,FP):预测为真,实际为假 

       4. 错误否定(False Negative,FN):预测为假,实际为真  

       则: 

       查准率 = TP/(TP+FP)例,在所有我们 预测 有恶性肿瘤的病人中,实际上有恶性肿瘤的病人的百分比,越高越好。 
       查全率 = TP/(TP+FN)例,在所有 实际 上有恶性肿瘤的病人中,成功预测 有恶性肿瘤的病人的百分比,越高越好。 

        这样,对于我们刚才那个总是预测病人肿瘤为良性的算法,其查全率是 0。 


11.4 查全率和查准率之间的权衡 

       在之前的课程中,我们谈到查准率和召回率,作为遇到 偏斜类 问题的评估度量值。在很多应用中,我们希望能够保证查准率和召回率的相对平衡。在这节课中,我将告诉你应该怎么做,同时也向你展示一些查准率和召回率作为算法评估度量值的更有效的方式。

       继续沿用刚才预测肿瘤性质的例子。假使,我们的算法输出的结果在 0-1 之间,我们使用阀值 0.5 来预测真和假。 


       查准率(Precision)=TP/(TP+FP) 例,在所有 预测 有恶性肿瘤的病人中,实际上 有恶性肿瘤的病人的百分比,越高越好。 

       查全率(Recall)=TP/(TP+FN)例,在所有 实际上 有恶性肿瘤的病人中,成功预测 有恶性肿瘤的病人的百分比,越高越好。 

       如果我们希望只在非常确信的情况下预测为真(肿瘤为恶性),即我们希望 更高的查准率,我们可以使用比 0.5 更大的阈值,如 0.7,0.9。这样做我们会减少错误预测病人为恶性肿瘤的情况,同时却会增加未能成功预测肿瘤为恶性的情况。 

      如果我们希望 提高查全率,尽可能地让所有有可能是恶性肿瘤的病人都得到进一步地检查、诊断,我们可以使用比 0.5 更小的阈值,如 0.3。 

     我们可以将不同阀值情况下,查全率与查准率的关系绘制成图表,曲线的形状根据数据的不同而不同:


      我们希望有一个帮助我们选择这个阈值的方法。一种方法是计算 F1值(F1 Score),其计算公式为: ,我们选择使得 F1值最高的阈值


11.5 机器学习的数据 

       在之前,我们讨论了 评价指标。在本节,讨论一下机器学习系统设计中另一个重要的方面,这往往涉及到用来训练的数据有多少。在之前的一些视频中,我曾告诫大家不要盲目地开始,而是花大量的时间来收集大量的数据,因为数据在一定条件下有时是唯一能实际起到作用的。在本节中会讲到这些条件是什么。

      得到大量的数据并在某种类型的学习算法中进行训练,可以是一种有效的方法来获得一个具有良好性能的学习算法。而这种情况往往出现在这些条件对于你的问题都成立 ,并且你能够得到大量数据的情况下。

      很多很多年前,两位研究人员 Michele Banko 和 Eric Brill 进行了一项有趣的研究,他们尝试通过机器学习算法来区分常见的易混淆的单词,他们尝试了许多种不同的算法, 并发现数据量非常大时,这些不同类型的算法效果都很好。

        

       比如,在“早餐我吃了__个鸡蛋 (to,two,too)”这个例子,“早餐我吃了 2 个鸡蛋”,这是一个易混淆的单词的例子。于是他们把诸如这样的机器学习问题,当做一类 监督学习问题,并尝试将其分类,什么样的词,在一个英文句子特定的位置,才是合适的。他们用了几种不同的学习算法,这些算法都是在他们 2001 年进行研究的时候,都已经被公认是比较领先的。因此他们使用了一个方差,用于逻辑回归上的一个方差,被称作"感知器" (perceptron)。他们也采取了一些过去常用,但是现在比较少用的算法,比如 Winnow 算法,很类似于回归问题,但在一些方面又有所不同。还有一种基于内存的学习算法,现在也用得比较少了,但是我稍后会讨论一点,而且他们用了一个朴素算法。

       这些具体算法的细节不那么重要,我们下面希望探讨,什么时候我们会希望获得更多数据,而非修改算法。他们所做的就是改变了训练数据集的大小,并尝试将这些学习算法用于不同大小的训练数据集中,这就是他们得到的结果。 


       这些趋势非常明显首先大部分算法,都具有相似的性能,其次,随着训练数据集的增大,在横轴上代表以百万为单位的训练集大小,从 0.1 个百万到 1000 百万,也就是到了 10 亿规模的训练集的样本,这些算法的性能也都对应地增强了。 

       事实上,如果你选择任意一个算法,可能是选择了一个"劣等的"算法,如果你给这个劣等算法更多的数据,那么从这些例子中看起来的话,它看上去很有可能会其他算法更好,甚至会比"优等算法"更好。由于这项原始的研究非常具有影响力,因此已经有一系列许多不同的研究显示了类似的结果。这些结果表明,许多不同的学习算法有时倾向于表现出非常相似的表现,这还取决于一些细节,但是真正能提高性能的,是你能够给一个算法大量的训练数据。像这样的结果,引起了一种在机器学习中的普遍共识:"取得成功的人不是拥有最好算法的人,而是拥有最多数据的人"。 

       那么这种说法在什么时候是真,什么时候是假呢?因为如果我们有一个学习算法,并且如果这种说法是真的,那么得到大量的数据通常是保证我们具有一个高性能算法的最佳方式, 而不是去争辩应该用什么样的算法。 
       假如有这样一些假设,在这些假设下有大量我们认为有用的训练集,我们假设在我们的机器学习问题中,特征值 x 包含了足够的信息,这些信息可以帮助我们用来准确地预测 y,例如,如果我们采用了一些容易混淆的词,如:two、to、too,假如说它能够描述 x,捕捉
到需要填写的空白处周围的词语,那么特征捕捉到之后,我们就希望有对于“早饭我吃了 __鸡蛋”,那么这就有大量的信息来告诉我中间我需要填的词是“两个” (two),而不是单 词 to 或 too,因此特征捕捉,哪怕是周围词语中的一个词,就能够给我足够的信息来确定 出标签 y 是什么。换句话说,从这三组易混淆的词中,我应该选什么词来填空。 

       那么让我们来看一看,大量的数据是有帮助的情况。假设特征值有足够的信息来预测 y 值,假设我们使用一种需要大量参数的学习算法,比如有很多特征的逻辑回归或线性回归,或者用带有许多隐藏单元的神经网络,这些都是非常强大的学习算法,它们有很多参数,这些参数可以拟合非常复杂的函数,因此我要调用这些,我将把这些算法想象成 低偏差算法,因为我们能够拟合非常复杂的函数。很有可能,如果我们用这些数据运行这些算法,这种算法能很好地拟合训练集,因此,训练误差就会很低了。 
       现在假设我们使用了非常非常大的训练集,在这种情况下,尽管我们希望有很多参数,但是如果训练集比参数的数量还大,甚至是更多,那么这些算法就不太可能会过度拟合。也就是说 训练误差有希望接近测试误差。 
       另一种考虑这个问题的角度是为了有一个高性能的学习算法,我们希望它不要有高的偏差和方差。因此偏差问题,我么将通过确保有一个具有很多参数的学习算法来解决,以便我们能够得到一个较低偏差的算法,并且通过用非常大的训练集来保证。 

      

       我们的算法将没有方差,并且通过将这两个值放在一起,我们最终可以得到一个低误差和低方差的学习算法。这使得我们能够很好地测试测试数据集。从根本上来说,这是一个关键的假设:特征值有足够的信息量,且我们有一类很好的函数,这是为什么能保证低误差的关键所在 。它有大量的训练数据集,这能保证得到更多的方差值,因此这给我们提出了一些可能的条件,如果你 有大量的数据,而且你训练了一种带 有很多参数的学习算法,那么这将会是一个很好的方式,来提供一个高性能的学习算法。 

       关键的测试是:首先,一个人类专家看到了特征值 x,能很有信心的预测出 y 值吗? 因为这可以证明 y 可以根据特征值 x 被准确地预测出来。其次,我们实际上能得到一组庞大的训练集,并且在这个训练集中训练一个有很多参数的学习算法吗?如果你能做到这两者,那么更多时候,你会得到一个性能很好的学习算法。 

猜你喜欢

转载自blog.csdn.net/zhuangv587/article/details/80541769