我很难同时用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'。
答案 0 :(得分:0)
您似乎正在使用低级XGBoost API(而不是高级Scikit-Learn包装器API)。在此级别上,您可以使用Booster.save_model(fname)
和Booster.load_model(fname)
函数本地保存/加载XGBoost模型。
例如,请参见以下SO线程:How to save & load xgboost model?
如果涉及到重要的“ Python包装对象”,则进行酸洗是有意义的。这里没有一个人。