ВВЕДЕНИЕ
Методы ансамбля позволяют комбинировать множество моделей машинного обучения (также известных как «базовые модели») для создания более эффективной модели. Методы ансамбля не имеют преимуществ, если производительность модели не является основной целью [1]. Если вашей целью в проекте машинного обучения является создание модели с наилучшей производительностью, то эта статья для вас.
Мы узнаем о ансамблевых методах, таких как стекирование, бэггинг и бустинг, и поймем, как они улучшают производительность моделей машинного обучения.
Требования: Python, Scikit-Learn, Pandas
ПОЧЕМУ АНСАМБЕЛЬНЫЕ МЕТОДЫ
Прежде чем мы углубимся в различные типы ансамблевых методов, давайте обсудим, почему мы предпочитаем ансамбль различных алгоритмов машинного обучения одному. Например, если вы хотите выбрать хороший ресторан для свидания, но не уверены, насколько хороша их еда, вы можете попросить друга. Скорее всего, предложение вашего друга может быть не совсем надежным из-за его вкусов, которые могут не совпадать с вашими.
Чтобы получить более надежные отзывы, вы опросите 100 человек, которые были в этом ресторане, и каждый человек может предоставить вам подробные отзывы о различных аспектах ресторана. Благодаря тому, что обзоры более обширны и разнообразны, вы можете принимать более взвешенные решения.
Разнообразие моделей в ансамбле имеет решающее значение для его работы [2]. Обучение разных моделей на одних и тех же данных позволяет им изучать различные закономерности и особенности и совершать разные ошибки. В сочетании они могут давать более точные прогнозы, чем любая отдельная модель — это известно как «хорошее разнообразие».
Плохое разнообразие в ансамблевых моделях возникает, когда алгоритмы всех моделей или обучающие данные слишком похожи, что не приводит к улучшению производительности при объединении.
РАЗНЫЕ АНСАМБЕЛЬНЫЕ ПРИЕМЫ
УПАКОВКА
При бэггинге множество экземпляров одной и той же модели (например, линейной регрессии) обучаются на наборе данных. Существует два типа методов упаковки:
- ЗАГРУЗКА. Каждый экземпляр модели обучается на разных подмножествах данных, чтобы избежать получения похожих или одинаковых результатов. Этот метод помогает создавать разные версии модели, поскольку они изучают разные закономерности и делают разные прогнозы. Окончательный прогноз ансамбля менее чувствителен к конкретным обучающим данным и более устойчив к шуму за счет усреднения прогнозов всех моделей.
- СЛУЧАЙНЫЙ ПОДПРОСТРАНСТВЕННЫЙ МЕТОД. В отличие от традиционного метода создания пакетов (самозагрузки), этот метод случайным образом выбирает подмножество функций для обучения каждого экземпляра модели. Делая это, модели могут лучше сосредоточиться на важных функциях.
Важно отметить, что метод бэггинга поддерживает ряд моделей машинного обучения, таких как деревья решений, линейная регрессия и нейронные сети. Ансамбльный метод бэггинга лежит в основе популярного алгоритма машинного обучения, называемого случайным лесом в библиотеке Scikit-Learn. Он использует деревья решений в качестве базовой оценки.
Вот пример классификатора пакетов, реализованного на Python с использованием библиотеки Scikit-Learn. Для запуска этого примера в вашей среде Python должны быть установлены блокноты scikit-learn, pandas и jupyter.
# import required libraries from sklearn.ensemble import BaggingClassifier from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split import pandas as pd # import dataset df = pd.read_csv("your_data.csv") # split dataset into train and test features = df.drop('target', axis=1) label = df.target X_train, X_test, y_train, y_test = train_test_split(X=features, y=label, test_size=0.2, random_state=42) # initialize base model base_model = LogisticRegression() # wrap base model with the BaggingClassifier bc = BaggingClassifier(estimator=LogisticRegression(), n_estimators=10, random_state=42) # train and test model bc.fit(X_train, y_train) y_pred = bc.predict(X_test)
ПОВЫШЕНИЕ
Повышение — это метод ансамбля, который повышает точность модели за счет объединения нескольких слабых учеников, таких как деревья решений, для создания сильного ученика. Мы обучаем последовательность слабых учеников, каждый из которых пытается исправить ошибки предыдущего. Откуда каждый слабый ученик знает, что нужно концентрироваться на ошибках?
По мере того как больший вес присваивается неправильно классифицированным прогнозам, следующий слабый ученик сосредотачивается на исправлении этих ошибок, уменьшая частоту ошибок предыдущих моделей. Этот процесс повторяется до тех пор, пока не будет достигнут критерий остановки.
Многие алгоритмы машинного обучения используют повышение, включая CatBoost, XGBoost, AdaBoost и GradientBoost. Повышение градиента использует более продвинутую технику; вместо того, чтобы присваивать веса ошибочным классификациям, он сопоставляет каждого слабого ученика с отрицательным градиентом предыдущего, чтобы минимизировать функцию потерь [3].
Ниже приведен пример использования любого алгоритма повышения. Примечание. Обратитесь к приведенному выше коду, чтобы узнать, как разделить данные.
# import required libraries from sklearn.ensemble import GradientBoostingClassifier, AdaBoostClassifier # initialize model, then train and test gbc = GradientBoostingClassifier() gbc.fit(X_train, y_train) y_pred = gbc.predict(X_test)
УКЛАДКА
В отличие от двух других методов ансамбля, метод ансамбля суммирования использует несколько базовых моделей и метамодель. После обучения всех слабых учеников в наборе данных делать прогнозы, их выходные данные подаются в качестве входных данных для обучения модели более высокого уровня, называемой «метамоделью», для получения окончательного прогноза. При решении задач классификации стековые ансамбли, как правило, работают лучше, когда базовые модели настроены на прогнозирование вероятностей каждого класса, а не просто на присвоение определенных меток классам [4].
Ниже приведен пример использования метода ансамбля суммирования.
# import required libraries from sklearn.linear_model import LogisticRegression from sklearn.tree import DecisionTreeClassifier, ExtraTreeClassifier # creat list of estimators(models) to use in the Stacking Classifier estimators = [('dtc', DecisionTreeClassifier()), ('etc', ExtraTreeClassifier())] # initialize StackingClassifier with the estimators and a final estimator stack = StackingClassifier(estimators=estimators, final_estimator=LogisticRegression()] # train and test model stack.fit(X_train, y_train) y_pred = clf.predict(X_test)
В этой статье мы узнали о трех типах ансамблевых методов, а именно о накоплении, упаковке и повышении, а также о том, как их реализовать с помощью Python. Методы ансамбля очень эффективны для повышения точности моделей машинного обучения. Комбинируя различные модели машинного обучения, мы можем извлечь выгоду из их сильных и слабых сторон, чтобы добиться от них большей точности.
ИСПОЛЬЗОВАННАЯ ЛИТЕРАТУРА
- Браунли, Дж. (2020, 25 октября). Зачем использовать ансамблевое обучение? Мастерство машинного обучения. https://machinelearningmastery.com/why-use-ensemble-learning/
- Браунли, Дж. (2021, 13 мая). Нежное введение в ансамблевое разнообразие для машинного обучения. MachineLearningMastery.com. https://machinelearningmastery.com/ensemble-diversity-for-machine-learning/
- sklearn.ensemble.GradientBoostingClassifier. (н.д.). Scikit-Learn. Получено 13 января 2023 г. с https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html#sklearn-ensemble-gradientboostingclassifier.
- Браунли, Дж. (2021, 22 апреля). Сущность объединения ансамблей для машинного обучения. Мастерство машинного обучения. https://machinelearningmastery.com/essence-of-stacking-ensembles-for-machine-learning/