过拟合:
原因:
1. 模型太复杂,训练数据量太少(模型很好的记住了所有的训练样本,输入非训练样本统统都看运气)
2. 训练集和测试集样本分布不一致;
3. 训练集的噪音过大,导致模型只注意学习噪音了,忽略了真正有用的特征;
4. 训练迭代次数过多,导致模型学习了噪音和无用特征;
解决方法:
1. 减小模型复杂度,减小模型参数量;
1.1 减少神经网络的宽度、深度;
1.2 正则化:L1-Norm(模型参数降维作用), L2-Norm(易求导); 贝叶斯学派的角度是加入了模型参数符合高斯分布这一先验知识;奥坎姆剃刀律,简单的即使泛化性好的;
1.3 决策树的剪枝;
1.4 权值共享:CNN卷积核的权值共享,RNN每个时序单元之间的权值共享;
2. 数据增强;
2.1 图像数据上,进行旋转、反转、缩放、剪切、增加噪声等
2.2 过采样:随机过采样,近邻随机插值过采样,边界样本过采样;
2.3 用GAN网络或者强化学习模拟去“制造”假数据;
2.4 给数据增加噪声;给模型增加噪声(例如神经网络权值初始化使用0均值的高斯分布)
2.5 Batch Normalization: 通过对数据进行和同一mini-batch之间进行关联,增强了数据,提高了模型的泛化性;
2.6 输入数据的归一化(zscore):相当于把数据拉回到了原点附近,减少过拟合的风险,加快了训练收敛速度;
3. Ensemble:(多个模型的组合可以弱化每个模型中的异常点的影响,保留模型之间的通性,弱化单个模型的特性)
3.1 bagging可降低模型的方差;
3.2 boosting既可降低模型的方差,也可降低模型的偏差;(Adaboost, GBDT, xgboost)
3.3 dropout(也是模型稀疏化的一种): 把很多稀疏网络捆成一个分类器,类似于在模型角度了bagging;
3.4 Random-forest的特征采样(xgboost也用了),也相当于弱化每个节点,通过多棵弱树构造一个强分类器;(Random-forest的多棵树也使用了样本的baggin)
4. Early stopping: 连续N轮迭代没有提高Validation-set上的accuracy,则停止训练;
5. N-fold交叉验证:减少噪音对模型的影响;
搞不懂:
对样本数据可能存在分类决策面不唯一,随着学习的进行,,BP算法使权值可能收敛过于复杂的决策面;
在神经网络模型中,可使用权值衰减的方法,即每次迭代过程中以某个小因子降低每个权值。
欠拟合:
1. 添加新特征:当特征不足,或现有特征与样本label的相关性不强时,易过拟合。
可挖掘“上下文特征”“ID类特征”“组合特征”等新特征;FM、GBDT、Deep&Wide等自动挖掘组合特征的模型;
2. 增加模型的复杂度:线性模型中添加高次项;神经网络中增加深度或宽度;
3. 减小正则化系数
4. 使用迁移学习,复用类似任务的神经网络前几层,从而使小训练集也能得到效果不错的模型;