XGBoost对于pickle / joblib来说太大了

问题描述 投票:0回答:1

我在使用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'和没有。

python pickle xgboost joblib
1个回答
0
投票

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

例如,请参阅此SO线程:How to save & load xgboost model?

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.