web-dev-qa-db-ja.com

xgboostでshapを使用するときにUnicodeDecodeErrorを取得する

Xgboostモデルでshapを使用しようとしていますが、エラーが発生します。

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 341: invalid start byte

例:

model = XGBClassifier()
model.fit(X_train, y_train)
explainer = shap.TreeExplainer(model)

パッケージのバージョン:

    python == 3.6.9
    xgboost==1.1.0
    shap==0.35.0

何が問題で、どうすれば修正できますか?

1
user3668129

システムにバグがあるようです。参照: https://github.com/slundberg/shap/issues/1215 。問題は解決したようですが、おそらく修正はまだリリースされていません。とにかく、同じ問題があり、xgboost v1.0.0をインストールすることで一時的に解決しました。

3
Greg Schwartz

次の解決策を試してみましたが、うまくいきました。

package versions:
    python == 3.7.7
    xgboost==1.1.1
    shap==0.35.0

コードは私にとって非常にうまく機能しています。

import shap
from xgboost.sklearn import XGBClassifier

xgb = XGBClassifier(random_state=42)
mymodel = xgb.fit(X_train, y_train)

The part that really solves them is this, must not miss

mybooster = mymodel.get_booster()    
model_bytearray = mybooster.save_raw()[4:]
def myfun(self=None):
    return model_bytearray
mybooster.save_raw = myfun

# Shap explainer initilization
shap_ex = shap.TreeExplainer(mybooster)