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.

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