У меня есть следующий код, который рекурсивно создает дерево классификации:
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 во время рекурсии, на каждом уровне и узле, не дожидаясь завершения дерева?