Почему значения этого дерева решений на каждом шаге не суммируются с количеством выборок? - PullRequest
3 голосов
/ 13 мая 2019

Я читаю о деревьях решений и классификаторах упаковки и пытаюсь показать первое дерево решений, которое используется в классификаторе упаковки. Я запутался в выводе.

from sklearn.model_selection import train_test_split
from sklearn.datasets import make_moons
from sklearn.ensemble import BaggingClassifier
from sklearn import tree
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz
from graphviz import Source

X, y = make_moons(n_samples=500, noise=0.30, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

bag_clf = BaggingClassifier(
    DecisionTreeClassifier(), 
    n_estimators=500,
    max_samples=100, 
    bootstrap=True, 
    n_jobs=-1)
bag_clf.fit(X_train, y_train)

Source(tree.export_graphviz(bag_clf.estimators_[0], out_file=None))

Вот фрагмент из вывода

enter image description here

Насколько я понимаю, value должен показывать, сколько образцов отнесено к каждой категории. В таком случае, не должны ли числа в поле value складываться в поле samples? Почему это не так?

Ответы [ 2 ]

2 голосов
/ 13 мая 2019

Хороший улов.

Казалось бы, дополнительные образцы начальной загрузки включены в value, но не в общую сумму samples;повторение вашего кода дословно, но изменение на bootstrap=False устраняет расхождение:

enter image description here

1 голос
/ 13 мая 2019

Интересная находка.

Я немного покопался и обнаружил, что при экспорте объекта graphviz при начальной загрузке переключается пропорция = True. Поскольку существует возможность того, что один и тот же образец проходит через дерево решений более одного раза, он выражается в процентах. Если bootstrapping = False, выборка проходит только один раз, и, следовательно, она может быть выражена как счетчик выборок для каждого класса.

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