Использование LIME с моделью xgboost для прогнозирования оттока - PullRequest
0 голосов
/ 17 марта 2020

Я попытался объяснить прогноз оттока на основе моделей случайного леса и 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)
...