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, просто чтобы убедиться, что проблема не в сходимости.