XGBoost太大,对于咸菜/ joblib

时间:2019-03-07 17:14:27

标签: python pickle xgboost joblib

我很难同时用pickle和joblib加载XGBoost回归。

一个困难可能是我在Windows桌面上编写pickle / joblib,但是我试图在Macbook Pro上加载

我尝试使用以前发布的此解决方案:Python 3 - Can pickle handle byte objects larger than 4GB?

但是,它仍然不起作用。我会遇到各种各样的错误,但通常是这样的:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 22] Invalid argument

还尝试了在pickle和joblib转储中使用protocol = 4,并且在每种情况下,文件仍然无法加载。

基于joblib / pickle或使用先前发布的bytes_in / os.path解决方案,尝试加载的文件大小从2gb到11gb

有人知道用于编写大型XGBoost回归和/或如何加载它们的最佳方法的解决方案吗?

这是用于编写XGBoost的代码

dmatrix_train = xgb.DMatrix(
    X_train.values, y_train, feature_names=X_train.columns.values
)
dmatrix_validate = xgb.DMatrix(
    X_test.values, y_test, feature_names=X_train.columns.values
)
eval_set = [(dmatrix_train,"Train")]
eval_set.append((dmatrix_validate,"Validate"))

print("XGBoost #1")

params = {
    'silent': 1,

    'tree_method': 'auto',
    'max_depth': 10,
    'learning_rate': 0.001,
    'subsample': 0.1,
    'colsample_bytree': 0.3,
    # 'min_split_loss': 10,
    'min_child_weight': 10,
#     'lambda': 10,
#     'max_delta_step': 3
}

num_round = 500000

xgb_model = xgb.train(params=params, dtrain=dmatrix_train,evals=eval_set,
    num_boost_round=num_round, verbose_eval=100)

joblib.dump(xgb_model, 'file.sav', protocol=4)

最后一行也已经在标准的酱菜倾倒中进行了尝试,无论是否使用'wb'。

1 个答案:

答案 0 :(得分:0)

您似乎正在使用低级XGBoost API(而不是高级Scikit-Learn包装器API)。在此级别上,您可以使用Booster.save_model(fname)Booster.load_model(fname)函数本地保存/加载XGBoost模型。

例如,请参见以下SO线程:How to save & load xgboost model?

如果涉及到重要的“ Python包装对象”,则进行酸洗是有意义的。这里没有一个人。