Давайте вернемся к периоду бычьего роста криптовалюты, иногда с конца 2020 до начала 2021 года. Люди увидели возможность разбогатеть на криптовалюте. Тем не менее, новичок в мире должен тщательно изучить вопрос, прежде чем покупать так называемую потенциальную монету. Такой запрос может включать в себя опрос экспертов о прогнозах по указанной монете, прежде чем вкладывать в нее свой капитал, поскольку инвестиции в криптовалюту очень нестабильны. Фактически, такой запрос включает в себя опрос многих экспертов, а не только одного, о перспективах монет, в то же время проводя собственное исследование. Затем покупатель агрегирует информацию. Та же самая идеология — это то, как ансамблевое обучение работает в машинном обучении, и поэтому его можно назвать мудростью толпы.

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

Наиболее популярные ансамблевые методы включают BAGGING, BOOSTING, STACKING.

Общие методы, используемые в ансамблевом обучении, - это принцип голосования большинством, когда мы выбираем метку класса, которая в большинстве случаев была предсказана предиктором-классификатором. Идея большинства голосов применима только к задаче бинарной классификации, в задачах многоклассовой классификации мы будем ссылаться на множественное голосование. Возьмем, к примеру, если у нас есть обучающий набор, мы начинаем с обучения n-разных классификаторов на наборе данных. Различные классификаторы могут включать, помимо прочего, SVM, логистическую регрессию, деревья решений. Классификаторы также могут быть одного типа, но в этом случае мы будем использовать разные подмножества обучающего набора данных. Следовательно, метка предсказанного класса будет меткой класса режима, когда все предсказания из классификаторов будут объединены.

В следующем примере показано, как метод ансамбля работает лучше, чем используемые отдельные классификаторы.

УПАКОВКА

Альтернативным методом общего голосования большинством является бэггинг (т. е. агрегация начальной загрузки. Здесь мы не сопоставляем все обучающие данные по каждому из классификаторов, а скорее случайные выборки начальной загрузки (т. Это связано с тем, что ансамблевые методы работают лучше, когда предикторы независимы друг от друга, и один из способов получить разнообразный классификатор — обучать их с помощью разных алгоритмов.

Следовательно, каждый классификатор получит подмножество обучающих данных, а окончательный прогноз будет основан на режиме меток классов классификаторами. Важно отметить, что принцип мешков также используется в Random Forest. Однако однотипные классификаторы (деревья решений) комбинируются.

NB:

  1. В scikit Learn у некоторых классификаторов есть метод для возврата вероятности прогнозируемой метки класса, поэтому использование этой прогнозируемой вероятности метки класса вместо метки класса может быть полезно для получения мягкого голосования в отличие от жесткого голосования ( который использует наиболее часто встречающиеся метки классов). Мягкое голосование обеспечивает более высокую производительность, чем жесткое голосование, потому что оно придает больший вес голосу с высокой степенью уверенности.
  2. Модуль классификатора упаковки в scikit Learn автоматически выполняет мягкое голосование, если все базовые классификаторы имеют метод predict_proba.
  3. Решения в бэггинге принимаются параллельно.
  4. Отдельные предикторы имеют более высокое смещение, чем если бы они были обучены на исходном обучающем наборе. Однако агрегирование уменьшает как систематическую ошибку, так и дисперсию. Следовательно, ансамбль будет иметь более низкую дисперсию, чем один предиктор, обученный на исходном обучающем наборе.
  5. Установите для oob_score значение True при создании экземпляра классификатора пакетов в scikit-learn, как показано в следующем коде.

Чтобы внедрить классификатор пакетов в библиотеку обучения Scikit.

из sklearm.ensemble импортировать BaggingClassifier

bag_clf = BaggingClassifier( DecisionTreeClassifier(), n_estimators=500, bootstrap=True, n_job=-1, oob_score=True)

bag_clf.fit(x_train, y_train)

Когда можно получить оценку oob (Out-of-bag), если для начальной загрузки установлено значение True, и это даст нам представление об ошибке обобщения. используйте следующий код, чтобы получить оценку oob.

bag_clf.oob_score_

Затем значение, полученное из oob_score_, можно сравнить со значением точности.

Независимая оценка

Оценка проста при использовании метода мешков. Напомним, что подход, используемый при бэггинге, заключается в выборке с заменами. т. е. несколько партий исходной обучающей выборки хранятся в отдельных пакетах с заменами, а значит, какая-то выборка может вообще не отбираться. Они называются OOB, и, поскольку предикторы никогда не видят экземпляры OOB, их можно использовать в качестве нашего набора данных для оценки без необходимости в отдельных данных проверки или перекрестной проверке.

ПОВЫШЕНИЕ.

При бустинге слабые ученики объединяются, чтобы получить сильного ученика. Предикторы комбинируются последовательно, каждый пытается исправить ошибку предыдущего. Доступные методы повышения включают AdaBoost, GradientBoost, XGBoost, CatBoost и т. д.

AdaBoost; Используемый метод включает в себя уделение большего внимания и присвоение большего веса обучающим экземплярам, ​​которые ошибочно классифицируются предыдущим предиктором. Мы начинаем с подгонки классификатора к исходному набору данных, а затем подбираем копию классификатора к тому же набору данных, но увеличивая вес ошибочно предсказанной метки класса в предыдущем прогнозе. Этот метод похож на то, как работает градиентный спуск. Хотя градиентный спуск итеративно настраивает один предиктор, чтобы минимизировать функцию стоимости, в то время как AdaBoost добавляет новый предиктор в последовательность.

Внедрить AdaBoost в Scikit-Learn; импортируйте классификатор AdaBoost, который эквивалентен SAMME (этапное аддитивное моделирование с использованием функции экспоненциальных потерь мультикласса). Если предиктор может оценить вероятность класса, то установите метод алгоритма класса на SAMME.R, где R — «Реальный». Алгоритм SAMME.R сходится быстрее, чем SAMME, и обеспечивает меньшую ошибку теста с меньшим количеством повышающих итераций.

GradientBoost: еще один алгоритм повышения, который можно использовать как для задач регрессии, так и для задач классификации. Также работает последовательно, добавляя новый предиктор. Однако они добавляются к остаточной ошибке, сделанной предыдущим предиктором, в отличие от AdaBoost, который настраивает вес неподходящих экземпляров.

Из sklearn.tree импортируйте DecisionTreeRegressor

дерево1 = DecisionTreeRegressor (max_depth = 2)

дерево1.fit(X,y)

Шаг Nxet заключается в добавлении следующего предиктора к остаточной ошибке, сделанной предыдущим.

дерево2 = DecisionTreeRegressor (max_depth = 2)

Остаточная ошибка (y2) = y — tree1.predictX)

дерево2.fit(X,y2)

Добавьте третий предиктор регрессора к ошибке, сделанной вторым

дерево3 = решениеTreeClassifier (max_depth = 2)

Остаточная ошибка (y3) = y2 — tree2.predict(X)

Теперь этот ансамбль из трех деревьев может сделать новое предсказание, сложив предсказание трех деревьев.

Его можно реализовать в Scikit-Learn, используя приведенный ниже код.

из sklearn.ensemble импорт GradientBoostingRegressor

reg = GradientBoostingRegressor (random_state = 0)

reg.fit(X_train, y_train)

reg.score (x_test, y_test)

Ссылка

  1. https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.BaggingClassifier.html
  2. Практическое машинное обучение с помощью Scikit Learn и TensorFlow. Орельен Жерон