• 过拟合和欠拟合


    过拟合:

    原因:

    1. 模型太复杂,训练数据量太少(模型很好的记住了所有的训练样本,特别是数据量少于特征数)

    2. 训练集和测试集样本分布不一致;

    3. 训练集的噪音过大,导致模型只注意学习噪音了,忽略了真正有用的特征;

    4. 训练迭代次数过多,导致模型学习了噪音和无用特征;

    解决方法:

    0.神经网络权重衰减,等价于L2范数正则化;dropout来应对过拟合

    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之间进行关联,增强了数据,提高了模型的泛化性;

    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. 使用迁移学习,复用类似任务的神经网络前几层,从而使小训练集也能得到效果不错的模型;

  • 相关阅读:
    在sql语句中使用 xml for path 格式化字符串的方法总结
    Android handler的使用简单示例
    easyui datagrid中 多表头方法总结
    使用ICSharpCode.SharpZipLib.Zip类库解压zip文件的方法
    ThreadPoolExecutor 优雅关闭线程池的原理.md
    ThreadPoolExecutor 几个疑惑与解答
    如何在运行时(Runtime)获得泛型的真正类型
    为什么 EXISTS(NOT EXIST) 与 JOIN(LEFT JOIN) 的性能会比 IN(NOT IN) 好
    Spring MVC 上下文(ApplicationContext)初始化入口
    Tomcat生成的session持久化到MySQL
  • 原文地址:https://www.cnblogs.com/BetterThanEver_Victor/p/11655499.html
Copyright © 2020-2023  润新知