当前位置:   article > 正文

xgboost踩坑笔记——shap.TreeExplainer(model)报错 ‘utf-8‘不能编码问题:utf-8 codec cant decode byte......

shap.treeexplainer

shap.TreeExplainer(model)报错 ‘utf-8’ 不能编码问题

shap.TreeExplainer(model)运行报错:
‘utf-8’ codec can’t decode byte 0xff in position 341: invalid start byte

shap可以用于xgboost的模型可视化解释,很好用。
报错原因:xgb版本问题,1.1.0及以上会出现,老版本不会。

解决方法一

重装xgboost至1.0.0版本

解决方法二

查看问题:
1 首先,xgb建模中有

model = xgb.train(params, dtrain,......)
  • 1

2 将模型保存输出(xgb的1.1.0及以上版本),会发现:

model.save_raw()
# 1.1.0及以上输出结果为:
bytearray(b'binf\x00\x00\x00?\x0e\x00...
  • 1
  • 2
  • 3

在xgb的1.0.0,输出为

model.save_raw()
# 输出结果为:
bytearray(b'\x00\x00\x00?\x0e\x00...
  • 1
  • 2
  • 3

结果是编码开头少四个字符binf
解决方法:
3 修改模型
在建模之后,在shap.TreeExplainer(model)之前,添加代码:

# 对model的编码,删除binf
model_modify = model.save_raw()[4:]
def myfun(self=None):
    return model_modify
model.save_raw = myfun
  • 1
  • 2
  • 3
  • 4
  • 5

其他不用动,shap可以正常使用了

参考:
https://github.com/slundberg/shap/issues/1215

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/97500
推荐阅读
相关标签
  

闽ICP备14008679号