python - XGBoost 对于 pickle/joblib 来说太大了
问题描述
我在使用 pickle 和 joblib 加载 XGBoost 回归时遇到了困难。
一个困难可能是我在 Windows 桌面上编写 pickle/joblib,但我试图在 Macbook Pro 上加载
我尝试使用之前发布的这个解决方案:Python 3 - Can pickle handle byte objects大于 4GB?
但是,它仍然不起作用。我会得到各种各样的错误,但通常是这样的:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 22] Invalid argument
还尝试在 pickle 和 joblib 转储中使用协议 = 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'和没有'wb'。
解决方案
您似乎正在使用低级 XGBoost API(而不是高级 Scikit-Learn 包装器 API)。Booster.save_model(fname)
在这个级别,您可以使用和Booster.load_model(fname)
函数本地保存/加载 XGBoost 模型。
例如,请参阅此 SO 线程:如何保存和加载 xgboost 模型?
如果涉及到重要的“Python 包装器对象”,那么酸洗是有意义的。这里没有。
推荐阅读
- java - restTemplate.exchange() 出现错误 404,但 url 适用于 Postman
- java - 将不同类型的类型从 txt 文件存储到数组 Java
- docker - docker:查看网络 CIDR
- google-api - 我可以在哪里存储用户可访问的 Google 幻灯片模板?
- mysql - MySQL select two smallest id with duplicated conditions
- python - python _init_ 函数中令人困惑的属性分配
- cordova - Cordova resolveLocalFileSystemURL 在 Windows 上不返回文件对象
- matlab - 如何获得周末后新一个月的第一个工作日?
- java - Mybatis中使用注解的对象嵌套映射
- android - 我无法在 Visual Studio 2017 中创建 android 密钥库