Я попытался объяснить прогноз оттока на основе моделей случайного леса и xgboost, используя LIME. Вот код для объяснения LIME:
predict_fn_rf = lambda x: model_rf.predict_proba(x).astype(float)
predict_fn_xgb = lambda x: model_xgb.predict_proba(x).astype(float)
explainer = lime.lime_tabular.LimeTabularExplainer(X_train.values,
feature_names=X_train.columns.values.tolist(),
training_labels=Y_train, class_names=[0,1])
# Get the explanation for XGBoost
exp = explainer.explain_instance(X_validation.values[observation_1], predict_fn_xgb, num_features=6)
exp.show_in_notebook(show_all=False)
, но я получил ужасную ошибку:
ValueError Traceback (most recent call last)
<ipython-input-86-03d541cb1fb1> in <module>
1 # Get the explanation for XGBoost
----> 2 exp = explainer.explain_instance(X_test.values[observation_1], predict_fn_xgb, num_features=6)
3 exp.show_in_notebook(show_all=False)
4
~\AppData\Local\Continuum\anaconda3\envs\use-case\lib\site-packages\lime\lime_tabular.py in explain_instance(self, data_row, predict_fn, labels, top_labels, num_features, num_samples, distance_metric, model_regressor)
256 ).ravel()
257
--> 258 yss = predict_fn(inverse)
259
260 # for classification, the model needs to provide a list of tuples - classes
<ipython-input-79-90c5d04c9ee1> in <lambda>(x)
10 predict_fn_logreg = lambda x: model_logreg.predict_proba(x).astype(float)
11 predict_fn_rf = lambda x: model_rf.predict_proba(x).astype(float)
---> 12 predict_fn_xgb = lambda x: model_xgb.predict_proba(x).astype(float)
...
ValueError: feature_names mismatch:
С тем же объяснителем, он работает для случайного леса
# Get the explanation for RandomForest
exp = explainer.explain_instance(X_test.values[observation_I1], predict_fn_rf, num_features=6)
exp.show_in_notebook(show_all=False)