节点不是叶子的 sklearn tree_.value 是什么?

问题描述

from sklearn import tree
import graphviz
import shap

X,y = shap.datasets.boston()

clf = tree.DecisionTreeRegressor(max_depth=2).fit(X,y)

给我们以下树:

enter image description here

这些值让我感到困惑,我知道叶子上的值是到达叶子后的预测。但是,节点处的值代表什么?

我发现了一些用于分类但没有用于回归的 SO 帖子/文档。

编辑:进一步思考我是否看到如果树被剪短,它们很可能只是这些箱的值。不知道为什么他们在 SHAP 中使用。

解决方法

让我们关注一个节点,例如:

enter image description here

  • 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)

无论如何,你应该检查它是否是准确的数据集(例如,一个数据集有更多的样本)。