Итак, я обнаружил, что StandardScaler () может ускорить выполнение моего RFECV в моем GridSearchCV при каждом вложенном трехкратном перекрестном подтверждении. Без 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,
solution_function_shape = 'ovr', степень = 3, гамма = 'auto', ядро = 'linear',
max_iter = -1, вероятность = Ложь, random_state = Нет, сокращение = Истина,
tol = 0,001, многословно = False))]). Проверьте список доступных параметров с помощью> estimator.get_params().keys()
.