[PYTHON] Comment configurer XG Boost à l'aide d'Optuna

Comment configurer XG Boost à l'aide d'Optuna

Définissons la régression de xgboost.

Pour xgboost, veuillez vous référer à d'autres HP. "Qu'est-ce que Xgboost? & Un mémo sur les principaux paramètres" https://qiita.com/2357gi/items/913af8b813b069617aad

Plus tard, j'ai fait référence aux paramètres sur le site officiel. https://xgboost.readthedocs.io/en/latest/parameter.html

J'ai mis diverses choses, mais le système d'arbre de décision a tendance à être surappris, donc je pense qu'il vaut mieux définir les paramètres qui le contrôlent fermement. Dans xgboost, il s'agit de lambda et de ʻalpha, mais lors du paramétrage avec python, spécifiez-le avec reg_ like reg_lambdaetreg_alpha`.

#Définir la fonction objective d'Optuna
#Ceci est un réglage de paramètre gtree.
def objective(trial):
    eta =  trial.suggest_loguniform('eta', 1e-8, 1.0)
    gamma = trial.suggest_loguniform('gamma', 1e-8, 1.0)
    max_depth = trial.suggest_int('max_depth', 1, 20)
    min_child_weight = trial.suggest_loguniform('min_child_weight', 1e-8, 1.0)
    max_delta_step = trial.suggest_loguniform('max_delta_step', 1e-8, 1.0)
    subsample = trial.suggest_uniform('subsample', 0.0, 1.0)
    reg_lambda = trial.suggest_uniform('reg_lambda', 0.0, 1000.0)
    reg_alpha = trial.suggest_uniform('reg_alpha', 0.0, 1000.0)
    
  
    regr =xgb.XGBRegressor(eta = eta, gamma = gamma, max_depth = max_depth,
                           min_child_weight = min_child_weight, max_delta_step = max_delta_step,
                           subsample = subsample,reg_lambda = reg_lambda,reg_alpha = reg_alpha)
 
    score = cross_val_score(regr, X_train, y_train, cv=5, scoring="r2")
    r2_mean = score.mean()
    print(r2_mean)
 
    return r2_mean

#Trouvez la valeur optimale avec optuna
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=500)
 
#Convient aux hyper paramètres réglés
optimised_rf = xgb.XGBRegressor(eta = study.best_params['eta'],gamma = study.best_params['gamma'],
                                max_depth = study.best_params['max_depth'],min_child_weight = study.best_params['min_child_weight'],
                                max_delta_step = study.best_params['max_delta_step'],subsample = study.best_params['subsample'],
                                reg_lambda = study.best_params['reg_lambda'],reg_alpha = study.best_params['reg_alpha'])
 
optimised_rf.fit(X_train ,y_train)

C'est le résultat de Boston.

xgboost_Figure 2020-08-08 185911.png

C'est tout.

# -*- coding: utf-8 -*-
 
from sklearn import datasets
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
import pandas as pd
import optuna
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import cross_val_score
 
#Charger le jeu de données Boston
boston = datasets.load_boston()
 
#print(boston['feature_names'])
#Quantité de caractéristiques distincte et variable d'objectif
X = boston['data']
y = boston['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.8)

#Définir la fonction objective d'Optuna
#Ceci est un réglage de paramètre gtree.
def objective(trial):
    eta =  trial.suggest_loguniform('eta', 1e-8, 1.0)
    gamma = trial.suggest_loguniform('gamma', 1e-8, 1.0)
    max_depth = trial.suggest_int('max_depth', 1, 20)
    min_child_weight = trial.suggest_loguniform('min_child_weight', 1e-8, 1.0)
    max_delta_step = trial.suggest_loguniform('max_delta_step', 1e-8, 1.0)
    subsample = trial.suggest_uniform('subsample', 0.0, 1.0)
    reg_lambda = trial.suggest_uniform('reg_lambda', 0.0, 1000.0)
    reg_alpha = trial.suggest_uniform('reg_alpha', 0.0, 1000.0)
    
  
    regr =xgb.XGBRegressor(eta = eta, gamma = gamma, max_depth = max_depth,
                           min_child_weight = min_child_weight, max_delta_step = max_delta_step,
                           subsample = subsample,reg_lambda = reg_lambda,reg_alpha = reg_alpha)
 
    score = cross_val_score(regr, X_train, y_train, cv=5, scoring="r2")
    r2_mean = score.mean()
    print(r2_mean)
 
    return r2_mean
 
#Trouvez la valeur optimale avec optuna
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=500)
 
#Convient aux hyper paramètres réglés
optimised_rf = xgb.XGBRegressor(eta = study.best_params['eta'],gamma = study.best_params['gamma'],
                                max_depth = study.best_params['max_depth'],min_child_weight = study.best_params['min_child_weight'],
                                max_delta_step = study.best_params['max_delta_step'],subsample = study.best_params['subsample'],
                                reg_lambda = study.best_params['reg_lambda'],reg_alpha = study.best_params['reg_alpha'])
 
optimised_rf.fit(X_train ,y_train)
#Voir les résultats
print("Convient aux données d'entraînement")
print("Exactitude des données d'entraînement=", optimised_rf.score(X_train, y_train))
pre_train = optimised_rf.predict(X_train)
print("Convient aux données de test")
print("Exactitude des données de test=", optimised_rf.score(X_test, y_test))
pre_test = optimised_rf.predict(X_test)
 
#Affichage du graphique
plt.scatter(y_train, pre_train, marker='o', cmap = "Blue", label="train")
plt.scatter(y_test ,pre_test, marker='o', cmap= "Red", label="test")
plt.title('boston')
plt.xlabel('measurment')
plt.ylabel('predict')
#Ajustez le texte ici
x = 30  
y1 = 12
y2 = 10
s1 =  "train_r2 =" + str(optimised_rf.score(X_train, y_train))
s2 =  "test_r2 =" + str(optimised_rf.score(X_test, y_test))
plt.text(x, y1, s1)
plt.text(x, y2, s2)
 
plt.legend(loc="upper left", fontsize=14)
plt.show()


Recommended Posts

Comment configurer XG Boost à l'aide d'Optuna
Comment configurer SVM à l'aide d'Optuna
Comment configurer une forêt aléatoire à l'aide d'Optuna
Comment configurer une forêt aléatoire à l'aide d'Optuna
Comment définir optuna (comment écrire un espace de recherche)
Comment configurer un environnement Python à l'aide de pyenv
[Kaggle] Essayez d'utiliser xg boost
Comment configurer Layer sur Lambda à l'aide d'AWS SAM
Journal d'enquête sur la façon d'optimiser les hyperparamètres LightGBM à l'aide d'Optuna
Comment installer Python à l'aide d'Anaconda
[Blender] Comment définir shape_key avec un script
Comment dessiner un graphique avec Matplotlib
Comment régler l'heure du serveur sur l'heure japonaise
Comment installer un package à l'aide d'un référentiel
Prédiction de survivant utilisant le boost de xg titanesque de Kaggle [80,1%]
Comment télécharger des vidéos YouTube à l'aide de pytube3
Comment afficher la carte à l'aide de l'API Google Map (Android)
Comment coder un drone en utilisant la reconnaissance d'image
Comment définir l'emplacement du navigateur dans Headless Chrome
Comment définir la base de données de Django sur Mongodb Visual Studio 2019
Comment obtenir des données d'article à l'aide de l'API Qiita
Comment configurer un serveur de développement local
Comment rechercher des données HTML à l'aide de Beautiful Soup
Comment mettre en ligne sur un Drive partagé à l'aide de pydrive
Comment désinstaller un module installé à l'aide de setup.py
Comment définir l'affinité du processeur pour les threads de processus
Comment configurer l'authentification par clé publique avec SSH
Comment écrire une interface graphique à l'aide de la commande maya
Comment récupérer des données de courses de chevaux à l'aide de pandas read_html
Comment soumettre automatiquement des formulaires Microsoft à l'aide de python (version Mac)
Comment organiser un séminaire pratique à l'aide de Jupyter à l'aide de Docker
Comment faire un clic droit en utilisant la saisie au clavier dans RPA?
Comment créer un package Python à l'aide de VS Code
[Blender] Comment définir dynamiquement les sélections EnumProperty
Définissez PATH équivalent à "sudo su-" en utilisant l'environnement d'Ansible
Comment quitter lors de l'utilisation de Python dans Terminal (Mac)
[Introduction à Udemy Python3 + Application] 30. Comment utiliser l'ensemble
Comment analyser avec Google Colaboratory à l'aide de l'API Kaggle
Comment récupérer plusieurs tableaux à l'aide de slice en python.
[Introduction à Python] Comment arrêter la boucle en utilisant break?
Comment exécuter une commande à l'aide d'un sous-processus en Python
Comment configurer et compiler l'environnement Cython
Comment écrire plus rapidement en utilisant numpy comme deque
[Introduction à Python] Comment écrire des instructions répétitives à l'aide d'instructions for
Comment utiliser xml.etree.ElementTree
Comment utiliser virtualenv
Grattage 2 Comment gratter
Comment utiliser Seaboan
Comment utiliser la correspondance d'image
Comment utiliser le shogun
Comment installer Python
Comment utiliser Pandas 2
Comment lire PyPI
Comment installer pip
Comment utiliser Virtualenv
Comment utiliser numpy.vectorize
Comment mettre à jour easy_install
Comment installer Archlinux
Comment utiliser pytest_report_header