Параметры внутри других параметров - использование агрегации начальной загрузки со случайными лесами в обучении ансамбля - PullRequest
0 голосов
/ 02 февраля 2019

Допустим, я решил использовать метод ансамбля - если он будет иметь значение, мы будем использовать набор данных iris.Из доступных методов ансамбля мы сосредоточимся на параллельных методах, а из них мы возьмем агрегацию начальной загрузки, используя sklearn.

Sklearn реализует агрегацию начальной загрузки, используя BaggingClassifier, который (в документации говорится о нас) является «метаоценщиком ансамбля, который соответствует базовым классификаторам…». Из этих базовых классификаторов давайте выберем RandomForestClassifier, который сам по себе«Является метаоценкой, подходящей для ряда классификаторов дерева решений».

Агрегация начальной загрузки, как нам сказали, в основном представлена ​​в четырех вариантах: пакетирование, вставка, случайные подпространства и случайные исправления.В BaggingClassifier мы активируем каждый из этих четырех вариантов, манипулируя 4 из 11 параметров BaggingClassifier, а именно: bootstrap_features (True / False), bootstrap (True / False), max_features (= 1/ <1) и <code>max_samples (= 1 / <1). </p>

В sklearn, чтобы использовать BaggingClassifier с RandomForestClassifier, нам нужно:

clf = BaggingClassifier(RandomForestClassifier(parameters), parameters)

Получаетсячто из 17 параметров RandomForestClassifier два совпадают с параметрами BaggingClassifier: bootstrap и max_features.Хотя bootstrap одинаково для BaggingClassifier и RandomForestClassifier (т. Е. Выборка с / без замены), я не уверен насчет max_featuresBaggingClassifier, max_features - это «количество элементов, которые нужно нарисовать от Х до поезда», в данном случае RandomForestClassifier.В то время как в RandomForestClassifier это «количество функций, которые следует учитывать при поиске наилучшего разделения».

И это, наконец, подводит меня к вопросу: как мы координируем эти параметры в этих двух классификаторах так,мы можем получить четыре вида агрегации начальной загрузки в каждом из деревьев в случайном лесу?Я не просто спрашиваю, работает ли что-то вроде этого как аромат вставки:

clf=BaggingClassifier(RandomForestClassifier(bootstrap = False, max_features = 1.0),
   bootstrap_features = False, bootstrap = False, max_features = 1.0, max_samples = 0.6 )

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

1 Ответ

0 голосов
/ 02 февраля 2019

Нет конфликта между параметрами Random Forest и параметрами Ensemble Classifier.Причина, по которой Случайный лес имеет схожие параметры (кстати, max_features одинакова в двух, он просто сформулирован по-разному), заключается в том, что сам Случайный лес является алгоритмом ансамбля.

Следовательно, здесь вы пытаетесь достичь ансамбля классификаторов ансамбля, каждый из которых имеет свои параметры.Если я немного изменю ваш пример, чтобы его было легче понять, у нас будет:

BaggingClassifier(RandomForestClassifier(n_estimators = 100, bootstrap = True, max_features = 0.5), n_estimators = 5,
   bootstrap_features = False, bootstrap = False, max_features = 1.0, max_samples = 0.6 )

Вот как это будет работать:

  • Сначала EnsembleClassifier будет использовать все функции (который задается bootstrap_features = False, max_features = 1.0) и отбирает 60% (max_samples = 0.6) вашего образца без замены (bootstrap = False)
  • Затем он передает все особенности и 60% образца в RandomForest
    • Случайный лес выбирает 50% объектов без замены (max_features = 0.5), переданных ансамблем на предыдущем шаге (которые, в нашем случае, являются всеми объектами), и выполняет выборку с начальной загрузкой (с заменой)60% выборка пройдена ансамблевым классификатором.Основываясь на этом, он обучает дерево решений и повторяет эту процедуру n_estimators = 100 раз, с новыми функциями и новыми загрузками

Это повторяется n_estimators = 5 раз классификатором ансамбля.

Надеюсь, это поможет!

TLDR: параметры, которые вы передаете RandomForestClassifier и EnsembleClassifier, могут иметь одно и то же имя и фактически делать одно и то же, они делают это на разных этапахпроцесс обучения, и если вы установите bootstrap = False в одном, он не передаст значение этого параметра другому.

...