机器学习-optuna-自动调参

顾名思义,就是一个自动调参的东西

官方文档

示例代码:

import optuna

def objective(trial):
    x = trial.suggest_uniform('x', -10, 10)
    return (x - 2) ** 2

study = optuna.create_study()
study.optimize(objective, n_trials=100)

study.best_params  # E.g. {'x': 2.002108042}

首先需要定义一个叫做objective的函数,该函数只有一个参数(可以是类函数,此时函数定义为objective(self, trial)

x = trial.suggest_uniform('x', -10, 10)

这一段中x即为要调的参数,一个objective中可以设置多个参数,objective需要返回一个score,这个score可以自己灵活设置,总之返回个能衡量模型表现的数。suggestXXXX这样的函数用于设置该参数的特性,比如它是个category还是int还是float,诸如此类

trial.suggest设置的也不一定是参数,灵活运用,甚至可以用来调使用什么模型,比如官方给的另一个例子,classifier_name就是这样的一个参:

import sklearn

import optuna

# 1. Define an objective function to be maximized.
def objective(trial):

    # 2. Suggest values for the hyperparameters using a trial object.
    classifier_name = trial.suggest_categorical('classifier', ['SVC', 'RandomForest'])
    if classifier_name == 'SVC':
         svc_c = trial.suggest_loguniform('svc_c', 1e-10, 1e10)
         classifier_obj = sklearn.svm.SVC(C=svc_c, gamma='auto')
    else:
        rf_max_depth = int(trial.suggest_loguniform('rf_max_depth', 2, 32))
        classifier_obj = sklearn.ensemble.RandomForestClassifier(max_depth=rf_max_depth, n_estimators=10)
    ...
    return accuracy

# 3. Create a study object and optimize the objective function.
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=100)

最后一步照着抄就完事了

你可能感兴趣的:(机器学习)