Автоматическая версия одного из самых мощных инструментов машинного обучения XGBOOST.

Всем привет. Как дела! все хорошо? сегодня мы рассмотрим новый способ автоматизации XGBoost через AutoAGB.

Мы начнем с нашего обычного XGBOOST и продолжим продвижение AutoXGB. хорошо?

Сначала загрузите все данные

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# Importing the dataset
dataset = pd.read_csv('credit_data.csv', sep=",")
#drop the missing values
dataset = dataset.dropna()
X = dataset.iloc[:,1:4].values
y = dataset.iloc[:, 4].values
#------------------------------------------------------
#Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

Обычный XGBoost

#---XGBOOST------------------
# Fitting XGBoost to the Training set
from xgboost import XGBClassifier
classifier = XGBClassifier()
classifier.fit(X_train, y_train)
# Predicting the Test set results
y_pred_xg = classifier.predict(X_test)
# Making the Confusion Matrix
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred_xg)
#evaluation Metrics 
from sklearn import metrics
print('Accuracy Score:', metrics.accuracy_score(y_test, y_pred_xg))  
print('Balanced Accuracy Score:', metrics.balanced_accuracy_score(y_test, y_pred_xg)) 
print('Average Precision:',metrics.average_precision_score(y_test, y_pred_xg))

Теперь давайте выполним RandmizedSearchCV в качестве альтернативы GridSearchCV (gridsearchcv использует грубую силу, поэтому требует много вычислительной мощности и времени)

# Set parameter grid
xgb_params = {'max_depth': [3, 5, 6, 8, 9, 10, 11], 
              'learning_rate': [0.01, 0.1, 0.2, 0.3, 0.5], 
              'subsample': np.arange(0.4, 1.0, 0.1),
              'colsample_bytree': np.arange(0.3, 1.0, 0.1), 
              'colsample_bylevel': np.arange(0.3, 1.0, 0.1),
              'n_estimators': np.arange(100, 600, 100),
              'gamma': np.arange(0, 0.7, 0.1)}
from sklearn.model_selection import RandomizedSearchCV
# Create RandomizedSearchCV instance
xgb_grid = RandomizedSearchCV(estimator=XGBClassifier(objective='binary:logistic', 
                                                      tree_method="gpu_hist", # Use GPU
                                                      random_state=42,
                                                      eval_metric='aucpr'), # AUC under PR curve
                              param_distributions=xgb_params, 
                              cv=5, 
                              verbose=2,
                              n_iter=60,
                              scoring='average_precision')
# Run XGBoost grid search
xgb_grid.fit(X_train, y_train)
#to get the optimal setting for xgboost
xgb_grid.best_params_
xgb_grid.best_score_

Лучшие параметры: xgb_grid.best_params_

{'subsample': 0.4,
 'n_estimators': 500,
 'max_depth': 3,
 'learning_rate': 0.1,
 'gamma': 0.4,
 'colsample_bytree': 0.8000000000000003,
 'colsample_bylevel': 0.7000000000000002}

и его оценка: 0,9934761095555403

Теперь подогнать модель с лучшими параметрами

#fit the model with the best estimator
classifier1 = XGBClassifier(subsample= 0.4,n_estimators= 500,
                            max_depth=3,learning_rate=0.1,gamma=0.4,colsample_bytree= 0.8000000000000003,
                            colsample_bylevel=0.7000000000000002)
classifier1.fit(X_train,y_train)
# Predicting the Test set results
y_pred_xg1 = classifier1.predict(X_test)
# Making the Confusion Matrix
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred_xg1)
#evaluation Metrics 
from sklearn import metrics
print('Accuracy Score:', metrics.accuracy_score(y_test, y_pred_xg1))  
print('Balanced Accuracy Score:', metrics.balanced_accuracy_score(y_test, y_pred_xg1)) 
print('Average Precision:',metrics.average_precision_score(y_test, y_pred_xg1))

Объединение оценок с RandomizedSearchCV и без него

Теперь давайте выполним AUTOXGBoost

#AutoXGBOOST
#Current version there is dependency bug so, install autoxgb without #dependencies
pip install --no-deps autoxgboost
#pip install autoxgboost

Теперь установите оптимальные параметры

Ссылка на дополнительные определения параметров от разработчика, а также возможность использования CLI для запуска и выполнения скрипта: https://github.com/abhishekkrthakur/autoxgb

Теперь будем обучать модель

Вот и все!

Причины, по которым AutoXGB работает лучше, следующие:

  1. Использование байесовской оптимизации с Optuna для настройки гиперпараметров, которая быстрее, чем RandomizedSearchCV или GridSearchCV, поскольку использует информацию из предыдущих итераций для поиска лучших гиперпараметров за меньшее количество итераций.
  2. Таким образом, Optuna обеспечивает лучшую точность при скорости.
  3. Задокументировано Оптимизированное использование памяти, которое потребляет в 8 раз меньше памяти.

и недостатки

  1. мы теряем значительный контроль над настройкой параметров
  2. другой заметной проблемой является отсутствие контроля над показателями оценки.

Далее мы рассмотрим спешку с внедрением OPTUNA в качестве лучшей альтернативы методу настройки гиперпараметров Grid Search.

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

Некоторые из моих альтернативных интернет-присутствий Facebook, Instagram, Udemy, Blogger, Issuu и другие.

Также доступно на Quora @ https://www.quora.com/profile/Rupak-Bob-Roy

Добрый день, Говорите скорее.