Размер подвыборки в 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,

Другие вопросы по тегам