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
何が問題で、どうすれば修正できますか?
システムにバグがあるようです。参照: https://github.com/slundberg/shap/issues/1215 。問題は解決したようですが、おそらく修正はまだリリースされていません。とにかく、同じ問題があり、xgboost v1.0.0をインストールすることで一時的に解決しました。
次の解決策を試してみましたが、うまくいきました。
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)