Оценка перекрестного значения с ошибкой эластичного значения для параметров

#scikit-learn #cross-validation #valueerror

#scikit-learn #перекрестная проверка #ошибка значения

Вопрос:

Я пытался реализовать простую эластичную сетевую регрессию на python, используя cross_val_score() функцию и вложенную перекрестную проверку, но она не позволит мне передать мои параметры. Он продолжает указывать ValueError из недопустимого параметра для моего l1_ratio, который я не понимаю, почему, учитывая, что он находится между 0 и 1.

 ValueError: Invalid parameter l1_ratio for estimator Pipeline(steps=[('preprocessor',
                 ColumnTransformer(remainder='passthrough',
                                   transformers=[('cat', OneHotEncoder(), [0]),
                                                 ('num', StandardScaler(),
                                                  slice(1, 37, None))])),
                ('model', ElasticNet(random_state=42))]).
Check the list of available parameters with `estimator.get_params().keys()`.
  

Мой код:

 cv_outer=KFold(10, shuffle=True)
cv_inner=KFold(10, shuffle=True)
models_params = {
    'en': (LREN(random_state=42), # Elastic Net
        {'l1_ratio': [0,0.25,0.5,0.75,1]
         ,'alpha':[1e-2,1e-1,1,1e1]})
# My first column is Categorical, the other 36 are numerical
preprocessor = ColumnTransformer(
                    transformers=[
                        ('cat', OneHotEncoder(), [0])
                        ,('num', StandardScaler(), slice(1,37))
                    ]
                    ,remainder = 'passthrough')
# Store Results
average_scores = dict()
for name, (model, params) in models_params.items():
    mymodel = Pipeline(steps = [('preprocessor', preprocessor),
                                ('model', model)
                                ])
        # this object is a regressor that also happens to choose
        # its hyperparameters automatically using `inner_cv`
    optimize_hparams = GridSearchCV(
            estimator = mymodel, param_grid=params, n_jobs = -1,
            cv=cv_inner, scoring='neg_mean_absolute_error')
# estimate generalization error on the outer-fold splits of the data
    outer_folds_scores = cross_val_score(
        optimize_hparams,
        X, y, cv=cv_outer, scoring='neg_mean_absolute_error')
  

Ответ №1:

Вы могли бы попробовать определить свою сетку, например:

 models_params = {
        {'model__l1_ratio': [0,0.25,0.5,0.75,1],
         'model__alpha':[1e-2,1e-1,1,1e1]}
    }
  

Комментарии:

1. ах да, я помню, что мне нужно было сделать это в другом месте для других моделей. Небольшое разочарование.

2. Да, вам нужно это сделать, когда у вас много шагов в вашем конвейере