#python #scikit-learn #binary-tree #random-forest
Вопрос:
Для моделей классификации случайных лесов sklearn значения узлов в деревьях представляют собой список общего количества элементов в этом узле, попадающих в каждую классификацию (если я правильно понимаю, см. https://scikit-learn.org/stable/auto_examples/tree/plot_unveil_tree_structure.html, особенно на картинке внизу страницы).
Я запускаю регрессионную модель (то есть предсказываю реальное число). Чтобы быть точным, текущие параметры и модель таковы:
rf_params = {'n_estimators': 500,
'max_depth': 4,
'min_samples_split': 5}
rf = RandomForestRegressor(**rf_params)
Модель обучается на основе числовых данных с различными столбцами для прогнозирования скалярной цели.
В этом случае поле значений деревьев (найдено как rf.estimators_[idx].tree_.value
) выглядит следующим образом:
array([[[193.55945946]],
[[225.31742306]],
[[240. ]],
[[219.5 ]],
[[173.78037687]],
[[157.21202275]],
[[154.17839445]],
[[152.35 ]],
[[166.65116279]],
[[171. ]],
[[240. ]]])
Для справки, в этом примере узлы 0, 1, 4, 5 и 6 разделены и узлы 2, 3, 7, 8, 9, и 10 — это листья. Я бы рискнул предположить, что способ работы модели заключается в том, что предсказание любого дерева-это значение листа, на котором вы окажетесь, предсказание модели-это среднее значение предсказаний каждого дерева, и (это мое самое неопределенное предположение) значение в разделенном узле-это среднее значение всех выборочных данных, которые попали в этот узел.
Верно ли вышесказанное? Есть ли у хакеров sklearn какие-либо идеи о том, почему значения заключены в три уровня списка? Может ли какой-либо уровень индекса для этой структуры списка (кроме первого / самого верхнего) содержать более одного элемента?