Closed. 这个问题不符合堆栈溢出指南 /help/closed-questions 。目前不接受答案。
石灰来源:https://github.com/marcotcr/lime https://github.com/marcotcr/lime
树解释器来源:树解释器 https://pypi.python.org/pypi/treeinterpreter
我试图理解如何DecisionTree
使用 Lime 和 treeinterpreter 做出预测。虽然两人都声称他们能够解释其描述中的决策树。似乎两者的解释相同DecisionTree
以不同的方式。即特征贡献order 。这怎么可能?如果两者都在看同一件事并试图描述同一事件,但以不同的顺序分配重要性。
我们应该信任谁?尤其是当最重要的特征在预测中确实很重要的时候。
树的代码
import sklearn
import sklearn.datasets
import sklearn.ensemble
import numpy as np
import lime
import lime.lime_tabular
from __future__ import print_function
np.random.seed(1)
from treeinterpreter import treeinterpreter as ti
from sklearn.tree import DecisionTreeClassifier
iris = sklearn.datasets.load_iris()
dt = DecisionTreeClassifier(random_state=42)
dt.fit(iris.data, iris.target)
n = 100
instances =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)
石灰的代码
import sklearn
import sklearn.datasets
import sklearn.ensemble
import numpy as np
import lime
import lime.lime_tabular
from __future__ import print_function
np.random.seed(1)
from sklearn.tree import DecisionTreeClassifier
iris = 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 = 100
exp = 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)
我们首先看一下输出tree .
so a 它确实正确地说这是一个弗吉尼亚州 。然而,通过分配重要性
1) 花瓣宽度 (cm) 然后花瓣长度 (cm)
现在让我们看看输出lime
是的,它确实说算法预测弗吉尼亚州 然而,看看它是如何进行分类的,我们清楚地看到以下内容
1)石灰中的花瓣长度(cm)>花瓣宽度(cm)而不是树中所示的花瓣长度(cm)
2)当萼片宽度和萼片长度被预测为零时,石灰声称具有一定的价值,如上传的图像所示
这里发生了什么事?
当特征超过 1000 个时,问题就会变得更加严重,其中每个数字对于做出决定都很重要。