如何在 sklearn 中使用 SVC 运行 RFECV

Posted

技术标签:

【中文标题】如何在 sklearn 中使用 SVC 运行 RFECV【英文标题】:How to run RFECV with SVC in sklearn 【发布时间】:2019-09-03 02:01:43 【问题描述】:

我正在尝试使用GridSearchCVSVC 作为分类器执行递归特征消除和交叉验证 (RFECV),如下所示。

我的代码如下。

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

有没有办法解决这个错误?如果不是,我可以与SVC 一起使用的其他feature selection 技术是什么?

如果需要,我很乐意提供更多详细信息。

【问题讨论】:

您好,来自文档:Changed in version 0.17: Deprecated decision_function_shape=’ovo’ and None. @BCJuan 我认为问题在于SVC 不支持coef_。你有什么建议可以解决这个问题吗?或任何其他支持 SVC 的特征选择技术的建议? 它不叫coef_,而是coef0 【参考方案1】:

要查看更多功能选择实现,您可以查看:

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

例如,在下一个链接中,他们使用了带有 k-best 特征选择和 svc 的 PCA。

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_)

【讨论】:

它解决了部分问题:错误和问题iwhat are the other feature selection techniques that I can use with SVC? 如果它是问题的一部分,那么它应该是一个评论。请提供完整的解决方案作为答案。谢谢 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review @NaN 这样更好还是需要更多改进?【参考方案2】:

emmm...在sklearn 0.19.2中,问题好像已经解决了。我的代码和你的差不多,但是可以用:

           svc = SVC(                    
            kernel = 'linear',
            probability = True,
            random_state = 1 ) 
       rfecv = RFECV(
               estimator = svc,
               scoring = 'roc_auc'  
               )

       rfecv.fit(train_values,train_Labels)     
       selecInfo = rfecv.support_                      
       selecIndex = np.where(selecInfo==1)         

【讨论】:

它适用于“线性”内核,但它不适用于默认的“rbf”内核。

以上是关于如何在 sklearn 中使用 SVC 运行 RFECV的主要内容,如果未能解决你的问题,请参考以下文章

sklearn.SVC 中的独立 SVC 行是做啥的?

Python,sklearn:使用 MinMaxScaler 和 SVC 的管道操作顺序

如何将 SHAP 与 sklearn 中的线性 SVC 模型一起使用 Pipeline?

使用 Sklearn 进行蛮力模型选择

SKLearn:从决策边界获取每个点的距离?

机器学习sklearn----支持向量机SVC重要参数核函数kernel如何选择