Я использую H2O Python (версия 3.22.1.3), и мне было интересно, можно ли наблюдать предсказания каждого дерева в Случайном Лесу, как мы это делаем в случае с методом случайных чисел scikit-learn RandomForestRegressor.estimators_.Я попытался использовать h2o.predict_leaf_node_assignment (), но он приносит либо путь прогнозирования для каждого дерева, либо (предположительно) идентификатор листового узла, на основании которого был сделан прогноз.В последней версии H2O добавила класс Tree, но, к сожалению, у него нет метода предиката ().Хотя я могу получить доступ к любому узлу в любом из деревьев случайного леса, тем не менее моя реализация функции прогнозирования дерева с использованием недавно реализованного API-интерфейса дерева (даже если он правильный) очень медленная.Итак, мой вопрос:
(a) Могу ли я получить предсказания дерева изначально, и если да, то как?
(b) Если нет, планируют ли разработчики H2O реализовать эту функциюв будущих выпусках?
Любой ответ будет принят с благодарностью.
ОБНОВЛЕНИЕ: Спасибо, Джо, за ваш ответ.На данный момент (до того, как функция будет реализована напрямую), здесь есть единственный обходной путь, о котором я мог подумать, который генерирует древовидные прогнозы.
# Suppose we have random forest model called drf with ntrees=70 and want to make predictions on df_valid
# After executing the code below, we get a dataframe tree_predictions with ntrees (in our case 70) columns, where i-th column corresponds to the predictions of i-th tree, and the same number of rows as df_valid.
# Extract the trees to create prediction intervals
# Number of trees
ntrees = 70
from h2o.tree import H2OTree
# Extract all the tree of drf, create the list of prediction trees
list_of_trees = [H2OTree(model = drf, tree_number = t, tree_class = None) for t in range(ntrees)]
# leaf_nodes contains the node_id's of tree leaves with predictions
leaf_nodes = drf.predict_leaf_node_assignment(df_valid, type='Node_ID').as_data_frame()
# tree_predictions is the dataframe with predictions for all the 70 trees
tree_predictions = pd.DataFrame(columns=['T'+str(t+1) for t in range(ntrees)])
for t in range(ntrees):
tr = list_of_trees[t]
node_ids = np.array(tr.node_ids)
treePred = lambda n: tr.predictions[np.where(node_ids==n)[0][0]]
tree_predictions['T'+str(t+1)] = leaf_nodes['T'+str(t+1)].apply(treePred)enter code here