Размер подвыборки в scikit-learn RandomForestClassifier
Как можно контролировать размер подвыборки, используемой для обучения каждого дерева в лесу? Согласно документации Scikit-Learn:
Случайный лес - это метаоценщик, который подходит к ряду классификаторов дерева решений для различных подвыборок набора данных и использует усреднение для повышения точности прогнозирования и контроля соответствия. Размер подвыборки всегда совпадает с исходным размером входной выборки, но выборки отрисовываются с заменой, если bootstrap=True (по умолчанию).
Так bootstrap
допускает случайность, но не может найти, как контролировать количество подвыборок.
4 ответа
Scikit-learn не предоставляет этого, но вы можете легко получить эту опцию, используя (более медленную) версию, используя комбинацию дерева и мета-классификатора мешков:
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
clf = BaggingClassifier(base_estimator=DecisionTreeClassifier(), max_samples=0.5)
Как примечание, случайный лес Бреймана действительно не рассматривает подвыборку как параметр, полностью полагаясь на начальную загрузку, поэтому приблизительно (1 - 1 / e) выборок используется для построения каждого дерева.
В версии 0.22 Scikit добавил параметрmax_samples
что можно настроить.
https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html
На самом деле вы можете изменить функцию _generate_sample_indices в файле forest.py, чтобы каждый раз изменять размер подвыборки, благодаря fastai lib для реализации функции set_rf_samples для этой цели, похоже, что
def set_rf_samples(n):
""" Changes Scikit learn's random forests to give each tree a random sample of
n random rows.
"""
forest._generate_sample_indices = (lambda rs, n_samples:
forest.check_random_state(rs).randint(0, n_samples, n))
Вы можете добавить эту функцию в свой код
Я думаю, что они относятся к числу функций. Если я правильно помню, все образцы используются для обучения, но различное количество функций используется в каждом подмножестве. Различное количество функций может быть использовано с помощью max_features
,