问题描述
from sklearn import tree
import graphviz
import shap
X,y = shap.datasets.boston()
clf = tree.DecisionTreeRegressor(max_depth=2).fit(X,y)
给我们以下树:
这些值让我感到困惑,我知道叶子上的值是到达叶子后的预测。但是,节点处的值代表什么?
我发现了一些用于分类但没有用于回归的 SO 帖子/文档。
编辑:进一步思考我是否看到如果树被剪短,它们很可能只是这些箱的值。不知道为什么他们在 SHAP 中使用。
解决方法
让我们关注一个节点,例如:
-
X12<= 14.4
指的是您将应用于数据的下一个拆分。在 在这种情况下,您将使用功能 X 12。 -
Samples= 430
,指的是该节点中的所有训练样本。 检查根节点是否为506(这是他儿子节点的总和 (430+76)) - 如果我们在这个内部节点进行预测,我们将预测
值是
value=19.934
,我们将提交一个mse= 40.273
,它指的是错误。
显然,当我们用更多节点拆分数据时,我们正在减少 samples
的数量,当然还有 mse
,因为我们正在缩小范围。由于我们更加精确,因此值会有所不同。
关于shap
,你只是使用这个库来导入数据集,仅此而已。您可以在不使用 shap
库的情况下导入数据。有多种方法可以导入波士顿数据,例如使用 Sklearn:
from sklearn.datasets import load_boston
X,y = load_boston(return_X_y=True)
无论如何,你应该检查它是否是准确的数据集(例如,一个数据集有更多的样本)。