为完整数据集生成 Lime 解释的有效方法
Efficient way to generate Lime explanations for full dataset
我正在处理具有 1000 行和 15 个特征的二元分类问题。
目前正在使用Lime
来解释每个实例的预测。
我使用下面的代码生成完整测试数据帧的解释
test_indx_list = X_test.index.tolist()
test_dict={}
for n in test_indx_list:
exp = explainer.explain_instance(X_test.loc[n].values, model.predict_proba, num_features=5)
a=exp.as_list()
test_dict[n] = a
但是这样效率不高。有没有其他方法可以更快地生成解释/获取特征贡献?
根据文档显示,目前没有执行批处理的选项 explain_instance,尽管有计划。这应该对以后更新版本的速度有很大帮助。
为了获得更快的速度,似乎最合适的改变是减少用于学习线性模型的样本数量。
explainer.explain_instance(... num_features=5, num_samples=2500)
num_samples 的默认值为 5000,根据您的型号,它可能比您需要的多得多,并且是目前最会影响解释器速度的参数。
另一种方法是尝试向代码段添加并行化。这是一个更复杂的解决方案,您可以同时 运行 片段的多个实例,并在最后收集结果。为此,我留下了一个 link,但实际上这不是我可以立即提供的片段。
我正在处理具有 1000 行和 15 个特征的二元分类问题。
目前正在使用Lime
来解释每个实例的预测。
我使用下面的代码生成完整测试数据帧的解释
test_indx_list = X_test.index.tolist()
test_dict={}
for n in test_indx_list:
exp = explainer.explain_instance(X_test.loc[n].values, model.predict_proba, num_features=5)
a=exp.as_list()
test_dict[n] = a
但是这样效率不高。有没有其他方法可以更快地生成解释/获取特征贡献?
根据文档显示,目前没有执行批处理的选项 explain_instance,尽管有计划。这应该对以后更新版本的速度有很大帮助。
为了获得更快的速度,似乎最合适的改变是减少用于学习线性模型的样本数量。
explainer.explain_instance(... num_features=5, num_samples=2500)
num_samples 的默认值为 5000,根据您的型号,它可能比您需要的多得多,并且是目前最会影响解释器速度的参数。
另一种方法是尝试向代码段添加并行化。这是一个更复杂的解决方案,您可以同时 运行 片段的多个实例,并在最后收集结果。为此,我留下了一个 link,但实际上这不是我可以立即提供的片段。