sklearn.tree.DecisionTreeClassifier: получить все образцы, попавшие в конечный узел. - PullRequest
0 голосов
/ 31 октября 2018

Я хочу оценить для всех выборок размер листового узла, в который они попали.

На основе этого превосходного ответа я уже нашел способ извлечь количество выборок для каждого конечного узла:

from sklearn.tree import _tree, DecisionTreeClassifier
import numpy as np

clf = DecisionTreeClassifier().fit(X_train, y_train)

def tree_get_leaf_size_for_elem(tree, feature_names):

    tree_ = tree.tree_

    def recurse(node):
        if tree_.feature[node] != _tree.TREE_UNDEFINED:
            recurse(tree_.children_left[node])
        else:
            samples_in_leaf = np.sum(tree_.value[node][0])

    recurse(0)

tree_get_leaf_size_for_elem(clf, feature_names)

Есть ли способ получить индексы всех выборок (X_train), которые оказались в листовом узле? Новый столбец для X_train с именем "leaf_node_size" будет желаемым выводом.

1 Ответ

0 голосов
/ 31 октября 2018

sklearn позволяет вам сделать это легко с помощью метода apply

from collections import Counter

#get the leaf for each training sample
leaves_index = tree.apply(X_train) 

#use Counter to find the number of elements on each leaf
cnt = Counter( leaves_index )

#and now you can index each input to get the number of elements
elems = [ cnt[x] for x in leaves_index ] 
...