Correction 200704
Si vous y réfléchissez bien, max_depth, n_estimators
etc. auraient dû être donnés comme des valeurs discrètes suggest_discrete_uniform (name, low, high, q)
, j'ai donc modifié le script.
Si max_depth
, n_estimators
, max_leaf_nodes
sont des valeurs discrètes suggest_discrete_uniform
, le type sera float
, alors changez-le en ʻint (suggest_discrete_uniform ()) et changez le type en type entier. Je le remets. Avant correction Depuis que j'ai écrit comment utiliser ʻOptuna
la dernière fois, je décrirai la méthode de réglage individuel à partir de maintenant. ..
Il y a plusieurs arguments qui peuvent être passés avec Randomforest
, mais j'ai mis tous les principaux avec ʻOptuna. Je me demandais s'il fallait passer
max_depth,
n_estimators` en tant qu'entiers ou nombres en tant que catégories, mais cette fois je les ai passés sous forme d'entiers.
def objective(trial):
criterion = trial.suggest_categorical('criterion', ['mse', 'mae'])
bootstrap = trial.suggest_categorical('bootstrap',['True','False'])
max_depth = int(trial.suggest_discrete_uniform('max_depth', 10, 1000,10))
max_features = trial.suggest_categorical('max_features', ['auto', 'sqrt','log2'])
max_leaf_nodes = int(trial.suggest_discrete_uniform('max_leaf_nodes', 10, 1000,10))
n_estimators = int(trial.suggest_discrete_uniform('n_estimators', 10, 1000,10))
regr = RandomForestRegressor(bootstrap = bootstrap, criterion = criterion,
max_depth = max_depth, max_features = max_features,
max_leaf_nodes = max_leaf_nodes,n_estimators = n_estimators,n_jobs=2)
score = cross_val_score(regr, X_train, y_train, cv=3, scoring="r2")
r2_mean = score.mean()
print(r2_mean)
return r2_mean
#Apprenez avec optuna
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=1000)
#Convient aux hyper paramètres réglés
optimised_rf = RandomForestRegressor(bootstrap = study.best_params['bootstrap'], criterion = study.best_params['criterion'],
max_depth = int(study.best_params['max_depth']), max_features = study.best_params['max_features'],
max_leaf_nodes = int(study.best_params['max_leaf_nodes']),n_estimators = int(study.best_params['n_estimators']),
n_jobs=2)
optimised_rf.fit(X_train ,y_train)
Je l'ai utilisé pour régler les hyperparamètres à l'aide de l'ensemble de données de Boston. Cela va bien.
Recommended Posts