Внутреннее масштабирование тренировочных данных во время CV с использованием GridSearchCV для оптимизации гиперпараметров

Я пытаюсь выполнить оптимизацию гиперпараметра SVM с помощью GridSearchCV. Предположим, я передаю эту функцию с данными и метками обучающего набора (разделение теста уже изолировано перед вызовом функции).

def param_search(X, y):
    Cs = 10. ** np.arange(-3, 4)
    gammas = 10. ** np.arange(-3, 3)

    rbf_grid = {'clf__C':Cs, 'clf__gamma':gammas, 'clf__kernel':['rbf'],
        'clf__class_weight':['balanced']}
    lin_grid = {'clf__C':Cs, 'clf__kernel':['linear'], 
        'clf__class_weight':['balanced']}

    pipe = Pipeline([('scaler', StandardScaler()), ('clf', svm.SVC())])

    grid_search = GridSearchCV(pipe, param_grid=[rbf_grid, lin_grid],
        cv=StratifiedKFold(n_splits=5, shuffle=True), verbose=2, n_jobs=-1)
    grid_search.fit(X,y)
    return grid_search.best_params_

Я хочу, чтобы GridSearchCV оценивал каждое разделение резюме с данными, масштабированными по обучению, рассчитанному для этого конкретного разделения. Функция StandardScaler() в настоящее время вызывается 5 раз для каждого набора параметров (что я и хочу)? Или только один раз при первом вызове GridSearchCV.

1 ответ

Решение

Короткий ответ: да, это подходит Standard Scaler 5 раз для каждого набора параметров. По сути, весь конвейер устанавливается один раз за разделение и выбор параметров, а затем оценивается.

Другие вопросы по тегам