我在使用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'和没有。
您似乎使用的是低级XGBoost API(与高级Scikit-Learn包装器API相反)。在此级别,您可以使用Booster.save_model(fname)
和Booster.load_model(fname)
函数本机保存/加载XGBoost模型。
例如,请参阅此SO线程:How to save & load xgboost model?
如果涉及到一个重要的“Python包装器对象”,那么酸洗是有意义的。这里没有人。