SVM-RFE使用及換kernal及estimator

hmmy發表於2018-12-14

SVM-RFE與SVM-RFECV都是用於對特徵進行縮減,用於找到數目最優的特徵數。RFECV基於RFE基礎上,新增了交叉驗證,使得在每個step中,都可以對現有的特徵數目進行評估,以確定比較好的數目。RFE中需要指定n_features_to_select而RFECV中需要指定min_features_to_select,二者雖然都要執行到指定挑選特徵數目時才停止篩選,但RFECV的每步交叉驗證得到特定數目特徵的acc,從而可以得到acc達到最大時的最少特徵個數。同時,RFECV提供ranking_陣列,可以挑選出被選中的特徵。

一般來說,RFECV中使用的評估器為SVC,以linear核作為SVC的核,考慮到linear核不如rbf核效率好,嘗試換rbf。但使用rbf核的SVC會報一下錯誤。

回到SVM-RFECV的原始碼中發現,它需要利用與特徵重要性有關的資訊:

此外,通過對estimator的註解可以看到,RFECV對estimato有如下要求:

所以,estimator中必須有一個fit方法,且包含於特徵重要有關的資訊——cofe_或者feature importances_。

回到SVC,原始碼中指出SVC類中有coef_屬性但沒有feature_importances_屬性,但是coef_屬性只對linear核有效,

所以使用SVC作為estimator,如果改用rbf核時不可行的。

那麼時不時只要estimator滿足要求,就可以使用RFECV進行特徵篩選呢?以RandowForest為例,

是可行的。

 

總結以上:

1. SVC中不能選用rbf核作為FRFECV的estimator;

2. 如果estimator滿足擁有fit函式,或者可以使用的coef_或feature_importances_屬性,那麼就能使用RFECV

3.基於2,因為RFECV自帶交叉驗證,對於滿足2條件的分類器,可以先用RFECV進行特徵篩選的同時,得到大致的準確率。

RFECV中的grid_scores_屬性會給出每個step的acc。(當然我只試了RF)

 

最後附上RFE的使用使用手冊:

https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html?tdsourcetag=s_pctim_aiomsg

 

 

相關文章