интерпретация вывода Graphviz для регрессии дерева решений
мне любопытно, что value
поле находится в узлах дерева решений, создаваемого Graphviz при использовании для регрессии. Я понимаю, что это количество выборок в каждом классе, которые разделены разделением при использовании классификации дерева решений, но я не уверен, что это означает для регрессии.
мои данные имеют 2-мерный вход и 10-мерный выход. Вот пример того, как выглядит дерево для моей проблемы регрессии:
произведены, используя этот код и визуализируется с 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 для всего вашего учебного набора данных