Руководство для начинающих по ускорению алгоритмов машинного обучения
С таким количеством достижений в области здравоохранения, маркетинга, бизнеса и т. д. возникла необходимость в разработке более продвинутых и сложных методов машинного обучения. Усиление машинного обучения — это один из таких методов, который можно использовать для решения сложных, управляемых данными реальных проблем. Этот блог полностью посвящен тому, как работает ускорение машинного обучения и как его можно реализовать для повышения эффективности моделей машинного обучения.
Почему используется бустинг?
Для решения запутанных задач нам нужны более продвинутые методы. Предположим, что для заданного набора данных изображений, содержащих изображения кошек и собак, вас попросили построить модель, которая может классифицировать эти изображения на два отдельных класса. Как и любой другой человек, вы начнете с идентификации изображений, используя некоторые правила, подобные приведенным ниже:
У изображения заостренные уши: Кошка
На изображении кошачьи глаза: Кошка
У изображения большие конечности: Собака
На изображении заточены когти: Кошка
Изображение имеет более широкую структуру рта: Собака
Все эти правила помогают нам определить, является ли изображение Собакой или кошкой, однако, если бы мы классифицировали изображение на основе отдельного (единственного) правила, предсказание было бы ошибочным. Каждое из этих правил по отдельности называется слабыми учениками, потому что эти правила недостаточно сильны, чтобы классифицировать изображение как кошку или собаку.
Поэтому, чтобы убедиться, что наш прогноз более точен, мы можем объединить прогноз каждого из этих слабых учеников, используя правило большинства или средневзвешенное значение. Это создает сильную модель ученика.
В приведенном выше примере мы определили 5 слабых учеников, и большинство этих правил (т.е. 3 из 5 учеников предсказывают изображение как кошку) дают нам предсказание, что изображение является кошкой. Таким образом, наш конечный результат — кошка.
Итак, это подводит нас к вопросу,
Что такое бустинг?
Повышение — это метод ансамблевого обучения, который использует набор алгоритмов машинного обучения для преобразования слабого ученика в сильного ученика, чтобы повысить точность модели.
Как я уже упоминал, Boosting — это метод ансамблевого обучения, но что такое ансамблевое обучение?
Что такое ансамбль в машинном обучении?
Ансамблевое обучение — это метод, который используется для повышения производительности модели машинного обучения путем объединения нескольких учащихся. По сравнению с одиночной моделью этот тип обучения создает модели с повышенной эффективностью и точностью. Именно поэтому ансамблевые методы используются для победы в ведущих рыночных конкурсах, таких как конкурс рекомендаций Netflix, конкурсы Kaggle и так далее.
Ниже я также обсудил разницу между бустингом и бэггингом.
Повышение против бэггинга
Ансамблевое обучение может осуществляться двумя способами:
Последовательный ансамбль, широко известный как повышение, здесь слабые ученики последовательно производятся на этапе обучения. Производительность модели улучшается за счет присвоения более высокого веса предыдущим, неправильно классифицированным образцам. Примером бустинга является алгоритм AdaBoost.
Параллельный ансамбль в народе известный как расфасовка, здесь слабые ученики производятся параллельно на этапе обучения. Производительность модели можно повысить, параллельно обучая несколько слабых учеников на наборах данных с начальной загрузкой. Примером мешков является алгоритм Random Forest.
В этом блоге я сосредоточусь на методе повышения, поэтому в следующем разделе мы поймем, как работает алгоритм повышения.
Как работает алгоритм повышения?
Основной принцип работы алгоритма повышения состоит в том, чтобы создать несколько слабых учеников и объединить их прогнозы, чтобы сформировать одно сильное правило. Эти слабые правила генерируются путем применения базовых алгоритмов машинного обучения к различным распределениям набора данных. Эти алгоритмы генерируют слабые правила для каждой итерации. После нескольких итераций слабые ученики объединяются, чтобы сформировать сильного ученика, который будет предсказывать более точный результат.
Вот как работает алгоритм:
Шаг 1: Базовый алгоритм считывает данные и присваивает равный вес каждому выборочному наблюдению.
Шаг 2: Выявляются ложные прогнозы, сделанные базовым учеником. На следующей итерации эти ложные прогнозы назначаются следующему базовому учащемуся с более высоким весом этих неверных прогнозов.
Шаг 3: Повторяйте шаг 2, пока алгоритм не сможет правильно классифицировать выходные данные.
Таким образом, основная цель бустинга — больше сосредоточиться на прогнозах с пропущенной классификацией.
Теперь, когда мы знаем, как работает алгоритм повышения, давайте разберемся в различных типах методов повышения.
Виды буста
Существует три основных способа, с помощью которых можно провести бустинг:
Адаптивное повышение или AdaBoost
Повышение градиента
XGBoost
Я буду обсуждать основы каждого из этих типов.
Адаптивное повышение
AdaBoost реализован путем объединения нескольких слабых учеников в одного сильного ученика.
Слабые ученики в AdaBoost принимают во внимание одну входную функцию и рисуют единое разделенное дерево решений, называемое пнем решения. Каждое наблюдение взвешивается одинаково при вытягивании первого пня решения.
Результаты первого пня решения анализируются, и если какие-либо наблюдения классифицируются ошибочно, им присваиваются более высокие веса.
После этого рисуется новый пень решения, рассматривая наблюдения с более высокими весами как более значимые.
Опять же, если какие-либо наблюдения классифицируются неправильно, им присваивается более высокий вес, и этот процесс продолжается до тех пор, пока все наблюдения не попадут в правильный класс.
Adaboost можно использовать как для задач классификации, так и для задач регрессии, однако чаще всего он используется для целей классификации.
Повышение градиента
Gradient Boosting также основан на последовательном обучении ансамбля. Здесь базовые обучающиеся генерируются последовательно таким образом, что текущий базовый обучаемый всегда более эффективен, чем предыдущий, т. е. общая модель улучшается последовательно с каждой итерацией.
Разница в этом типе повышения заключается в том, что веса для неправильно классифицированных результатов не увеличиваются, вместо этого метод повышения градиента пытается оптимизировать функцию потерь предыдущего ученика, добавляя новую модель, которая добавляет слабых учеников, чтобы уменьшить функцию потерь.
Основная идея здесь состоит в том, чтобы преодолеть ошибки в предсказаниях предыдущего ученика. Этот тип бустинга состоит из трех основных компонентов:
Функция потерь что нужно улучшить.
Слабый ученик для вычисления прогнозов и формирования сильных учеников.
Ан Аддитивная модель это упорядочит функцию потерь.
Как и AdaBoost, Gradient Boosting можно использовать как для задач классификации, так и для задач регрессии.
XGBoost
XGBoost — это расширенная версия метода повышения градиента, что буквально означает экстремальное усиление градиента. XGBoost, разработанный Tianqi Chen, относится к категории сообщества распределенного машинного обучения (DMLC).
Основной целью этого алгоритма является увеличение скорости и эффективности вычислений. Алгоритм Gradient Descent Boosting вычисляет выходные данные с меньшей скоростью, поскольку они последовательно анализируют набор данных, поэтому XGBoost используется для повышения или значительного повышения производительности модели.
XGBoost разработан, чтобы сосредоточиться на скорости вычислений и эффективности модели. Основные функции, предоставляемые XGBoost:
Параллельно создает деревья решений.
Реализация методов распределенных вычислений для оценки больших и сложных моделей.
Использование внесистемных вычислений для анализа огромных наборов данных.
Внедрение оптимизации кеша для наилучшего использования ресурсов.
Итак, это были различные типы алгоритмов повышения машинного обучения. Чтобы было интересно, в следующем разделе мы запустим демонстрацию, чтобы увидеть, как алгоритмы повышения могут быть реализованы в Python.
Повышение машинного обучения в Python
Небольшой отказ от ответственности: я буду использовать Python для запуска этой демонстрации, поэтому, если вы не знаете Python, вы можете просмотреть следующие блоги:
Теперь пришло время запачкать руки и начать программировать.
Постановка задачи: Изучить набор данных о грибах и построить модель машинного обучения, которая может классифицировать гриб как ядовитый или нет, анализируя его характеристики.
Описание набора данных: Этот набор данных дает подробное описание гипотетических образцов по 23 видам жаберных грибов. Каждый вид классифицируется либо как съедобные грибы, либо как несъедобные (ядовитые).
Логика: Построить модель машинного обучения с помощью одного из алгоритмов бустинга, чтобы предсказать, съедобен ли гриб.
Шаг 1. Импортируйте необходимые пакеты
from sklearn.ensemble import AdaBoostClassifier
from sklearn.preprocessing import LabelEncoder
from sklearn.tree import DecisionTreeClassifier
import pandas as pd
# Import train_test_split function
from sklearn.model_selection import train_test_split
#Import scikit-learn metrics module for accuracy calculation
from sklearn import metrics
Шаг 2. Импортируйте набор данных
# Load in the data
dataset = pd.read_csv('C://Users//NeelTemp//Desktop//mushroomsdataset.csv')
Шаг 3: Обработка данных
#Define the column names
dataset.columns = ['target','cap-shape','cap-surface','cap-color','bruises','odor','gill-attachment','gill-spacing',
'gill-size','gill-color','stalk-shape','stalk-root','stalk-surface-above-ring','stalk-surface-below-ring','stalk-color-above-ring',
'stalk-color-below-ring','veil-type','veil-color','ring-number','ring-type','spore-print-color','population',
'habitat']
for label in dataset.columns:
dataset[label] = LabelEncoder().fit(dataset[label]).transform(dataset[label])
#Display information about the data set
print(dataset.info())
Int64Index: 8124 entries, 6074 to 686
Data columns (total 23 columns):
target 8124 non-null int32
cap-shape 8124 non-null int32
cap-surface 8124 non-null int32
cap-color 8124 non-null int32
bruises 8124 non-null int32
odor 8124 non-null int32
gill-attachment 8124 non-null int32
gill-spacing 8124 non-null int32
gill-size 8124 non-null int32
gill-color 8124 non-null int32
stalk-shape 8124 non-null int32
stalk-root 8124 non-null int32
stalk-surface-above-ring 8124 non-null int32
stalk-surface-below-ring 8124 non-null int32
stalk-color-above-ring 8124 non-null int32
stalk-color-below-ring 8124 non-null int32
veil-type 8124 non-null int32
veil-color 8124 non-null int32
ring-number 8124 non-null int32
ring-type 8124 non-null int32
spore-print-color 8124 non-null int32
population 8124 non-null int32
habitat 8124 non-null int32
dtypes: int32(23)
memory usage: 793.4 KB
Шаг 4: Объединение данных
X = dataset.drop(['target'], axis=1)
Y = dataset['target']
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3)
Шаг 5: Постройте модель
model = DecisionTreeClassifier(criterion='entropy', max_depth=1)
AdaBoost = AdaBoostClassifier(base_estimator=model, n_estimators=400, learning_rate=1)
В приведенном выше фрагменте кода мы реализовали алгоритм AdaBoost. Функция «AdaBoostClassifier» принимает три важных параметра:
- base_estimator: базовая оценка (слабый ученик) по умолчанию представляет собой деревья решений.
- n_estimator: в этом поле указывается количество используемых базовых учащихся.
- Learning_rate: в этом поле указывается скорость обучения, для которой мы установили значение по умолчанию, т. е. 1.
#Fit the model with training data
boostmodel = AdaBoost.fit(X_train, Y_train)
Шаг 6: Оценка модели
#Evaluate the accuracy of the model
y_pred = boostmodel.predict(X_test)
predictions = metrics.accuracy_score(Y_test, y_pred)
#Calculating the accuracy in percentage
print('The accuracy is: ', predictions * 100, '%')
The accuracy is: 100.0 %
Мы получили точность 100%, что идеально!
Итак, на этом мы подошли к концу этого блога Boosting Machine Learning.