解决:使用lime explain模型解释框架,解释xgboost时遇到ValueError: feature_names mismatch问题

使用lime explain模型解释框架,解释xgboost时遇到ValueError: feature_names mismatch问题

1.工作描述

使用lime可解释框架对xgboost模型做解释:

import sklearn
from sklearn import datasets
import sklearn.ensemble
import numpy as np
import lime
import lime.lime_tabular
from sklearn.model_selection import train_test_split
import xgboost as xgb

data = datasets.load_iris()    #鸢尾花数据集
x = np.array(data.data)
y = np.array(data.target)
# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state = 400)
# 训练XGBoost模型
model_xgb = xgb.XGBClassifier().fit(X_train, y_train)
# 生成解释器
explainer = lime.lime_tabular.LimeTabularExplainer(X_train, 
                                    feature_names=['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'],
                                                   class_names=[0,1], discretize_continuous=True)
# 对局部点的解释
# i = np.random.randint(0, X_test.shape[0])
exp = explainer.explain_instance(X_test[0], model_xgb.predict_proba, num_features=6)
# 显示详细信息图
exp.show_in_notebook(show_table=True, show_all=True)
# 显示权重图
exp.as_pyplot_figure()

运行示意图:
解决:使用lime explain模型解释框架,解释xgboost时遇到ValueError: feature_names mismatch问题_第1张图片

2.问题

在将自己的dataframe格式数据导入后,重新调用lime框架,遇到了类似如下问题:

ValueError: feature_names mismatch: ['fixed acidity', 'volatile acidity', 
'citric acid', 'residual sugar', 'chlorides', 'free sulfur dioxide',
 'total sulfur dioxide', 'density', 'pH', 'sulphates', 'alcohol'] 
 ['f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6',  'f7', 'f8', 'f9', 'f10']
expected free sulfur dioxide, citric acid, fixed acidity, residual sugar,
 sulphates, chlorides, pH, volatile acidity, alcohol, total sulfur dioxide,
  density in input data
training data did not have the following fields: f3, f5, f8, f0, f4, f7, f6, f10, f1, f9, f2

3.解决

问题说明:google一番发现,这个是旧版本(出问题时使用的是xgboost 0.9.0)的xgboost.predict_proba() 仅支持dataframe结构数据,不支持单纯的矩阵数据,导致lime框架中的gboost.predict_proba()方法出错
(因此单纯将dataframe数据修改为 as_matrix()、values矩阵数据是不可行的)
解决:最开始考虑最坏的情况(根据lime源码修改相关方法),但还是想碰碰运气 (万一新版xgboost更新解决了这个问题呢) ,故

pip install --upgrade 

将xgboost更新到了1.2.0,重新运行lime,问题解决
(仅以此文给遇到此类问题的小伙伴参考)

参考

https://blog.csdn.net/CherDW/article/details/108202783
https://www.kaggle.com/datacog314/tutorial-machine-learning-interpretability

你可能感兴趣的:(机器学习,模型可解释,机器学习,python,深度学习,数据挖掘)