Введение

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

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

Алгоритм AdaBoost присваивает веса каждому слабому учащемуся на основе их результатов, а окончательный прогноз делается путем объединения прогнозов всех слабых учеников, взвешенных по их значимости.

Классификаторы AdaBoost могут использовать базовые учащиеся, которые в основном являются слабоэффективными классификаторами, такими как классификатор дерева решений, классификатор опорных векторов (SVC), классификатор случайного леса или другие, в зависимости от набора данных.

Я не буду углубляться в теоретические концепции этого алгоритма, а сосредоточусь на том, чтобы дать вам краткое представление о том, как этот алгоритм работает с использованием адаптивного повышения.

Мы рассмотрим реализацию этого алгоритма с использованием библиотеки Python Sckitlearn.

Адаптивное повышение

Чтобы лучше понять концепцию «сильного классификатора из слабого классификатора», мы можем взглянуть на Adaptive boosting (также называемый AdaBoost). ) является одной из наиболее часто используемых реализаций метода повышающего ансамбля. Адаптивное усиление объединяет (повышает) слабых учеников, чтобы сформировать сильного ученика. Рисунок ниже лучше иллюстрирует метод бустинговой классификации:

Из приведенной выше диаграммы давайте поймем, как работает адаптивный повышающий классификатор, объединив три классификатора на итерациях 1, 2 и 3.

  • Итерация 1 классифицирует 4 типа точек данных на 2 области со стрелками, звездами в верхней области и ромбами, сердцами в нижней области. Однако это не желаемый результат, мы обновляем веса для следующей итерации, где обучается следующий классификатор.
  • На итерации 2 мы видим аналогичную картину, но на этот раз стрелки и ромбы находятся в одной области, отделенной от сердец, а звезды — в другой области. Однако мы видим, что одна точка данных сердца неправильно классифицирована, поэтому мы снова обновляем веса.
  • В третьей итерации (Итерация 3) мы видим, что ошибочно классифицированная точка данных сердца теперь классифицируется как область, в которой присутствуют все точки данных сердца. Теперь, когда все точки данных классифицируются по соответствующим регионам (хотя и не по отдельным регионам, где существуют только эти точки данных), мы подошли к последнему шагу.
  • Наконец, ансамблевый адаптивный повышающий классификатор строится путем объединения 3 классификаторов, обученных с использованием различных обучающих наборов данных, созданных в результате адаптивной повторной выборки. Взгляните на последнюю итерацию (сильный классификатор), которая представляет собой классификатор адаптивного повышения (AdaBoost), созданный путем объединения 3 слабых классификаторов.

AdaBoost с использованием Python и библиотеки Scikitlearn

Теперь давайте посмотрим на реализацию этого алгоритма с использованием библиотеки Python Scikilearn.

Сначала давайте установим библиотеку scikit-learn и другие необходимые библиотеки с помощью команды pip install.

Примечание. На вашем компьютере должны быть установлены Python и pip

pip install -U scikit-learn
pip install pandas
pip install numpy

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

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier

Мы будем использовать набор данных wine от scikit-learn, который можно импортировать, как показано ниже. Переменные X и y могут быть определены, как показано ниже.

df = datasets.load_wine()
X = df.data
y = df.target

Модель 1 (классификатор дерева решений)

Во-первых, мы разделяем набор данных на обучающий и тестовый наборы. Размер тестового набора установлен равным 25% от всего набора данных. Параметр random_state обеспечивает воспроизводимость, а параметр stratify обеспечивает сохранение распределения классов как в обучающем, так и в тестовом наборах. Учебный набор используется для обучения модели, а тестовый набор используется для оценки ее производительности.

Затем инициализируется классификатор дерева решений, в котором критерий установлен на «энтропия», который измеряет качество разделения на основе прироста информации. Для параметра max_depth установлено значение 1, что указывает на то, что дерево решений будет иметь максимальную глубину в один уровень. Параметр random_state обеспечивает воспроизводимость результатов.

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

# Create training and test split
X_train, X_test, y_train, y_test = train_test_split(X, y, 
                                                    test_size=0.25, 
                                                    random_state=1, 
                                                    stratify=y)

# Decision Tree initialisation
dt = DecisionTreeClassifier(criterion='entropy', max_depth=1, random_state=1)

# Fit the model
dt.fit(X_train, y_train)

# Model scores on test and training data
print('Model test Score: %.3f, ' %dt.score(X_test, y_test),
      'Model training Score: %.3f' %dt.score(X_train, y_train))

Выход:

Model test Score: 0.622,  Model training Score: 0.714

Теперь попробуем улучшить эти показатели с помощью классификатора Adaboost.

Модель 2 (классификатор AdaBoost)

Мы используем классификатор дерева решений с теми же параметрами, что и показанные выше, в качестве базовой оценки. Мы используем параметр «algorithm», указывающий используемый алгоритм повышения, и в данном случае он установлен на «SAMME». Параметр random_state обеспечивает воспроизводимость результатов.

# Decision Tree initialisation
dt = DecisionTreeClassifier(criterion='entropy', max_depth=1, random_state=1)

# Instantiate the bagging classifier
adbclassifier = AdaBoostClassifier(estimator=dt,
                                   algorithm = 'SAMME',
                                   random_state=1)

# Fit the AdaBoost classifier
adbclassifier.fit(X_train, y_train)

# Model scores on test and training data
print('Model test Score: %.3f, ' %adbclassifier.score(X_test, y_test),
      'Model training Score: %.3f' %adbclassifier.score(X_train, y_train))

Выход:

Model test Score: 0.933,  Model training Score: 0.992

Как мы видим, точность модели значительно возросла, используя дерево решений в качестве базовой оценки. Это показывает способность классификатора AdaBoost к адаптивному и ансамблевому обучению.

Заключение

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