Fix 200704 Wenn Sie sorgfältig darüber nachdenken, sollten "max_depth, n_estimators" usw. als diskrete Werte angegeben werden "suggest_discrete_uniform (name, low, high, q)", also habe ich das Skript geändert. Wenn "max_depth", "n_estimators", "max_leaf_nodes" diskrete Werte "suggest_discrete_uniform" sind, lautet der Typ "float". Ändern Sie daher den Typ in "int (suggest_discrete_uniform ())" und den Typ in "integer type". Ich übergebe es. Vor der Korrektur Da ich das letzte Mal geschrieben habe, wie man "Optuna" benutzt, werde ich von nun an die individuelle Einstellungsmethode beschreiben. .. Es gibt verschiedene Argumente, die mit "Randomforest" übergeben werden können, aber ich habe alle Hauptargumente mit "Optuna" festgelegt. Ich habe mich gefragt, ob ich "max_depth", "n_estimators" als Ganzzahlen oder Zahlen als Kategorien übergeben soll, aber diesmal habe ich sie als Ganzzahlen übergeben.
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
#Lerne mit optuna
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=1000)
#Passend für abgestimmte Hyperparameter
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)
Ich habe dies verwendet, um Hyperparameter mithilfe des Boston-Datensatzes abzustimmen. Es passt gut.
Recommended Posts