optuna を使って、最適なパラメータを見つけたいです。
python
print(X_train.shape, y_train.shape, X_test.shape, y_test.shape)
(976, 315) (976,) (482, 315) (482,)
データは上の様になっています。
optunaを利用するにあたって、以下のメソッドを組みました。
python
def objective(trial): params = { 'alphas': trial.suggest_int('alphas', 1, 100) } model = make_pipeline(RobustScaler(), RidgeCV(cv = kfolds, **params)) model.fit(X_train, y_train) pre = model.predict(X_test) acc = metrics.accuracy_score(pre, y_test) score = 1 - acc return score
objectiveメソッドを使って、
python
study = optuna.create_study(sampler = optuna.samplers.RandomSampler(seed = 0)) study.optimize(objective, n_trials = 100) print(study.best_params)
を実行したところ、
text
Trial 0 failed because of the following error: TypeError('len() of unsized object') Traceback (most recent call last): File "/opt/conda/lib/python3.7/site-packages/optuna/study/_optimize.py", line 213, in _run_trial value_or_values = func(trial) File "/tmp/ipykernel_57/646466574.py", line 7, in objective model.fit(X_train, y_train) File "/opt/conda/lib/python3.7/site-packages/sklearn/pipeline.py", line 335, in fit self._final_estimator.fit(Xt, y, **fit_params_last_step) File "/opt/conda/lib/python3.7/site-packages/sklearn/linear_model/_ridge.py", line 1617, in fit parameters, cv=cv, scoring=self.scoring) File "/opt/conda/lib/python3.7/site-packages/sklearn/utils/validation.py", line 72, in inner_f return f(**kwargs) File "/opt/conda/lib/python3.7/site-packages/sklearn/model_selection/_search.py", line 1184, in __init__ _check_param_grid(param_grid) File "/opt/conda/lib/python3.7/site-packages/sklearn/model_selection/_search.py", line 395, in _check_param_grid if len(v) == 0: TypeError: len() of unsized object
のエラーが出てしまいます。
違うデータセットなのですが、以下のコードだと動きます。
python
def objective(trial): params = { 'kernel': 'rbf', 'C': trial.suggest_loguniform('C', 1e-10, 1e10), 'gamma': trial.suggest_loguniform('gamma', 1e-10, 3.0) } model_ = svm.SVC(**params) model_.fit(train_X, train_Y) pre = model_.predict(test_X) acc = metrics.accuracy_score(pre, test_Y) score = 1 - acc return score study = optuna.create_study(sampler = optuna.samplers.RandomSampler(seed = 0)) study.optimize(objective, n_trials = 100) print(study.best_params)
そもそも、RidgeをOptunaにかけること自体が間違っているのでしょうか?どなたか、ご教示いただけると有難いです。
まだ回答がついていません
会員登録して回答してみよう