Руководство по реализации бэггинга с помощью scikit-learn.

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

  • Что такое бэгинг?
  • Построение модели с помощью scikit-learn
  • Дерево решений против мешков

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

Давайте погрузимся!

Что такое Бэггинг?

Бэггинг — это метод ансамблевого обучения, в котором используется метод начальной загрузки. Бэггинг также известен как агрегация начальной загрузки. Итак, вы можете спросить, что такое бутстрэппинг? Начальная загрузка — это статистическая процедура, которая создает несколько наборов данных путем выборки данных с заменой.

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

Бэггинг с помощью Scikit-Learn

Теперь я собираюсь показать вам, как реализовать классификатор мешков, используя scikit-learn с набором данных из реального мира. Перед загрузкой набора данных позвольте мне импортировать pandas.

import pandas as pd

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

df = pd.read_csv("data.csv")

Вы можете найти этот набор данных здесь. Давайте посмотрим на первые пять строк набора данных.

df.head()

Этот набор данных состоит из примеров злокачественных и доброкачественных опухолевых клеток. Первый столбец в наборе данных показывает уникальные идентификационные номера, а второй столбец показывает диагнозы, скажем, M указывает на злокачественное заболевание, а B указывает на доброкачественное. Остальные столбцы — наши фичи. Давайте посмотрим на форму набора данных.

df.shape
#Output:
(569, 33)

Предварительная обработка данных

Давайте удалим ненужные столбцы из набора данных.

df = df.drop(["Unnamed: 32"], axis=1)

Теперь давайте создадим входную и целевую переменные. Для этого я воспользуюсь методом iloc. Во-первых, позвольте мне преобразовать функции в массив numpy.

X = df.iloc[:,2:].values

После этого я собираюсь создать целевую переменную, а затем преобразовать эту переменную в массив numpy.

y = df.iloc[:,1].values

Наша целевая переменная имеет две категории: M и B. Давайте закодируем целевую переменную с помощью кодировщика меток.

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
y = le.fit_transform(y)

Круто, мы закодировали целевые метки. Перед построением модели давайте разделим набор данных на обучающий и тестовый наборы. Для этого я буду использовать функцию train_test_split. Во-первых, позвольте мне импортировать эту функцию.

from sklearn.model_selection import train_test_split

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

X_train, X_test, y_train, y_test = train_test_split(
                                       X, y, 
                                       stratify=y, 
                                       random_state=0)

Прохладный. Наши наборы данных готовы к анализу. Теперь я собираюсь использовать технику бэггинга для анализа данных с помощью scikit-learn.

Дерево решений против бэггинга

Чтобы построить модель упаковки, сначала позвольте мне импортировать BaggingClassifier из подмодуля ансамбля.

from sklearn.ensemble import BaggingClassifier

Я собираюсь использовать классификатор дерева решений в качестве базовой оценки. Позвольте мне импортировать этот класс.

from sklearn.tree import DecisionTreeClassifier

Красивый. Наши занятия готовы. Во-первых, я собираюсь построить модель с помощью DecisionTreeClassifier. После этого я собираюсь использовать бэггинг для сборки модели. Наконец, я собираюсь сравнить эти модели. Создадим объект из класса DecisionTreeClassifier.

tree = DecisionTreeClassifier(random_state = 0)
# fitting the model
tree = tree.fit(X_train, y_train)
# Predicting the training set
y_train_pred = tree.predict(X_train)
# Predicting the test set
y_test_pred = tree.predict(X_test)

Теперь давайте посмотрим на производительность модели на тренировочном и тестовом наборах. Для этого я буду использовать функцию precision_score. Позвольте мне импортировать эту функцию.

from sklearn.metrics import accuracy_score

Теперь давайте посмотрим на показатель точности тренировочного набора.

tree_train = accuracy_score(y_train, y_train_pred)

После этого давайте посмотрим на оценку точности тестового набора.

tree_test = accuracy_score(y_test, y_test_pred)

Красивый. Мы рассчитали показатели точности. Теперь давайте напечатаем эти оценки.

print(f’Decision tree train/test accuracies: {tree_train:.3f}/{tree_test:.3f}’)
#Output:
Decision tree train / test accuracies:  1.000 /  0.944

Ну вот. Оценка модели дерева на обучающей выборке равна 100%. Но оценка модели дерева на тестовом наборе составляет 94%. Обратите внимание, что более низкая точность теста указывает на высокую дисперсию модели. Другими словами, в моделях деревьев существует проблема переобучения. Теперь давайте построим модель упаковки. Для этого я создам объект из BaggingClassifier.

bag = BaggingClassifier(
          base_estimator=tree,
          n_estimators=100,
          random_state=0)

Потрясающий. Наш объект готов к обучению. Давайте подгоним модель мешков, используя обучающий набор.

bag = bag.fit(X_train, y_train)

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

# Predicting the training set
y_train_pred = bag.predict(X_train)
# Predicting the test set
y_test_pred = bag.predict(X_test)

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

bag_train = accuracy_score(y_train, y_train_pred)

После этого давайте посмотрим на оценку точности модели на тестовом наборе.

bag_test = accuracy_score(y_test, y_test_pred)

Красивый. Мы рассчитали показатели точности. Теперь давайте напечатаем эти оценки.

print(f’Bagging train/test accuracies: {bag_train:.3f}/{bag_test:.3f}’)
#Output
Bagging train/test accuracies:  1.000/ 0.958

Ну вот. Оценка модели мешков на тренировочном наборе составляет 100%. Но оценка модели бэггинга на тестовом наборе составляет 96%. Сравнивая модель мешков с моделью дерева, я могу сказать, что классификатор мешков имеет несколько лучшую производительность обобщения.

Заключение

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

Вот и все. Спасибо за чтение. Я надеюсь, вам понравится это. Не забудьте подписаться на нас на YouTube | Гитхаб | Твиттер | Каггл | ЛинкедИн 👍





Рекомендации

Если этот пост был полезен, пожалуйста, несколько раз нажмите кнопку аплодисментов 👏, чтобы показать мне свою поддержку 👇