Как запустить RFECV с SVC в sklearn - PullRequest
3 голосов
/ 12 апреля 2019

Я пытаюсь выполнить рекурсивное удаление признаков с перекрестной проверкой (RFECV) с GridSearchCV следующим образом, используя SVC в качестве классификатора.

Мой код выглядит следующим образом.

X = df[my_features]
y = df['gold_standard']

x_train, x_test, y_train, y_test = train_test_split(X, y, random_state=0)

k_fold = StratifiedKFold(n_splits=10, shuffle=True, random_state=0)

clf = SVC(class_weight="balanced")
rfecv = RFECV(estimator=clf, step=1, cv=k_fold, scoring='roc_auc')

param_grid = {'estimator__C': [0.001, 0.01, 0.1, 0.25, 0.5, 0.75, 1.0, 10.0, 100.0, 1000.0],
              'estimator__gamma': [0.001, 0.01, 0.1, 1.0, 2.0, 3.0, 10.0, 100.0, 1000.0],
              'estimator__kernel':('rbf', 'sigmoid', 'poly')
       }

CV_rfc = GridSearchCV(estimator=rfecv, param_grid=param_grid, cv= k_fold, scoring = 'roc_auc', verbose=10)

CV_rfc.fit(x_train, y_train)

Однако я получил сообщение об ошибке: RuntimeError: The classifier does not expose "coef_" or "feature_importances_" attributes

Есть ли способ устранить эту ошибку? Если нет, то какие еще методы feature selection я могу использовать с SVC?

Я с радостью предоставлю более подробную информацию, если это необходимо.

1 Ответ

2 голосов
/ 12 апреля 2019

Чтобы посмотреть больше реализаций выбора функций, вы можете взглянуть на:

https://scikit -learn.org / stable / modules / classes.html # module-sklearn.feature_selection

Например, в следующей ссылке они используют PCA с k-лучшим выбором функции и svc.

https://scikit -learn.org / stable / auto_examples / compose / plot_feature_union.html # sphx-glr-auto-examples-compose-plot-feature-union-py

Пример использования может быть изменен из предыдущей ссылки для большей простоты:

iris = load_iris()

X, y = iris.data, iris.target

# Maybe some original features where good, too?
selection = SelectKBest()

# Build SVC
svm = SVC(kernel="linear")

# Do grid search over k, n_components and C:

pipeline = Pipeline([("features", selection), ("svm", svm)])

param_grid = dict(features__k=[1, 2],
                  svm__C=[0.1, 1, 10])

grid_search = GridSearchCV(pipeline, param_grid=param_grid, cv=5, verbose=10)
grid_search.fit(X, y)
print(grid_search.best_estimator_)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...