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

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

Набор данных

Мы будем использовать набор данных, который инкапсулирует выбросы углекислого газа, образующиеся при сжигании угля для производства электроэнергии в Соединенных Штатах Америки в период с 1973 по 2016 год. Используя XGBoost, мы попытаемся предсказать выбросы углекислого газа в ноутбуке jupyter на следующие несколько годы.

Что такое XGBoost на самом деле?

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

Примечание. Установите библиотеку python - xgboost, используя команду pip install xgboost.

Импорт библиотек

Оператор импорта - это наиболее распространенный способ вызова библиотек в Python. В этом примере мы будем использовать библиотеки pandas, numpy, seaborn, matplotlib, sklearn и XGBoost.

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score, KFold
from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import r2_score
import xgboost as xgb
plt.style.use('seaborn-bright')
#Read the dataset and print the top 5 elements of the dataset
data = pd.read_csv('CO2.csv')
data.head(5)

Мы используем Pandas для импорта файла CSV. Мы замечаем, что фрейм данных содержит столбец «ГГГГММ», который необходимо разделить на столбцы «Год» и «Месяц». На этом этапе мы также удалим все нулевые значения, которые могут быть в фрейме данных. Наконец, мы извлечем последние пять элементов фрейма данных, чтобы проверить, работает ли наш код. Так оно и было!

data['Month'] = data.YYYYMM.astype(str).str[4:6].astype(float)
data['Year'] = data.YYYYMM.astype(str).str[0:4].astype(float)
data.drop(['YYYYMM'], axis=1, inplace=True)
data.replace([np.inf, -np.inf], np.nan, inplace=True)
data.tail(5)

На этом этапе мы быстро проверим, все ли значения столбцов имеют тип данных - float, и увидим форму фрейма данных.

# check for data type
print(data.dtypes)
Value    float64
Month    float64
Year     float64
dtype: object
# check the number of instances
print(data.shape)
(523, 3)

Теперь мы разделим целевую переменную - «Значение» и остальные переменные, используя .iloc для подмножества данных. Затем набор данных необходимо преобразовать в оптимизированную структуру данных, называемую Dmatrix, которую поддерживает XGBoost.

y, X = data.loc[:,'Value'].values, data.loc[:,['Month', 'Year']].values
data_dmatrix = xgb.DMatrix(X,label=y)

Поезд-тестовый сплит

Прежде чем мы продолжим, мы должны создать набор поездов и тестов, используя функцию train_test_split из модуля sklearn model_selection с размером test_size, равным 20% данных. Кроме того, для обеспечения воспроизводимости результатов также назначается random_state.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)

XGBRegressor

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

reg_mod = xgb.XGBRegressor(
    n_estimators=1000,
    learning_rate=0.08,
    subsample=0.75,
    colsample_bytree=1, 
    max_depth=7,
    gamma=0,
)
reg_mod.fit(X_train, y_train)
XGBRegressor(base_score=0.5, booster='gbtree', colsample_bylevel=1,
             colsample_bynode=1, colsample_bytree=1, gamma=0, gpu_id=-1,
             importance_type='gain', interaction_constraints='',
             learning_rate=0.08, max_delta_step=0, max_depth=7,
             min_child_weight=1, missing=nan, monotone_constraints='()',
             n_estimators=1000, n_jobs=8, num_parallel_tree=1, random_state=0,
             reg_alpha=0, reg_lambda=1, scale_pos_weight=1, subsample=0.75,
             tree_method='exact', validate_parameters=1, verbosity=None)

Перекрестная проверка

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

#After training the model, we'll check the model training score.
scores = cross_val_score(reg_mod, X_train, y_train,cv=10)
print("Mean cross-validation score: %.2f" % scores.mean())
Mean cross-validation score: 0.98

Затем мы можем предсказать тестовые данные, а затем проверить точность прогноза.

reg_mod.fit(X_train,y_train)

predictions = reg_mod.predict(X_test)

Здесь мы будем использовать общие показатели статистической точности, такие как RMSE - среднеквадратичная ошибка и R-квадратная оценка.

rmse = np.sqrt(mean_squared_error(y_test, predictions))
print("RMSE: %f" % (rmse))
RMSE: 4.948449
from sklearn.metrics import r2_score
r2 = np.sqrt(r2_score(y_test, predictions))
print("R_Squared Score : %f" % (r2))
R_Squared Score : 0.987675

Как видите, эти статистические показатели восстановили нашу уверенность в этой модели. RMSE ~ 4,95 R-Squared Score ~ ​​98,8% Теперь давайте визуализируем исходный набор данных с помощью библиотеки seaborn.

plt.figure(figsize=(10, 5), dpi=80)
sns.lineplot(x='Year', y='Value', data=data)

График - исходный и прогнозный

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

plt.figure(figsize=(10, 5), dpi=80)
x_ax = range(len(y_test))
plt.plot(x_ax, y_test, label="test")
plt.plot(x_ax, predictions, label="predicted")
plt.title("Carbon Dioxide Emissions - Test and Predicted data")
plt.legend()
plt.show()

Наконец, последний фрагмент кода напечатает прогнозируемые выбросы углекислого газа до 2025 года.

plt.figure(figsize=(10, 5), dpi=80)
df=pd.DataFrame(predictions, columns=['pred']) 
df['date'] = pd.date_range(start='8/1/2016', periods=len(df), freq='M')
sns.lineplot(x='date', y='pred', data=df)
plt.title("Carbon Dioxide Emissions - Forecast")
plt.show()

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

Чтобы получить доступ к этому набору данных и Jupyter Notebook - перейдите на страницу GitHub.

Если вы хотите прочитать мои предыдущие статьи, ссылка здесь: -