Объединение последовательного выбора объектов с сеточным поиском - PullRequest
0 голосов
/ 22 ноября 2018

Я изо всех сил пытаюсь объединить Sequential Feature Selector (из mlxtend) с GridSearchCV (из sklearn).

Моя цель - выполнить прямой выбор функции для каждого набора параметров, чтобы найти, какая комбинация параметров и функций дает лучший результат.Следующий код основан на примере 8 руководства пользователя из mlxtend (см. http://rasbt.github.io/mlxtend/user_guide/feature_selection/SequentialFeatureSelector/#example-8-sequential-feature-selection-and-gridsearch)

X = data.values #dataframe with 48 features and 200 rows
y = diags #binary classification for each row

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=0)


svm = svm.SVC()

sfs = SFS(estimator = svm,
          k_features = (1,len(data.columns)),
          forward = True,
          floating=False,
          scoring = 'f1',
          cv = 5)

pipe = Pipeline([
    ('sfs', sfs),
    ('svm', svm)
])

param_grid = [
    {
     'sfs__estimator__C': [0.001, 0.01, 0.1, 1, 10, 100, 1000],
     'sfs__estimator__gamma': ['auto', 'scale', 0.001, 0.0001],
     'sfs__estimator__kernel': ['linear', 'rbf'],
     }
]


gs = GridSearchCV(estimator = pipe,
                  param_grid = param_grid,
                  scoring = 'f1',
                  n_jobs=1,
                  cv=5,
                  refit = True)

gs.fit(X_train, y_train)

print("Best parameters via GridSearch", gs.best_params_)

print("\nBest features:\n", gs.best_estimator_.steps[0][1].k_feature_idx_)
print("\nBest score:\n", gs.best_estimator_.steps[0][1].k_score_)

. При выполнении этого кода я получаю следующее:

Best parameters via GridSearch {'sfs__estimator__gamma': 'auto', 'sfs__estimator__kernel': 'linear', 'sfs__estimator__C': 0.001}

Best features:
 (16, 39)

Best score:
 0.31333333333333335

Я сомневался, что это былинаилучшие результаты, так как я на самом деле получал лучшие результаты при установке более высокого минимального количества объектов.

Я заметил, что изменение порядка сетки параметров изменило результаты. При использовании:

param_grid = [
    {
     # Notice the change of order for C, 0.01 is now first
     'sfs__estimator__C': [0.01, 0.001, 0.1, 1, 10, 100, 1000],
     'sfs__estimator__gamma': ['auto', 'scale', 0.001, 0.0001],
     'sfs__estimator__kernel': ['linear', 'rbf'],
     }
]

Я получил следующие результаты:

Best parameters via GridSearch {'sfs__estimator__gamma': 'auto', 'sfs__estimator__kernel': 'linear', 'sfs__estimator__C': 0.01}

Best features:
 (16, 39)

Best score:
 0.4428571428571429

Лучшие параметры, кажется, всегда возвращают первое значение каждого параметра. Я пробовал другие комбинации и параметры, где всегда были первые, и лучшие функции неизменить.

Я неправильно использую GridSearchCV? Или я печатаю неправильные атрибуты?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...