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_lambdaet
reg_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