解释决策树回归的Graphviz输出

7
我很好奇 Graphviz 用于回归时决策树节点中的 value 字段是什么。我知道在使用决策树分类时,它代表每个类别中通过分裂而分离的样本数,但是对于回归问题,我不确定它的含义。
我的数据有两个维度的输入和十个维度的输出。以下是我的回归问题的一棵树的示例:

enter image description here

使用此代码生成并使用webgraphviz进行可视化。
# X = (n x 2)  Y = (n x 10)  X_test = (m x 2)

input_scaler = pickle.load(open("../input_scaler.sav","rb"))
reg = DecisionTreeRegressor(criterion = 'mse', max_depth = 2)
reg.fit(X,Y)
pred = reg.predict(X_test)
with open("classifier.txt", "w") as f:
    f = tree.export_graphviz(reg, out_file=f)
1个回答

9
回归树实际上返回的输出是训练样本中最终落入相应终端节点(叶子)的因变量(此处为Y)的均值。这些均值显示为名为“value”的列表,其长度均为10,因为您的Y是10维的。换句话说,以最左边的终端节点(叶子)为例:
- 叶子包含42个样本,其中X[0] <= 0.675且X[1] <= 0.5 - 这42个样本的10维输出的均值在此叶子节点的“value”列表中给出,该列表确实具有长度为10,即Y[0]的平均值为-152007.382,Y[1]的平均值为-206040.675,以此类推,Y[9]的平均值为3211.487。
您可以通过预测一些样本(来自您的训练或测试集-无关紧要),并检查您的10维结果是否是终端叶子上所描述的4个“value”列表之一来确认这一点。
此外,您可以确认对于“value”中的每个元素,其子节点的加权平均值等于父节点的相应元素。再次使用您最左侧的2个终端节点(叶子)的第一个元素,我们得到:
(-42*152007.382 - 56*199028.147)/98
# -178876.39057142858

例如,父节点的value[0]元素(中间级别最左边的节点)。再举一个例子,这次是针对您的2个中间节点的第一个value元素:

(-98*178876.391 + 42*417378.245)/140
# -0.00020000000617333822

根据你的根节点的value列表,可以看出您的10维Y的所有元素的均值几乎为零,这与-0.0第一个value元素相符。


综上所述:

  • 每个节点的value列表包含属于该节点的训练样本的平均Y值
  • 此外,对于终端节点(叶子),这些列表是树模型的实际输出(即输出将始终是这些列表之一,具体取决于X)
  • 对于根节点,value列表包含整个训练数据集的平均Y值

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接