Часть 3. Реализация
Рассмотрим работу модели градиентного бустинга, решив задачу прогнозирования сахарного диабета с использованием языка программирования Python и библиотеки XGBoost. Набор данных для обучения, который предоставляет Университет Джонса Хопкинса, состоит из объектов, каждый из которых имеет 8 признаков и одну целевую переменную.
Объектами являются женщины в возрасте от 21 года индийского наследия Пима. Признаками объектов являются:
1) Количество беременностей
2) Плазменные концентрации глюкозы в тесте на допустимое отклонение глюкозы
3) Диастолическое артериальное давление
4) Толщина кожи в области трицепса
5) Количество инсулина
6) Индекс массы тела
7) Diabetes pedigree function
8) Возраст
Целевой переменной является метка класса:
0 — прогноз, на предрасположенность к заболеванию сахарным диа- бетом в ближайшие 5 лет,
1 — прогноз, на не предрасположенность к заболеванию сахарным диабетом в ближайшие 5 лет.
Загрузим наборы данных и подготовим их для обучения и оценки качества с помощью модели XGBoost.
import numpy
import xgboost from sklearn
import cross_validation from sklearn. metrics
import accuracy_score
# load data dataset = numpy. loadtxt («pima-indians-diabetes. csv», delimiter=««,)
Необходимо разделить столбцы исходного набора данных на обучающую выборку и целевую переменную.
# split data into X and y
X = dataset [:,0:8]
Y = dataset [:,8]
Также необходимо разбить обучающую выборку на две части: первая будет участвовать в обучении модели, а вторая (отложенная выборка) — в оценке качества обученной модели.
# split data into train and test sets
seed = 7 4
test_size = 0.33
X_train, X_test, y_train, y_test = cross_validation. train_test_split (X, Y, test_size=test_size, random_state=seed)
Так как целевая переменная принимает конечное число значений (0 или 1), мы имеем дело с задачей классификации. Для решения подобных задач в библиотеке XGBoost есть класс XGBClassifier, который позволяет решать задачи классификации при помощи метода градиентного бустинга. Метод fit данного класса принимает в качестве входных параметров обучающую выборку и целевую переменную и обучает модель по входным данным.
# fit model no training data model = xgboost. XGBClassifier () model. fit (X_train, y_train)
После того как модель обучена, можно делать предсказания по отложенной выборке. Для того чтобы сделать предсказание по отложенной выборке, необходимо ее передать на вход в функцию predict объекта XGBClassifier. Выходным значением функции predict является вектор размерности (1, количество объектов в выборке, которая подается на вход), который содержит в себе вероятности отнесения объекта с индексом , к классу 0. Чтобы получить валидные метки класса (0 или 1) необходимо округлить полученные вероятности до 0 или 1.
# make predictions for test data y_pred = model. predict (X_test) predictions = [round (value) for value in y_pred]
Для оценки качества построенной модели используется метод accuracy_score из библиотеки sklearn. На вход он принимает полученные предсказания и действительные метки классов, а на выходе мы получаем долю правильно классифицированных объектов.
# make predictions for test data y_pred = model. predict (X_test) predictions = [round (value) for value in y_pred]
Accuracy: 77.95%
В итоге мы получили качество 77.95%, что является хорошим качеством, учитывая тот факт, что мы имеем в наличии небольшой набор данных.
