1 过拟合问题
1.1 问题定义:过拟合(overfitting)是具体表现就是最终模型在训练集上效果好;在测试集上效果差。模型泛化能力弱。
1.2 出现过拟合的原因
1. 训练集的数量级和模型的复杂度不匹配。训练集的数量级要小于模型的复杂度;
2. 训练集和测试集特征分布不一致;
3. 样本里的噪音数据干扰过大,大到模型过分记住了噪音特征,反而忽略了真实的输入输出间的关系;
4. 权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征。
1.3 避免此类问题的手段
- data augmentation(增加数据):增广的方式是对图像旋转,缩放,剪切,添加噪声等
- simpler model structure(简化模型):调小模型复杂度,使其适合自己训练集的数量级(缩小宽度和减小深度)
- regularization(正则化): 正则化可以保持模型简单,另外,规则项的使用还可以约束我们的模型的特性。有L1和L2两种形式(L1是变稀疏,L2是让权重变小)
- dropout(丢失):这个方法在神经网络里面很常用。dropout方法是ImageNet中提出的一种方法,通俗一点讲就是dropout方法在训练的时候让神经元以一定的概率不工作
- 树模型中采用剪枝的方式进行
- early stopping(提前停止)
- BatchNormalization :BN的核心思想不是为了防止梯度消失或者防止过拟合,其核心是通过对系统参数搜索空间进行约束来增加系统鲁棒性,这种约束压缩了搜索空间,约束也改善了系统的结构合理性,这会带来一系列的性能改善,比如加速收敛,保证梯度,缓解过拟合等。
- ensemble(集成学习算法):也可以有效的减轻过拟合。Bagging通过平均多个模型的结果,来降低模型的方差。Boosting不仅能够减小偏差,还能减小方差。
重新清洗数据:数据清洗从名字上也看的出就是把“脏”的“洗掉”,指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。
二、欠拟合((高偏差))
2.1 问题定义:欠拟合是指模型在训练集、验证集和测试集上均表现不佳的情况
2.2 避免此类问题的手段
- 模型复杂化:例如用神经网络来替代线性回归,用随机森林来代替决策树等
- 增加更多的特征:使输入数据具有更强的表达能力:
- 调整参数和超参数:超参数包括:神经网络中:学习率、学习衰减率、隐藏层数、隐藏层的单元数、Adam优化算法中的β1和β2参数、batch_size数值等其他算法中:随机森林的树数量,k-means中的cluster数,正则化参数λ等
- 降低正则化约束:正则化约束是为了防止模型过拟合,如果模型压根不存在过拟合而是欠拟合了,那么就考虑是否降低正则化参数λλ或者直接去除正则化项
增加训练数据往往没有用:欠拟合本来就是模型的学习能力不足,增加再多的数据给它训练它也没能力学习好
