how to replace parameter from a saved xgboost model?

1

This is my environment and parameter of xgboost when I saved a xgboost model.

environment

  • xgboost version 0.90

parameter

  • objective: gpu:binary:logistic

I want to load a saved xgboost model in version 1.0.0. However, this error massage is occurred.

XGBoostError: [12:51:46] C:\Users\Administrator\workspace\xgboost-win64_release_1.0.0\src\objective\objective.cc:26: Unknown objective function: `gpu:binary:logistic`

This is because gpu:binary:logistic is now deprecated. When I loaded my model in version 0.90, this warnings is occurred.

[13:45:14] WARNING: C:/Jenkins/workspace/xgboost-win64_release_0.90/src/objective/regression_obj.cu:170: gpu:binary:logistic is now deprecated, use binary:logistic instead.

I tried to apply set_params for replacing gpu:binary:logistic to binary:logistic and saved a model. But, it didn't work.

import xgboost as xgb

model = xgb.XGBClassifier()
model.load_model('xgb.model')

params = {'objective':'binary:logistic'}
model.set_params(**params)

I tried to replace 'gpu:binary:logistic' to 'binary:'logistic' from a saved model file, but OSError was occurred.

temp = open('test.model','rb')
lines = temp.readlines()
lines[0] = lines[0].replace(b'gpu:',b'')

new_model = open('test_replace.model','wb')

for line in lines:
    new_model.write(line)
new_model.close()

And OSError was appeared when I loaded model.

model = xgb.XGBClassifier()
model.load_model('test_replace.model')
OSError: [WinError -529697949] Windows Error 0xe06d7363

This is a saved xgboost model. This file was saved as model format

b'\x00\x00\x00\x80\x19\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00gpu:binary:logistic\x06\x00\x00\x00\x00\x00\x00\x00gbtree\xfb\x00\x00\x00\x01\x00\x00\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00

I can't re-train my model. For this reason, I have to fix this problem from a saved model.

How to fix this problem?

python
machine-learning
model
xgboost
asked on Stack Overflow Dec 28, 2020 by Touch Too • edited Dec 28, 2020 by Touch Too

1 Answer

0

The name of the objective function is stored as a string in the model file. Simply perform a binary-aware replacement gpu:binary:logistic -> binary:logistic on your model file!

Should be doable using command-line tools, see for example this SO thread: binary sed replacement

Upon a successful replacement, the size of the model file should shrink by 4 bytes (the length of the gpu: prefix).

answered on Stack Overflow Dec 28, 2020 by user1808924

User contributions licensed under CC BY-SA 3.0