Stacking StandardScaler() с помощью RFECV и GridSearchCV

Итак, я обнаружил, что StandardScaler() может ускорить выполнение моего RFECV внутри моего GridSearchCV при каждой вложенной 3-кратной перекрестной проверке. Без StandardScaler() мой код работал более 2 дней, поэтому я отменил и решил ввести StandardScaler в этот процесс. Но сейчас он работает уже более 4 часов, и я не уверен, что все сделал правильно. Вот мой код:

# Choose Linear SVM as classifier
LSVM = SVC(kernel='linear')

selector = RFECV(LSVM, step=1, cv=3, scoring='f1')

param_grid = [{'estimator__C': [0.001, 0.01, 0.1, 1, 10, 100]}]

clf = make_pipeline(StandardScaler(), 
                GridSearchCV(selector,
                             param_grid,
                             cv=3,
                             refit=True,
                             scoring='f1'))

clf.fit(X, Y)

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

У меня есть 8000 строк из 145 объектов, которые должны быть удалены с помощью RFECV, и 6 C-значений, которые должны быть удалены с помощью GridSearchCV. Таким образом, для каждого значения C лучший набор характеристик определяется RFECV.

Спасибо!

Обновить:

Поэтому я поместил StandardScaler в RFECV следующим образом:

 clf = SVC(kernel='linear')

 kf = KFold(n_splits=3, shuffle=True, random_state=0)  

 estimators = [('standardize' , StandardScaler()),
               ('clf', clf)]

 class Mypipeline(Pipeline):
     @property
     def coef_(self):
         return self._final_estimator.coef_
     @property
     def feature_importances_(self):
         return self._final_estimator.feature_importances_ 

 pipeline = Mypipeline(estimators)
 rfecv = RFECV(estimator=pipeline, cv=kf, scoring='f1', verbose=10)

 param_grid = [{'estimator__svc__C': [0.001, 0.01, 0.1, 1, 10, 100]}]

 clf = GridSearchCV(rfecv, param_grid, cv=3, scoring='f1', verbose=10)

Но все равно выдает следующую ошибку:

ValueError: Неверный параметр C для конвейера оценки (память = нет, steps=[('standardcaler', StandardScaler(copy=True, with_mean=True, >with_std=True)), ('svc', SVC(C=1.0, cache_size) =200, class_weight= Нет, >coef0=0.0, решение_функция_сипа = "ovr", степень =3, гамма = "авто", ядро ​​= "линейное", max_iter=-1, вероятность = ложь, случайное состояние = нет, сокращение =True, tol=0,001, многословно =False))]). Проверьте список доступных параметров с помощью>estimator.get_params().keys(),

1 ответ

Кумар прав. Кроме того, что вы, возможно, захотите сделать, включите многословный в GridSearchCV. Кроме того, вы можете добавить ограничение на число итераций SVC, начиная с очень небольшого числа, например 5, просто чтобы убедиться, что проблема не в сходимости.

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