陕西手机网站建设,移动电子商务网站建设研究,免费的进销存管理系统,dedecms网站空白吴恩达《机器学习》学习笔记十一——应用机器学习的建议一、训练完模型后下一步要做什么二、评估算法与模型选择1.训练集与测试集2.训练/测试步骤3.模型选择4.数据集新的划分——验证集的加入三、偏差与方差1.偏差与方差的理解2.正则化和偏差方差的关系3.学习曲线四、决定接下来…
吴恩达《机器学习》学习笔记十一——应用机器学习的建议一、训练完模型后下一步要做什么二、评估算法与模型选择1.训练集与测试集2.训练/测试步骤3.模型选择4.数据集新的划分——验证集的加入三、偏差与方差1.偏差与方差的理解2.正则化和偏差方差的关系3.学习曲线四、决定接下来要做什么经过前十次笔记的学习已经掌握了线性回归、逻辑回归和神经网络三种经典的机器学习算法并学会了使用正则化来防止过拟合。下面将跳出具体的算法学习对机器学习模型的评估以及应用过程中优化的一些建议。
一、训练完模型后下一步要做什么
在设计机器学习的系统时能够明白如何选择一条最合适、最高效的道路是一切的源头如果没有合适的技巧可能会在不断地尝试过程中浪费很多时间比如选择什么模型、是否要特征映射、选择哪些特征、是否要花时间多采集数据等等。这些事情可能既花费很多时间但最后还可能对系统性能的提升没有帮助。
所以下面会给出一些建议和指导帮助开发者明白怎样进行选择是有益于模型性能提升的。具体来说假如你在开发一个机器学习系统或想试着改进一个机器学习系统的性能你应该如何决定接下来该选什么操作。
为了更形象地说明用房价预测的模型来作为例子 假设我们已经完成了带有正则化的线性回归模型来预测房价代价函数如上图所示但是当将训练好的模型用于一组新的数据来进行预测时发现有很大的误差那么接下来我们该怎么做来进一步改善这个模型
下面是可能进行的一些尝试 比如可能会想是数据样本不够要去获取更多的训练样本 可能是特征太多过拟合了所以要减少一些特征的数量 也可能是特征数量太少要增加一些 也可能是线性模型太简单要加入一些多项式特征来增加模型复杂度 还可能想到调节λ等的一些超参数。
这些尝试可能会非常耗费时间而且最关键的是如何选择很可能是凭人们的感觉这样就有太大的主观性。
但是有一系列简单的方法能让你事半功倍快速地排除一些对模型的优化没有效果的可能选项大大地节省尝试的时间。
下面将介绍怎样评估机器学习算法的性能然后将介绍这种能够事半功倍的方法——机器学习诊断法这是一种测试通过测试你可以知道算法在哪里出现了问题这也就是说想要改进算法性能应该进行什么样的尝试才是有意义的。
二、评估算法与模型选择
在这之前评估假设函数好坏与否是通过代价函数值来判断的。但是在训练集上代价函数小并不能说假设函数一定好也可能在新的测试集上表现很差也就是过拟合现象的存在。
过拟合现象我们还可以通过画出假设函数查看与数据样本的拟合曲线来判断但是当你的特征很多的时候如下图所示假设函数h(x)也是无法可视化的。因此我们需要另一种评估假设函数的方法。
1.训练集与测试集
一般来说对于一个数据集我们在训练之前需要将其进行划分为两部分 要分为训练集和测试集两部分一般的原则是70%的数据当做训练集30%的数据当做测试集当然在划分之前要打乱数据保证划分的随机性。
2.训练/测试步骤
使用训练集对参数进行优化最小化代价函数J(θ)然后用训练好的参数去计算测试集上的代价函数值测试模型的泛化能力。
线性回归 逻辑回归
3.模型选择
如果你不知道你的模型应该用哪些多项式特征或者不知道正则化系数应该设置成多少是最合适的这类问题被称为模型选择问题。
下面看一个模型选择的例子 选择具体用多少次幂的特征组合来拟合数据比较好我们需要对每个模型训练出它们各自的参数并计算出各自对应的测试集上的误差选择一个较小的作为最终的模型但是这样也不能说明它的泛化性能一定好因为测试集已经用于选择模型了没有额外的数据来衡量它的泛化性能只是一个乐观的估计。
4.数据集新的划分——验证集的加入
相比于之前将数据集划分为训练集和测试集两种现在我们将数据集划分为三部分训练集、验证集和测试集训练集用于训练模型验证集用于模型选择测试集用于测试模型的泛化能力。 它们相应的代价函数 这边不同的是之前选择模型的时候是通过测试集误差来选择的现在通过验证集误差来选择 那么测试集就可以来衡量它的泛化能力了。
三、偏差与方差
当运行一个学习算法时如果这个算法的表现不理想那么多半是出现两种情况要么是偏差较大要么是方差较大换句话说要么是欠拟合问题要么是过拟合问题在这种情况下搞清楚是偏差问题还是方差问题或两者都有关系是非常重要的因为这样能很快找到有效的解决方法和途径来改进算法。
1.偏差与方差的理解
回顾一下线性回归的欠拟合和过拟合的情况 前面介绍了训练集和验证集的概念这里我们来看一下它们随着假设函数的次数变高它们的变化 图中横坐标表示多项式的次数d纵坐标表示误差即代价函数的值。那么当d很小时假设函数很简单是欠拟合的情况当d很大时假设函数过于复杂是过拟合的情况。对于训练集误差欠拟合时误差很大随着假设函数变复杂误差会越来越小过拟合时会非常小如图中紫红色的曲线所示而对于验证集误差欠拟合和过拟合时的误差都会很大即泛化能力很差只有合理拟合的情况才会相对比较小如图中大红色曲线所示。
从这张图中我们可以来区分偏差和方差区域 左边的部分是偏差高的情况它对应着欠拟合特点是训练集和验证集的误差都很高右边的部分是方差高的情况它对应着过拟合特点是训练集误差很小但是验证集误差很大。
2.正则化和偏差方差的关系
正则化可以很好的防止过拟合那么正则化和偏差方差又有什么关系呢先来看一个例子 这是带有正则化的线性回归正则化系数的选择会对结果产生很大影响当λ很大时参数都会变得接近于0假设函数近似等于一个常数当λ很小时起不到太大防止过拟合的作用假设函数又会过于复杂所以选择这个系数非常重要。
这边我们先给出一些表达式假设函数、带正则化的代价函数、以及三个数据集上不带正则化的代价函数表达式如下所示 然后我们看一下对正则化系数λ进行模型选择的过程 和前面选择多项式次数的情况非常相似求出每种λ对应模型的参数然后选择其中在验证集上误差最小的作为最终的模型测试集误差来衡量其泛化能力。
那么改变正则化系数λ对训练集和验证集的误差会有什么影响呢 图中横坐标为正则化系数λ纵坐标为代价函数的值。当λ很小时对应着过拟合的情况所以训练误差小验证误差大当λ很大时对应着欠拟合的情况所以训练误差和验证误差都大。图中蓝色的曲线是训练集误差紫红色曲线是验证集误差左边对应高方差情况右边对应高偏差情况。
3.学习曲线
如果你想检查你的学习算法运行是否一切正常或者希望改进算法的表现那么绘制学习曲线是非常有用的这是一个很好的工具。可以用学习算法来判断一个学习算法是否处于偏差、方差问题或者是两者都有。
先从一个例子来理解一些学习曲线 注意图中横坐标是训练集样本的个数纵坐标是误差那么一个确定的假设函数的形式在训练集上当训练样本很少的时候很容易拟合而且误差会很小随着样本数越来越多平均误差的值也将越来越大所以训练集上的代价函数的变化如蓝色曲线所示但是对于验证误差来说训练样本少使得模型的泛化能力较弱所以验证集上的误差较大而随着训练样本增多模型学习的越来越好泛化能力逐渐变强所以验证集上的代价函数的变化如紫红色曲线所示。
上面介绍的是一般情况下面我们看一下特例首先是高偏差的学习曲线 高偏差的情况就是欠拟合的情况从上面右边的图可以看出来增大数据样本到一定程度训练误差和验证误差的变化就都不会太大了所以变化曲线是左边图中所示它们都趋向于一个较大的值然后平稳发展。所以遇到高偏差的情况增大数据样本改善不大。
然后是高方差的情况 高方差的情况就是过拟合的情况随着训练数据的增多过拟合还是会过拟合但是平均误差也会慢慢地上升而验证误差则会慢慢的下降特点是验证误差与训练误差之间有比较大的间隔。但是随着数据样本的增多可以看到对学习算法还是有所改善的。
四、决定接下来要做什么
有了上面的知识知道如何评估算法、什么是模型选择、偏差与方差以及学习曲线的概念我们就可以根据评估算法的结果来进行相应的尝试使得模型性能得以优化一些明显无意义的操作可以直接不用管。让我们再回到开头的问题 这时就可以理解这些操作能够各自应对什么问题
增加训练数据是应对高方差的 减少特征数量是应对高方差 增加额外的特征与增加多项式特征是应对高偏差 减小正则化系数λ是应对高偏差 增大正则化系数是应对高方差。
最后我们将以上的知识结合到神经网络模型中因为神经网络是目前比较流行的模型 简单的神经网络会欠拟合复杂的神经网络容易过拟合具体怎么选择神经网络的层数以及每个隐藏的神经元个数可以用到上面模型选择的方法划分数据集用验证集选出最合适的模型。