интерпретация вывода Graphviz для регрессии дерева решений

мне любопытно, что value поле находится в узлах дерева решений, создаваемого Graphviz при использовании для регрессии. Я понимаю, что это количество выборок в каждом классе, которые разделены разделением при использовании классификации дерева решений, но я не уверен, что это означает для регрессии.

мои данные имеют 2-мерный вход и 10-мерный выход. Вот пример того, как выглядит дерево для моей проблемы регрессии:

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 ответов


то, что дерево регрессии фактически возвращает в качестве вывода, является среднее значение зависимой переменной (здесь Y) обучающих выборок, которые заканчиваются в соответствующих терминальных узлах (листьях); эти средние значения отображаются как списки с именем value на картинке, которые все длины 10 здесь, так как ваш Y 10-мерный.

другими словами, и используя самый левый терминальный узел (лист) вашего дерева в качестве примера:

  • лист состоит из 42 образцов, для которых X[0] <= 0.675 и X[1] <= 0.5
  • среднее значение вашего 10-мерного выхода для этих 42 образцов приведено в value список этого отпуска, который действительно имеет длину 10, т. е. среднее значение Y[0] is -152007.382 со значением Y[1] и -206040.675 etc и среднее значение Y[9] и 3211.487.

вы можете подтвердить, что это так, прогнозируя некоторые образцы (из вашего обучения или набора тестов - это не имеет значения) и проверяя, что ваш 10-мерный результат является одним из 4 value списки, изображенные в листьях терминала выше.

кроме того, вы можете подтвердить, что для каждого элемента value, средневзвешенные значения дочерних узлов равны соответствующему элементу родительского узла. Опять же, используя первый элемент ваших 2 крайних левых терминальных узлов (листьев), мы получаем:

(-42*152007.382 - 56*199028.147)/98
# -178876.39057142858

т. е. value[0] элемент родительского узла (самый левый узел на промежуточном уровне). Ещё один пример, на этот раз для первого value элементы ваших 2 промежуточных узлов:

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

что опять же согласуется с -0.0 первый value элемент корневого узла.

исходя из value список вашего корневого узла, похоже, что средние значения всех элементов вашего 10-мерного Y почти равны нулю, которые вы можете (и должны) проверить вручную, в качестве окончательного подтверждения.


Итак, в завершение:

  • в value список каждого узла содержит средние значения Y для обучающих выборок, "принадлежащих" соответствующему узлу
  • кроме того, для терминальных узлов (листьев) эти списки являются фактическими выходами модели дерева (т. е. выход всегда будет одним из этих списков, в зависимости от X)
  • для корневого узла value список содержит средние значения Y для всего вашего учебного набора данных