首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SVR的递归特征消除和网格搜索

SVR的递归特征消除和网格搜索
EN

Stack Overflow用户
提问于 2020-04-10 14:52:07
回答 1查看 1.2K关注 0票数 0

我使用SVR来解决一个预测问题,我想做特征选择以及超参数搜索。我试图同时使用RFECV和GridSearchCV,但是我收到了代码中的错误。

我的代码如下:

代码语言:javascript
复制
def svr_model(X, Y):
estimator=SVR(kernel='rbf')
param_grid={
    'C': [0.1, 1, 100, 1000],
    'epsilon': [0.0001, 0.0005, 0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10],
    'gamma': [0.0001, 0.001, 0.005, 0.1, 1, 3, 5]
}

selector = RFECV(estimator, step = 1, cv = 5)

gsc = GridSearchCV(
    selector,
    param_grid,
    cv=5, scoring='neg_root_mean_squared_error', verbose=0, n_jobs=-1)

grid_result = gsc.fit(X, Y)


best_params = grid_result.best_params_

best_svr = SVR(kernel='rbf', C=best_params["C"], epsilon=best_params["epsilon"], gamma=best_params["gamma"],
               coef0=0.1, shrinking=True,
               tol=0.001, cache_size=200, verbose=False, max_iter=-1)

scoring = {
           'abs_error': 'neg_mean_absolute_error',
           'squared_error': 'neg_mean_squared_error',
           'r2':'r2'}

scores = cross_validate(best_svr, X, Y, cv=10, scoring=scoring, return_train_score=True, return_estimator = True)
return scores

错误是

代码语言:javascript
复制
ValueError: Invalid parameter C for estimator RFECV(cv=5,
  estimator=SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1,
                gamma='scale', kernel='rbf', max_iter=-1, shrinking=True,
                tol=0.001, verbose=False),
  min_features_to_select=1, n_jobs=None, scoring=None, step=1, verbose=0). Check the list of available parameters with `estimator.get_params().keys()`.

我对机器学习非常陌生,任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-10 15:22:34

网格搜索运行使用在selector中传递的不同参数组合初始化的param_grid。但是在这种情况下,我们希望网格搜索初始化selector中的估计器。这是通过使用字典命名风格<estimator>__<parameter>来实现的。请按照文档了解更多详细信息。

工作代码

代码语言:javascript
复制
estimator=SVR(kernel='linear')
selector = RFECV(estimator, step = 1, cv = 5)

gsc = GridSearchCV(
    selector,
    param_grid={
        'estimator__C': [0.1, 1, 100, 1000],
        'estimator__epsilon': [0.0001, 0.0005],
        'estimator__gamma': [0.0001, 0.001]},

    cv=5, scoring='neg_mean_squared_error', verbose=0, n_jobs=-1)

grid_result = gsc.fit(X, Y)

代码中的另外两个bug

  1. neg_root_mean_squared_error不是一个有效的评分方法。
  2. rbf内核不返回特性重要性,因此如果要使用RFECV,就不能使用该内核。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61142862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档