Создаем первую XGBoost модель на Python с использованием scikit-learn — TechCave

XGBoost - библиотека, реализующая методы градиентного бустинга. Ее производительность сделала данную библиотеку одним из лидеров в области машинного обучения. В этом посте вы узнаете, как установить XGBoost и создать свою первую модель на Python

Создаем первую XGBoost модель на Python с использованием scikit-learn

Machine Learning/Data Mining/Big Data

Создаем первую XGBoost модель на Python с использованием scikit-learn

XGBoost — библиотека, реализующая методы градиентного бустинга. Ее производительность сделала данную библиотеку одним из лидеров в области машинного обучения.

В этом посте вы узнаете, как установить XGBoost и создать свою первую модель на Python.

1. Установка XGBoost для использования совместно с Python

XGBoost может быть установлен легко с помощью pip.

Например так:

sudo pip install xgboost

Для того, чтобы обновить XGBoost, необходимо использовать команду:

sudo pip install --upgrade xgboost

Также можно использовать альтернативный способ установки XGBoost, если вы не можете использовать pip или вы хотите установить последнюю версию кода из GitHub. Для этого вы должны клонировать проект XGBoost и выполнить сборку и установку в ручную.

Например, чтобы построить XGBoost без многопоточности на Mac OS X (GCC должен быть установлен с помощью MacPorts или Homebrew), вы должны выполнить следующие команды:

git clone --recursive https://github.com/dmlc/xgboost
cd xgboost
cp make/minimum.mk ./config.mk
make -j4
cd python-package
sudo python setup.py install

Вы можете узнать больше о том, как установить XGBoost для различных платформ из руководства по установке XGBoost. Информацию о пакете Python можно посмотреть тут XGBoost Python Package.

Для справки, вы можете просмотреть ссылку API XGBoost Python.

2. Описание проблемы: Прогнозирование развития диабета

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

Этот набор данных состоит из 8 входных переменных, которые описывают медицинские данные пациентов, так и переменной, выходным параметром, который означает появление у пациента диабета в течение 5 лет.

Вы можете узнать больше об этом наборе данных на веб-сайте UCI Machine Learning Repository.

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

Загрузите этот набор данных и поместите его в текущую рабочую директорию с именем файла "pima-indians-diabetes.csv".

3. Загрузка и подготовка данных

В этом разделе мы загрузим данные из файла и подготовим его к использованию для обучения и оценки модели XGBoost.

И так, давайте начнем с импорта классов и функций, которые мы намерены использовать в этом уроке.

import numpy
import xgboost
from sklearn import cross_validation
from sklearn.metrics import accuracy_score

Далее, нам необходимо загрузить файл CSV в виде массива NumPy, используя функцию loadtxt().

# load data
dataset = numpy.loadtxt('pima-indians-diabetes.csv', delimiter=",")

Мы должны отделить столбцы (атрибуты или фичи) набора данных входных паттернов (Х) и паттернов выходных (Y). Мы можем сделать это легко, указав индексы столбцов в формате NumPy массива.

# split data into X and y
X = dataset[:,0:8]
Y = dataset[:,8]

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

Для этого мы будем использовать функцию train_test_split() из библиотеки scikit-learn.

# split data into train and test sets
seed = 7
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)

Теперь мы готовы обучить вашу модель.

4. Обучение модели XGBoost

Модель XGBoost для классификации называется XGBClassifier. Мы можем создать ее и обучить с помощью тренировочного набора данных. Эта модель имеет функцию fit() для тренировки модели.

Параметры для обучения модели могут быть переданы модели в конструкторе.

# fit model no training data
model = xgboost.XGBClassifier()
model.fit(X_train, y_train)

Вы можете увидеть параметры, используемые в уже обученной модели, используя print():

print(model)

Вы можете узнать больше о классах XGBClassifier и XGBRegressor в документации XGBoost Python scikit-learn API.

Вы можете узнать больше о значении каждого параметра и как настроить их на странице XGBoost параметров.

Теперь мы готовы использовать обученную модель, чтобы сделать прогноз.

5. Делаем прогнозы с помощью XGBoost модели

Теперь мы можем делать прогнозы, применив нашу обученную модель на тестовом наборе данных.

Для того, чтобы делать прогнозы мы используем scikit-learn функцию model.predict().

По умолчанию, предсказания, сделанные XGBoost являются вероятностями. Поскольку это бинарная задача классификации, каждое предсказание является вероятностью принадлежности к первому классу. Поэтому мы можем легко преобразовать их в значения двоичных классов путем округления до 0 или 1.

# make predictions for test data
y_pred = model.predict(X_test)
predictions = [round(value) for value in y_pred]

Теперь, когда мы использовали обученную модель, чтобы сделать прогнозы по новым данным, мы можем оценить качество предсказаний, сравнивая их с реальными значениями. Для этого мы будем использовать встроенную в scikit-learn функцию accuracy_score().

# evaluate predictions
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

6. Собираем все вместе

Ниже приведен полный листинг кода.

# First XGBoost model for Pima Indians dataset
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
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)
# fit model no training data
model = xgboost.XGBClassifier()
model.fit(X_train, y_train)
# make predictions for test data
y_pred = model.predict(X_test)
predictions = [round(value) for value in y_pred]
# evaluate predictions
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

После запуска этого примера мы увидим следующий результат.

Accuracy: 77.95%

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

Вот и все. Мы построили простую модель с использованием XGBoost.

18:43
9285

Нет комментариев. Ваш будет первым!

Авторизация

Пользователи

Seangle
Галя Рубцова
Ольга Телюкова
Zhenya
Лариса Аксиненко
Dmitry Loginov
Dimas Potapov
Ваня Берёзкин
Володя Рудомаха