

【机器学习】李宏毅——机器学习任务攻略 - FavoriteStar
source link: https://www.cnblogs.com/FavoriteStar/p/16983202.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

【机器学习】李宏毅——机器学习任务攻略
这一节的主要内容是当测试数据的准确度不够高的时候应该怎么做。
首先一定要检查你的训练数据集的误差,如果发现是你的训练数据集误差也比较大,那么就有两种可能:
- 模型过于简单,无法很好的拟合当前的数据集
- 陷入局部最优价,也就是优化算法做的不够好
那么如果分辨这两种情况呢?找模型来比较

例如在上图,一个20层的神经网络和56层的神经网络,发现测试集上56层的神经网络的误差更大,那么这很容易让我们觉得这是过拟合的问题,但是如果我们检查一下训练集的误差发现,同样是56层的误差更大,这就说明不是过拟合,如果是过拟合应该是56层的网络的训练集的误差很小才对,那么56层的神经网络肯定比20层的复杂度高,只剩下一种可能就是优化算法做得不够好
那么这给我们的启发就是,在面对一个未知的问题时可以这样做:
- 先训练一些简单的模型,比如层次较低的神经网络,比较SVM,这些模型的优化算法比较容易实现,就会找到在这个模型复杂度下的最优价
- 再训练复杂的模型,如果复杂的模型明明弹性(即复杂度)比简单的模型更大,可误差反而更加不理想,那么可能就是复杂模型的优化算法做得不够好了
那么经过上述解决完训练数据的问题,使得训练数据精度足够小时再重新计算测试数据的精度,如果此时仍然是测试数据的误差很大,那么就有可能是真的遇到了过拟合的问题,甚至是遇到了mismatch问题,解决办法有两个:
- 最直接的方法就是增加训练数据集。例如找新的数据,或者对数据进行处理,图像翻转等等
- 给模型更多的限制,例如给比较少的参数,共用参数,正则化、早停等等
模型复杂度与误差的曲线大致如下:

在选取不同的模型时,最好是不要直接在测试集上比较,因为测试集是用来衡量该模型的泛化误差的,因此通常是将原本的训练集分为训练集和验证集两部分,在训练集上训练各个不同的模型,然后再在验证集上选出最好的模型,再在测试集上得到该模型的泛化能力。那么这个时候就要考虑到验证集选取的问题了,为了避免随机选取到不合适的验证集,可以用k折交叉验证:

即将训练数据进行k等分,然后选取其中一个作为验证集其他作为训练集,然后训练模型并验证在验证集上的好坏,这个操作重复k次保证每一个子集都有机会当验证集,之后将k次结果去平均即可。
mismatch问题就是训练集的分布和测试集的分布是不同的分布,这就导致不管你如何增加训练集的数据或者改进模型都很难在测试集上取得好的结果。
本文作者:FavoriteStar
本文链接:https://www.cnblogs.com/FavoriteStar/p/16983202.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
Recommend
-
13
如何判断导数值为零的点的类型 当发现训练数据集误差不再下降的时候,不是只有卡在局部最小值的情况,还有另外一种情况是处于鞍点,鞍点位置处...
-
4
前面我们所讲的模型,输入都是一个向量,但有没有可能在某些场景中输入是多个向量,即一个向量集合,并且这些向量的数目并不是固定的呢?
-
8
【机器学习】李宏毅——线性降维 降维,可以用...
-
6
假设我们当前要做一个人工智能客服系统,那该系统就需要对用户输入的话语进行辨认,例如用户输入: I want to arrive Taipei on November 2nd 那么该系统就能够辨认出来Taipei是目的地,而后...
-
6
Transformer具体就是属于Sequence-to-Sequence的模型,而且输出的向量的长度并不能够确定,应用场景如语音辨识、机器翻译,甚至是语音翻译等等,在文字上的话例如聊天机器人、文章摘要等等,在分类问题上如果有问题是...
-
1
1、基本概念介绍 1.1、What is Generator 在之前我们的网络架构中,都是对于输入x得到输出y,只要输入x是一样的,那么得到的输出y就是一样的。 但是Generator不...
-
6
1、BERT简介 首先需要介绍什么是自监督学习。我们知道监督学习是有明确的样本和对应的标签,将样本丢进去模型训练并且将训练结果将标签进行比较来修正模型,如下图:
-
6
异常检测概述 首先要明确一下什么是异常检测任务。对于异常检测任务来说,我们希望能够通过现有的样本来训练一个架构,它能够根据输入与现有样本之间是否足够相似,来告诉我们这个输入是否是异常的,例如下...
-
3
读这篇文章之间欢迎各位先阅读我之前写过的线性降维的文章。这篇文章应该也是属于Unsupervised Learning的内容的。 Neighbor Embedding...
-
6
在前面的学习之中,我们已经学习了很多的模型,它能够针对特定的任务,接受我们的输入并产生目标的输出。但我们并不满足于此,我们甚至希望机器告诉我们,它是如何得到这个答案的,而这就是可解释的机器学习。
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK