H2O DistributedRandomForest все предсказания дерева - PullRequest
0 голосов
/ 26 февраля 2019

Я использую 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

1 Ответ

0 голосов
/ 01 марта 2019

Прямо сейчас ответ - нет.Мы создали проблему для реализации новой функции в Tree API.Вы можете отслеживать прогресс здесь: https://0xdata.atlassian.net/browse/PUBDEV-6322.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...