簡體   English   中英

使用 scikit-learn 對 SVR 進行遞歸特征消除和網格搜索

[英]Recursive Feature Elimination and Grid Search for SVR using scikit-learn

我正在使用 SVR 來解決預測問題,我想做特征選擇以及超參數搜索。 我正在嘗試同時使用 RFECV 和 GridSearchCV,但我從我的代碼中收到錯誤。

我的代碼如下:

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

錯誤是

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()`.

我對使用機器學習很陌生,任何幫助將不勝感激。

網格搜索運行使用param_grid中傳遞的不同參數組合初始化的selector 但在這種情況下,我們希望網格搜索在選擇器中初始化估計selector 這是通過使用字典命名樣式<estimator>__<parameter>來實現的。 關注文檔以獲取更多詳細信息。

工作代碼

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)

代碼中的另外兩個錯誤

  1. neg_root_mean_squared_error不是有效的評分方法
  2. rbf kernel 不返回特征重要性,因此如果要使用 RFECV,則不能使用此RFECV

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM