Предсказать во время рекурсии дерева - PullRequest
0 голосов
/ 10 марта 2020

У меня есть следующий код, который рекурсивно создает дерево классификации:

class Node:
    def __init__(self, pred_prob):
        self.pred_prob = pred_prob
        self.feature_index = 0
        self.threshold = 0
        self.left = None
        self.right = None

        self.feature_name = ''

def _grow_tree(self, X, y, depth=0):
    node = Node(predicted_class)
    # Identify best split
    idx, thr = self._best_split(X, y)
    node.feature_index = idx
    node.feature_name = X.columns[idx]


    indices_left = X.iloc[:, idx] < thr
    X_left = X[indices_left]
    y_left = y_train[X_left.reset_index().loc[:,'id'].values]

    X_right = X[~indices_left]
    y_right = y_train[X_right.reset_index().loc[:,'id'].values]


    # Grow on left side of the tree  
    node.left = self._grow_tree(X_left, y_left, depth + 1)

    # Grow on right side of the tree
    node.right = self._grow_tree(X_right, y_right, depth + 1)

    return node

Дерево построено с помощью:

self.tree_ = self._grow_tree(X, y)

Я могу генерировать прогнозы, используя следующие функции когда дерево закончено:

def predict(self, X):
    return X.apply(lambda x: self._predict(x), axis=1)#[self._predict(inputs) for inputs in X] 

def _predict(self, inputs):
    node = self.tree_
    while node.left:
        if inputs[node.feature_name] < node.threshold:
            node = node.left
        else:
            node = node.right
    return node.pred_prob

Как я могу сгенерировать прогнозы для указанного набора данных X во время рекурсии, на каждом уровне и узле, не дожидаясь завершения дерева?

...