### 用于解释决策树的 Lime 与 TreeInterpreter 的对比

Lime 源码:https://github.com/marcotcr/lime

treeinterpreter 源码:tree interpreter

我尝试使用 Lime 和 treeinterpreter 来理解 DecisionTree 是如何进行预测的。虽然两者在其描述中都声称能够解释决策树,但似乎它们对同一个 DecisionTree 的解释方式不同。也就是说,特征贡献的顺序不同。这怎么可能呢?如果它们都在看同一件事,并且试图描述相同的事件,但分配的重要性顺序却不同。

我们应该相信谁?特别是当顶部特征对预测很重要时。

决策树的代码

import sklearnimport sklearn.datasetsimport sklearn.ensembleimport numpy as npimport limeimport lime.lime_tabularfrom __future__ import print_functionnp.random.seed(1)from treeinterpreter import treeinterpreter as tifrom sklearn.tree import DecisionTreeClassifieriris = sklearn.datasets.load_iris()dt = DecisionTreeClassifier(random_state=42)                dt.fit(iris.data, iris.target)n = 100instances =iris.data[n].reshape(1,-1)prediction, biases, contributions = ti.predict(dt, instances)for i in range(len(instances)):    print ("prediction:",prediction)    print ("-"*20)     print ("Feature contributions:")    print ("-"*20)     for c, feature in sorted(zip(contributions[i],                                  iris.feature_names),                              key=lambda x: ~abs(x[0].any())):        print (feature, c)

Lime 的代码

import sklearnimport sklearn.datasetsimport sklearn.ensembleimport numpy as npimport limeimport lime.lime_tabularfrom __future__ import print_functionnp.random.seed(1)from sklearn.tree import DecisionTreeClassifieriris = sklearn.datasets.load_iris()dt = DecisionTreeClassifier(random_state=42)                dt.fit(iris.data, iris.target)explainer = lime.lime_tabular.LimeTabularExplainer(iris.data, feature_names=iris.feature_names,                                                    class_names=iris.target_names,                                                    discretize_continuous=False)n = 100exp = explainer.explain_instance(iris.data[n], dt.predict_proba, num_features=4, top_labels=2)exp.show_in_notebook(show_table=True,  predict_proba= True , show_predicted_value = True , show_all=False)

我们先来看一下决策树的输出结果。

enter image description here

所以a 它确实正确地识别为virginica。然而,它通过以下方式分配了重要性

1) 花瓣宽度(cm)然后是花瓣长度(cm)

现在让我们看一下lime的输出结果

enter image description here

是的,它确实说算法预测为virginica,然而,观察它是如何做出这个分类的,我们清楚地看到以下情况

1) 在 lime 中,花瓣长度(cm)> 花瓣宽度(cm),而不是在决策树中显示的花瓣长度(cm)< 花瓣宽度(cm)

2) 在决策树中预测为零的萼片宽度和萼片长度,lime 声称有特定值,如上传的图片所示

这里发生了什么?

当特征达到1000+时,问题变得更加严重,因为每一个数字都可能影响决策。


回答:

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注