3(2).特征選擇---包裝法


1. 前向搜索

  每次增量地從剩余未選中的特征選出一個加入特征集中,待達到閾值或者 n時,從所有的 F 中選出錯誤率最小的。過程如下:

  • 初始化特征集 F 為空。
  • 掃描 i 從 1 到 n
  • 如果第 i 個特征不在 F 中,那么特征 i 和F 放在一起作為 F_i (即 F_i=F\cup\{i\} )。
  • 在只使用 F_i 中特征的情況下,利用交叉驗證來得到 F_i 的錯誤率。
  • 從上步中得到的 n 個 F_i 中選出錯誤率最小的 F_i ,更新 F 為 F_i 。
  • 如果 F 中的特征數達到了 n 或者預定的閾值(如果有的話),
  • 那么輸出整個搜索過程中最好的 ;若沒達到,則轉到 2,繼續掃描。

2. 后向搜索

  既然有增量加,那么也會有增量減,后者稱為后向搜索。先將 F 設置為 \{1,2,...,n\} ,然后每次刪除一個特征,並評價,直到達到閾值或者為空,然后選擇最佳的 F 。

  這兩種算法都可以工作,但是計算復雜度比較大。時間復雜度為

3. 遞歸特征消除法

   遞歸消除特征法使用一個基模型來進行多輪訓練,每輪訓練后,消除若干權值系數的特征,再基於新的特征集進行下一輪訓練。使用feature_selection庫的RFE類來選擇特征的代碼如下:

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

#遞歸特征消除法,返回特征選擇后的數據
#參數estimator為基模型
#參數n_features_to_select為選擇的特征個數
RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(iris.data, iris.target)

 

舉例:使用一個基模型來進行多輪訓練,經過多輪訓練后,保留指定的特征數。

#首先導入數據到data變量中
import pandas
data=pandas.read_csv('路徑.csv')

#接着,我們使用RFE類,在estimator中,
#把我們的基模型設置為線性回歸模型LinearRegression,
#然后在把我們要選擇的特征數設置為2,
#接着就可以使用這個rfe對象,把自變量和因變量傳入fit_transform方法,
#即可得到我們需要的特征值
from sklearn.feature_selection import RFE
from sklearn.linear_model import LinearRegression

feature =data[['月份','季度','廣告推廣費','注冊並投資人數']]

rfe =RFE(
    estimator=LinearRegression(),
    n_features_to_select=2
)
sFeature = rfe.fit_transform(
    feature,
    data['銷售金額']
)

#同理,我們要想知道這兩個自變量的名字,
#使用get_support方法,即可得到對應的列名
rfe.get_support()

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM