您当前的位置: 首页 > 

XGB模型训练报错 terminate called after throwing an instance of ‘std::bad_alloc‘ what()

发布时间:2022-02-08 16:27:43 ,浏览量:0

背景:需要做XGB模型增量训练,但是因为一些原因没有得到原来的XGB模型,只有dump文件。

XGB模型的dump文件是它的树结构存储为一个相对人类好理解的模型文件,但并不能被重新加载进XGB进行增量训练。

嗯,说是那么说,我寻思试一下,看看最新版的XGB有没有增加这个功能,只载入dump文件就可以进行XGB增量训练。

一跑起来没报错,我寻思可以呢。

一开始加载数据啥的都没问题,但是在训练的时候报错:terminate called after throwing an instance of 'std::bad_alloc' what():,还把环境整崩了。

搜了一下,都说这是内存炸了导致的报错,但是我看了一下监控,内存完全没占满。

到这我还一直以为可能是我训练数据太大,或者是后台起的训练进程太多才导致的,完全没想过是不是dump文件的问题。

是在解决不了了,去洗了个澡,突然间就想到了,可能是dump文件的问题。

实验了一下,果然是,XGB模型增量训练只能在save_model保存的模型文件上训练,不能在dump_model的dump文件上训练,它不报解析错误反而报了一个内存错误。

实验代码:

import pandas as pd import xgboost as xgb import matplotlib.pyplot as plt from xgboost import plot_tree from xgboost import XGBClassifier


data = pd.read_csv("../input/default-of-credit-card-clients-dataset/UCI_Credit_Card.csv") X = data.iloc[:,1:6] y = data.iloc[:,24] data = xgb.DMatrix(X, y) xgb_params = {} model = xgb.train(xgb_params, data) print(model.get_dump()) model.save_model("model.pickle") model.dump_model("model.dump") xgb_params = {'process_type':'update', 'updater':'refresh', 'refresh_leaf':True} model_new = xgb.train(xgb_params, data, xgb_model="./model.pickle") xgb_params = {'process_type':'update', 'updater':'refresh', 'refresh_leaf':True} model_new = xgb.train(xgb_params, data, xgb_model="./model.dump") # 报错 

在这里插入图片描述

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    108697博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0498s