0

I am trying to load an XGBClassifier in my streamlit app from a pickle file.

When I load it and try to predict on the new input values, it throws the error:

XGBoostError: [11:25:40] c:\users\administrator\workspace\xgboost-win64_release_1.6.0\src\data\array_interface.h:462: Unicode-3 is not supported.

The entire traceback is:

2022-07-02 11:25:40.046 Uncaught app exception 
Traceback (most recent call last):
  File "C:\Users\\Anaconda3\lib\site-packages\streamlit\scriptrunner\script_runner.py", line 554, in _run_script
    exec(code, module.__dict__)
  File "temp.py", line 250, in <module>        
    st.write(clf.predict(feat_list))
  File "C:\Users\\Anaconda3\lib\site-packages\xgboost\sklearn.py", line 1434, in predict
    class_probs = super().predict(
  File "C:\Users\\Anaconda3\lib\site-packages\xgboost\sklearn.py", line 1049, in predict
    predts = self.get_booster().inplace_predict(
  File "C:\Users\\Anaconda3\lib\site-packages\xgboost\core.py", line 2102, in inplace_predict
    _check_call(
  File "C:\Users\\Anaconda3\lib\site-packages\xgboost\core.py", line 203, in _check_call
    raise XGBoostError(py_str(_LIB.XGBGetLastError()))
xgboost.core.XGBoostError: [11:25:40] c:\users\administrator\workspace\xgboost-win64_release_1.6.0\src\data\array_interface.h:462: Unicode-3 
is not supported.

I load the model this way:

clf = pickle.load(open('xgb.pkl', "rb"))

Or

clf = xgboost.XGBClassifier(tree_method ="hist", enable_categorical=True) 
clf.load_model("model.json")

And I predict using:

clf.predict(feat_list)
Amey
  • 1
  • 1

1 Answers1

0

I had a similar problem which came along with the the same XGBoostError. In my case the reason was the dtype of ndarray, which was supposed to be object.

Assuming that your feat_list is numpy.ndarray and that you create it in such way:

feat_list = np.array(features)

adding dtype=object:

feat_list = np.array(features, dtype=object)

should do the trick.

Pawel
  • 401
  • 6
  • 17