Lassen Sie uns die Regression von "xgboost" einstellen.
Informationen zu "xgboost" finden Sie bei anderen HP. "Was ist Xgboost? & Ein Memo über die Hauptparameter" https://qiita.com/2357gi/items/913af8b813b069617aad
Später habe ich auf die Parameter auf der offiziellen Website verwiesen. https://xgboost.readthedocs.io/en/latest/parameter.html
Ich habe verschiedene Dinge eingegeben, aber das Entscheidungsbaumsystem ist in der Regel überlernt. Daher denke ich, dass es besser ist, die Parameter festzulegen, die es fest steuern.
In xgboost
ist es lambda
und alpha
, aber wenn Sie mit python
einstellen, geben Sie es mit reg_
wie reg_lambda
und reg_alpha
an.
#Stellen Sie die Zielfunktion von optuna ein
#Dies ist eine gtree-Parametereinstellung.
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
#Finden Sie mit optuna den optimalen Wert
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=500)
#Passend für abgestimmte Hyperparameter
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)
Dies ist das Ergebnis von Boston.
Es ist alles.
# -*- 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
#Laden Sie den Boston-Datensatz
boston = datasets.load_boston()
#print(boston['feature_names'])
#Getrennte Merkmalsmenge und Zielvariable
X = boston['data']
y = boston['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.8)
#Stellen Sie die Zielfunktion von optuna ein
#Dies ist eine gtree-Parametereinstellung.
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
#Finden Sie mit optuna den optimalen Wert
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=500)
#Passend für abgestimmte Hyperparameter
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)
#Ergebnisse anzeigen
print("Passend für Trainingsdaten")
print("Genauigkeit der Trainingsdaten=", optimised_rf.score(X_train, y_train))
pre_train = optimised_rf.predict(X_train)
print("Passend für Testdaten")
print("Testen Sie die Genauigkeit der Daten=", optimised_rf.score(X_test, y_test))
pre_test = optimised_rf.predict(X_test)
#Grafik anzeigen
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')
#Passen Sie den Text hier an
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