SKLearn Ошибка с конвейером и Gridsearch - PullRequest
1 голос
/ 28 сентября 2019

Я хотел бы сначала разделить мои данные в тестовом и обучающем наборе.Затем я хочу использовать GridSearchCV на моем тренировочном наборе (внутренне разделенный на набор обучения / проверки).В конце я хочу собрать все тестовые данные и сделать некоторые другие вещи (не в рамках вопроса).

Я должен масштабировать свои данные.Поэтому я хочу решить эту проблему в конвейере.Некоторые вещи в моем SVC должны быть исправлены (kernel = 'rbf', class_weight = ...).Когда я запускаю код, происходит следующее:

«ValueError: Неверный оценщик параметров для конвейера оценки»

Я не понимаю, что я делаю неправильно.Я пытался следовать этой теме: StandardScaler с конвейерами и GridSearchCV

Единственное отличие состоит в том, что я исправляю некоторые параметры в моем SVC.Как я могу справиться с этим?

target = np.array(target).ravel()
loo = LeaveOneOut()
loo.get_n_splits(input)
    # Outer Loop
for train_index, test_index in loo.split(input):    
        X_train, X_test = input[train_index], input[test_index]
        y_train, y_test = target[train_index], target[test_index]
        p_grid = {'estimator__C': np.logspace(-5, 2, 20),}
                  'estimator__gamma': np.logspace(-5, 3, 20)}

        SVC_Kernel = SVC(kernel='rbf', class_weight='balanced',tol=10e-4, max_iter=200000, probability=False)
        pipe_SVC = Pipeline([('scaler',  RobustScaler()),('SVC', SVC_Kernel)])  
        n_splits = 5
        scoring = "f1_micro"

        inner_cv = StratifiedKFold(n_splits=n_splits,
                         shuffle=True, random_state=5)
        clfSearch = GridSearchCV(estimator=pipe_SVC, param_grid=p_grid,
                                 cv=inner_cv, scoring='f1_micro', iid=False, n_jobs=-1)

        clfSearch.fit(X_train, y_train)



        print("Best parameters set found on validation set for Support Vector Machine:")
        print()
        print(clfSearch.best_params_)
        print()
        print(clfSearch.best_score_)
        print("Grid scores on validation set:")
        print()

Я тоже пробовал это так:

p_grid = {'estimator__C': np.logspace(-5, 2, 20),
              'estimator__gamma': np.logspace(-5, 3, 20),
              'estimator__tol': [10e-4],
              'estimator__kernel': ['rbf'],
              'estimator__class_weight': ['balanced'],
              'estimator__max_iter':[200000],
              'estimator__probability': [False]}

SVC_Kernel = SVC()

Это тоже не работает.

1 Ответ

1 голос
/ 28 сентября 2019

Проблема в вашем p_grid.Вы выполняете поиск по сетке на вашем Pipeline, и в нем нет ничего под названием estimator.У него есть нечто, называемое SVC, поэтому, если вы хотите установить этот параметр SVC, вам следует ставить перед вами клавиши с SVC__ вместо estimator__.Поэтому замените p_grid на:

p_grid = {'SVC__C': np.logspace(-5, 2, 20),}
          'SVC__gamma': np.logspace(-5, 3, 20)}

Кроме того, вы можете заменить внешнюю петлю for с помощью функции cross_validate.

...