如何在数据框中获得 Lime 预测与实际预测?

How to get Lime predictions vs Actual predictions in a dataframe?

我正在使用随机森林解决二元分类问题,并使用 LIME 解释器来解释预测。

我使用下面的代码生成 LIME 解释

import lime
import lime.lime_tabular
explainer = lime.lime_tabular.LimeTabularExplainer(ord_train_t.values, discretize_continuous=True,
                                                   feature_names=feat_names,
                                                   mode="classification",
                                                   feature_selection = "lasso_path",
                                                   class_names=rf_boruta.classes_,
                                                   categorical_names=output, 
                                                   kernel_width=10, verbose=True)
i = 969
exp = explainer.explain_instance(ord_test_t.iloc[1,:],rf_boruta.predict_proba,distance_metric = 'euclidean',num_features=5)

我得到如下输出

Intercept 0.29625037124439896 

Prediction_local [0.46168824] 

Right:0.6911888737552843

但是,上面的内容作为消息打印在屏幕上

我们如何在数据框中获取此信息?

Lime 没有直接的 export-to-dataframe 功能,所以要走的路似乎是将预测附加到列表中,然后 运行 将其形成数据框。

是的,这可能会花费很多时间,这取决于您有多少预测,因为模型必须单独预测每个实例。

这是我找到的示例,explain_instance 需要根据您的模型参数进行调整,但遵循相同的逻辑。

l=[]
for n in range(0,X_test.shape[0]+1):
     exp = explainer.explain_instance(X_test.values[n], clf.predict_proba, num_features=10)
     a=exp.as_list()
     l.append(a)
df = pd.DataFrame(l)

如果您需要的比 as_list() 提供的更多,解释器上有更多数据。我 运行 一个例子,看看解释实例还会检索什么。

您可以不使用 as_list(),而是将您需要的其他值附加到此 as_list。

a = exp.to_list()
a.append(exp.intercept[1])
l.append(a) 

使用这种方法你可以获得拦截和 prediction_local,对于正确的值我真的不知道它会是哪个,但我确信对象解释器在某个地方有它的另一个名字.

在您的代码上使用断点并探索解释器,也许您还想保存其他信息。

Lime Github: Issue ref 213