美文网首页机器学习
Xgboost之增量学习

Xgboost之增量学习

作者: 可能性之兽 | 来源:发表于2022-05-14 19:05 被阅读0次

    日常处理数据过程中,我们会遇到新数据的增加这个问题,我们既想增加新数据,又想利用原先的模型,迁移学习和增量学习就应运而生了

    增量学习可以分为3类:样本增量学习(SIL),类别增量学习(CIL),特征增量学习(FIL)
    1、SIL
    问题:由于新数据的各种原因,样本的特征值可能会改变,每个类别的比例也会改变。这些都会影响分类的准确率。
    任务:因此,需要确保在现有知识的情况下,通过新样本的增量学习来提取新知识,融合新旧知识以提高分类的准确性。
    2、 CIL
    任务:识别新类,并将其加入现有类别的集合中,提升分类的准确性和智能。
    3、FIL
    一些新的属性特征能够将分类提升到一个很大的程度,并提升分类准确率。
    任务:在现有特征空间的基础上,加入新的属性特征,构建新的特征空间,提升分类准确率。

    Xgboost提供两种增量训练的方式,一种是在当前迭代树的基础上增加新树,原树不变;另一种是当前迭代树结构不变,重新计算叶节点权重,同时也可增加新树。

    对于已存在的决策树,早期训练的实例决定了模型的结构(选择哪些特征及分裂点),后期的实例决定最终的结果(叶节点的权重和新加入的树)。

    两个重点:
    第一,模型训练了一半,突然换了一批完全不同的数据继续训练,早期数据不再能再校正模型;
    第二,树一旦形成,结构就不再变化,后续的训练只能增加新树和重新计算前树的节点权重。

    xgboost源码中有增量训练的例程:tests/python/test_training_continuation.py,其中核心部分稍做修改如下【1,3】:

    # -*- coding: utf-8 -*-
     
    import xgboost as xgb
    from sklearn.datasets import load_digits # 训练数据
     
    xgb_params_01 = {}
     
    digits_2class = load_digits(2)
    X_2class = digits_2class['data']
    y_2class = digits_2class['target']
     
    dtrain_2class = xgb.DMatrix(X_2class, label=y_2class)
    gbdt_03 = xgb.train(xgb_params_01, dtrain_2class, num_boost_round=3) # 训练三棵树的模型
    print(gbdt_03.get_dump()) # 显示模型
    gbdt_03a = xgb.train(xgb_params_01, dtrain_2class, num_boost_round=7, xgb_model=gbdt_03) # 在原模型基础上继续训练
    print(gbdt_03a.get_dump())
    

    增量学习与迁移学习

    在概念上,增量学习与迁移学习最大的区别就是对待旧知识的处理,增量学习在学习新知识的同时需要尽可能保持旧知识,不管它们类别相关还是不相关的,而迁移学习则只是借助旧知识来学习新知识,学习完成后只关注在新知识上的性能,不再考虑在旧知识上的性能。

    这个链接还需要重视一波,提供了很多xgboost的使用方法
    xgboost/test_training_continuation.py at master · dmlc/xgboost (github.com)

    1.Xgboost之增量学习_xieyan0811的博客-CSDN博客_xgboost 增量训练

    2.浅谈迁移学习,增量学习Chris_zhangrx的博客-CSDN博客增量学习和迁移学习

    3.xgboost/test_training_continuation.py at master · dmlc/xgboost (github.com)

    4.增量学习的理解(迁移学习,fit_genrtor区别)herr_kun的博客-CSDN博客增量学习keras

    相关文章

      网友评论

        本文标题:Xgboost之增量学习

        本文链接:https://www.haomeiwen.com/subject/ollmurtx.html