机器学习

Xgboost之增量学习

2022-05-14  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读