斯坦福机器学习(6)

2020-11-22  本文已影响0人  西部小笼包

前情回顾

上一篇文章里,我们详细梳理了梯度下降算法和神经网络的后向传播算法的原理。以及关系。
我们了解到整个过程就是不断根据上家输入产生自己的输出,随后根据真实的画作或下家的反馈,反向优化上家的过程。而优化的方法,就是通过后向传播,用偏导更新。

如何正确的应用机器学习算法

在设计机器学习系统的时候,怎样选择一条最合适、最正确的道路?
在你得到你的学习参数以后,假如说你发现在预测房价时产生了巨大的误差,要想改进这个算法,应该怎么办?

  1. 收集更多的训练样本
  2. 用更多的特征
  3. 用更少的特征
  4. 增加多项式的特征
  5. 减少正则化程度
  6. 增加正则化程度

我们有多个二项式模型。在验证算法的性能时候,我们需要把数据分为3个部分,训练集,交叉验证集 和 测试集。有些人可能会只分成2部分,那么这样的话,数据其实是会向测试集侧过拟合,因为你的整个训练最终是按最小化测试集的误差来评判的。
而分成3部分的意义在于,我们在交叉验证集里选择了最小误差的算法,最后再用测试集去求得实际的效果。这样这个测试集的反馈会比较真实。因为算法事先完全不知道测试集的上下文。

image.png

过拟合 和 欠拟合

下面这幅图描述了多项式的维度和误差的关系。我们可以看到当维度(次数)低的时候,两边误差都很高。所以这个时候模型未能很好的拟合数据,我们称之为高偏差,就是欠拟合。
而次数过多的时候,训练集的误差很小,但是交叉验证集的误差很大。我们称之为高方差,就是过拟合。表示模型过度依赖训练集,而缺失一般性。


image.png

下图左边就是欠拟合,右边就是过拟合


image.png

我们之前也介绍了正则化,可以减少过拟合的问题。但是选择lambda的值时,过高和过低也会有问题。
如果lambda过大,就会使得正则项占主导位置而拟合的不好。过小就等于没有,解决不了原先的过拟合问题。


image.png

关系如下图,一开始是过拟合问题,随着lambda增大会过度到欠拟合问题


image.png

如何区别2类问题

当我们有一个模型,我们可以通过绘制学习曲线,来知道他是过拟合问题或欠拟合问题。
绘制学习曲线,我们就是横轴,逐步增多训练使用的数据。分别绘制这些数据训练处的theta在训练集和验证集的误差。

如果是高偏差问题,最后2条线会相聚于一个高error值. 所以高偏差问题


image.png

如果是高方差问题,也就是过拟合,那么随着数据量的增多,会逐渐收敛。但是训练集和验证集会有一个GAP。


image.png

那么适合的参数,就意味着数据增多的情况下,会快速在error较低的位置一起相聚。

所以如果模型没有选择对,我们只是增加更多的训练样本,是解决不了高偏差(欠拟合)问题的。
当我们通过学习曲线发现是高方差(过拟合)的问题。我们可以减少特征,增加训练样本,增加正则化程度。
反之,要解决欠拟合问题。我们要增加多项式特征,增加更多特征,减少正则化程度。

对于神经网络来说。同样会有一个lambda,和之前一样。增加多项式,就等价增加隐藏层层数或是增加隐藏层的神经元。这2种方式都可以解决欠拟合。如果发生过拟合,一般是参数过多,可以通过减少参数,减少层数,或者通过加大lambda来修正。


image.png

误差分析

如果你准备构造机器学习应用程序,最好的实践方法不是建立一个非常复杂的系统,拥有多么复杂的变量;而是构建一个简单的算法,并很快地实现它。

一旦做完,你可以画出学习曲线,以及检验误差,来找出你的算法是否有高偏差和高方差的问题,或者别的问题。

我们必须用证据来领导我们的决策,怎样分配自己的时间来优化算法,而不是仅仅凭直觉,凭直觉得出的东西一般总是错误的。

除了画出学习曲线之外,一件非常有用的事是误差分析,我的意思是说:当我们在构造垃圾邮件分类器时,我会看一看我的交叉验证数据集,然后亲自看一看哪些邮件被算法错误地分类。

什么类型的邮件总是被错误分类。经常地这样做之后,这个过程能启发你构造新的特征变量,或者告诉你:现在这个系统的短处,然后启发你如何去提高它。

误差值的设定

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

这个时候,我们需要引入2个新的概念。 查准率(Precision)和查全率(Recall)

查准率就是在你所有预测为真的情况下,实际为真的概率是多少。
查全率就是在所有实际为真的样本里,你预测出来的真的概率是多少。

如果查准率过低,那么你会给很多健康的人发送癌症诊断书。
如果查全率低的话,你会漏掉给很多得癌症的人发送癌症诊断书。

所以那个所有情况下都预测肿瘤是良性的,查全率是为0的。那么就不是个好算法。这2者是事物的两面,一个是宁可错杀,不漏1个。 一个是无罪推论。
所以我们引入F1 值(F1 Score),来给出一个综合得分。
p 是precision是查准率。 r 是recall, 是查全率。

f1 = 2 * p * r / (p + r)

大数据对机器学习的意义

如果你选择任意一个算法,可能是选择了一个"劣等的"算法,如果你给这个劣等算法更多的数据,那么从这些例子中看起来的话,它看上去很有可能会其他算法更好,甚至会比"优等算法"更好。像这样的结果,引起了一种在机器学习中的普遍共识:"取得成功的人不是拥有最好算法的人,而是拥有最多数据的人"。

这里就取决于,我们的模型是否输入足够推断出Y的所有x特征。如果满足X 是足够的,那么只要数据量足够大,大多数时候算法不是那么重要。

总结

我们了解了如何评价一个机器学习算法或程序的性能。知道有哪几种常见手段可以去解决过拟合问题,哪几种可以解决欠拟合问题。
有了一个算法,如何通过绘制学习曲线来观察这是哪类问题。
知道数据集可以被分为3类。训练集,验证集和测试集。及每类的意义。
误差分析的作用,如何设定合理的误差值
大数据对机器学习下什么时候是有意义的。

上一篇下一篇

猜你喜欢

热点阅读