XG Boost - это очень мощный алгоритм машинного обучения, который может иметь более высокий уровень точности, если задан широким диапазоном параметров в контролируемом машинном обучении. XGBoost означает экстремальное усиление градиента. XG Boost работает с параллельным усилением дерева, которое предсказывает цель, комбинируя результаты нескольких слабых моделей . Библиотека XGBoost реализует алгоритм дерева решений с повышением градиента. Давайте рассмотрим подробнее на примере.
Здесь мы используем набор данных uci по сердечным заболеваниям от kaggle. Также мы пытаемся предсказать вероятность возникновения сердечных заболеваний и какие особенности для этого важнее. Вот ссылка на данные.
Сначала давайте импортируем панд для чтения данных, используя следующую строку кода.
import pandas as pd
Теперь давайте прочитаем данные в фрейм данных
data = pd.read_csv(‘../input/heart-disease-uci/heart.csv’)data
Это прочитает данные в фрейм данных, называемый данными, и даст следующий результат.

Теперь давайте посмотрим информацию о данных, чтобы узнать больше о данных, используя следующий код.
data.info()
Это даст следующую информацию о данных. Мы можем видеть типы данных, столбцы, нулевые значения и т. Д.
<class 'pandas.core.frame.DataFrame'> RangeIndex: 303 entries, 0 to 302 Data columns (total 14 columns): # Column Non-Null Count Dtype 0 age 303 non-null int64 1 sex 303 non-null int64 2 cp 303 non-null int64 3 trestbps 303 non-null int64 4 chol 303 non-null int64 5 fbs 303 non-null int64 6 restecg 303 non-null int64 7 thalach 303 non-null int64 8 exang 303 non-null int64 9 oldpeak 303 non-null float64 10 slope 303 non-null int64 11 ca 303 non-null int64 12 thal 303 non-null int64 13 target 303 non-null int64 dtypes: float64(1), int64(13) memory usage: 33.3 KB
Давайте посмотрим на другую форму информации с помощью следующего кода
data.describe()
Это даст описание фрейма данных следующим образом.

В описании указано количество, среднее, стандартное, минимальное, 25%, 50%, 75% и максимальное количество всех столбцов. Это еще больше помогает нам лучше понять данные. Теперь давайте импортируем библиотеки numpy, xgboost и sklearn.metrics. Для регрессии нам нужна среднеквадратическая ошибка.
import xgboost as xgb from sklearn.metrics import mean_squared_error import numpy as np
Затем нам нужно присвоить значения X и Y. Здесь мы также разделяем целевую переменную и остальные переменные, используя .iloc для подмножества данных.
X, Y = data.iloc[:,:-1],data.iloc[:,-1]
Теперь нам нужно преобразовать набор данных в оптимизированную структуру данных под названием Dmatrix, которую поддерживает XGBoost и которая дает ей признанный прирост производительности и эффективности.
data_dmatrix = xgb.DMatrix(data=X,label=Y)
Теперь мы создадим набор поездов и тестов для перекрестной проверки результатов с помощью функции train_test_split из модуля model_selection sklearn с размером 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)
Следующим шагом является создание экземпляра объекта регрессора XGBoost путем вызова класса XGBRegressor () из библиотеки XGBoost с гиперпараметрами, переданными в качестве аргументов.
xg_reg = xgb.XGBRegressor(objective ='reg:linear', colsample_bytree = 0.3, learning_rate = 0.1,max_depth = 5, alpha = 10, n_estimators = 10)
Теперь подгоним регрессор к обучающей выборке с помощью метода .fit ().
xg_reg.fit(X_train,Y_train)
вывод после подгонки показывает многие гиперпараметры следующим образом.
XGBRegressor(alpha=10, base_score=0.5, booster='gbtree',colsample_bylevel=1,colsample_bynode=1, colsample_bytree=0.3, gamma=0, gpu_id=-1,importance_type='gain', interaction_constraints='',learning_rate=0.1, max_delta_step=0, max_depth=5,min_child_weight=1, missing=nan, monotone_constraints='()', n_estimators=10, n_jobs=0, num_parallel_tree=1,objective='reg:linear', random_state=0, reg_alpha=10, reg_lambda=1,scale_pos_weight=1, subsample=1, tree_method='exact',validate_parameters=1, verbosity=None)
Давайте спрогнозируем вышеуказанную модель с помощью метода .predict ().
preds = xg_reg.predict(X_test) preds
Результат выглядит следующим образом:
array([0.62361383, 0.436409 , 0.4638252 , 0.4234442 , 0.5576368 , 0.36139676, 0.6453048 , 0.48385164, 0.61654013, 0.53615165, 0.5271714 , 0.5342451 , 0.36847046, 0.36139676, 0.5126163 , 0.42248273, 0.47246233, 0.52830946, 0.4810629 , 0.5204763 , 0.590331 , 0.47579026, 0.6621046 , 0.39579174, 0.49821952, 0.53383183, 0.4865605 , 0.5409056 , 0.43799824, 0.53313845, 0.4234442 , 0.5955741 , 0.5409056 , 0.45628968, 0.5528887 , 0.60049963, 0.61878484, 0.6078624 , 0.62996906, 0.59981364, 0.64041364, 0.55104494, 0.5254018 , 0.62684685, 0.55517054, 0.48204178, 0.36139676, 0.44480985, 0.60275817, 0.6277096 , 0.44678292, 0.42796794, 0.6621046 , 0.5477844 , 0.49884164, 0.62160766, 0.55104494, 0.59651303, 0.5327918 , 0.55396104, 0.5179344 ], dtype=float32)
Давайте рассчитаем среднеквадратичное отклонение с помощью функции mean_sqaured_error из модуля метрик sklearn.
rmse = np.sqrt(mean_squared_error(Y_test, preds))
print("RMSE: %f" % (rmse))
Результат будет следующим.
RMSE: 0.449886
Мы можем видеть, что прогноз RMSE для сердечных заболеваний оказался таким, что наша модель может предсказать с этой ошибкой. Чтобы проанализировать, какая функция является более важным фактором, нам нужно классифицировать, и для этого используется XGBclassifier (). Импортируем необходимые библиотеки для этой задачи.
from numpy import loadtxt from xgboost import XGBClassifier from xgboost import plot_importance from matplotlib import pyplot
Назовем классификатор, используя следующую строку
model = XGBClassifier()
Здесь мы пытаемся подогнать модель
model.fit(X, Y)
Приведенное выше дает следующий результат с гиперпараметрами.
XGBClassifier(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.300000012, max_delta_step=0, max_depth=6, min_child_weight=1,missing=nan,monotone_constraints='()', n_estimators=100,n_jobs=0,num_parallel_tree=1,random_state=0, reg_alpha=0, reg_lambda=1,scale_pos_weight=1,subsample=1, tree_method='exact',validate_parameters=1,verbosity=None)
Здесь мы пытаемся построить модель важности, используя этот код.
plot_importance(model) pyplot.show()
Вывод показывает порядок важности

Заключение
Мы построили модель XGBoost для прогнозирования вероятности сердечных заболеваний, и модель имеет среднеквадратичное отклонение 0,45. Мы также обнаружили, что наиболее важным фактором при обнаружении болезни сердца является холестерин.
Первоначально опубликовано на https://www.numpyninja.com 6 ноября 2020 г.