特徵選擇 包裹式選擇

2021-09-23 20:52:03 字數 3007 閱讀 7637

包裹式選擇與過濾式選擇不考慮後續學習器不同,直接把最終使用的學習器的效能作為特徵子集的評價準則。換言之,包裹式選擇的目的就是為給定學習器選擇最有利於其效能、「量身定做」的特徵子集。

【與過濾式選擇的區別】:

遞迴特徵消除(recursive feature elimination)使用乙個基模型(學習器)來進行多輪訓練,每輪訓練後移除若干特徵,再基於新的特徵集進行下一輪訓練。

【sklearn 官方解釋】:對特徵含有權重的**模型,rfe 通過遞迴減少待考察特徵集規模來選擇特徵。

首先,**模型在原始特徵集上進行訓練,通過 coef_ 屬性或 feature_importances_ 屬性為每個特徵指定乙個權重;

然後,剔除那些權重絕對值較小的特徵;

如此迴圈,直到剩餘的特徵數量達到所需的特徵數量。

需要注意的是,rfe 的穩定性很大程度上取決於迭代時,底層使用的**模型。如果 rfe 採用的是普通的邏輯回歸,沒有經過正則化的回歸是不穩定的,因此 rfe 也不穩定。若採用的是脊回歸 ridge 或 lasso,則 rfe 穩定。

關於 rfe 的具體介紹可參考 sklearn 的 rfe 傳送門

【**實現】:回歸問題

from sklearn.feature_selection import rfe

from sklearn.linear_model import lasso

# 引入資料集

dataset_boston = load_boston(

)data_boston = dataset_boston.data

target_boston = dataset_boston.target

rfe = rfe(estimator=lasso(

), n_features_to_select=4)

rfe.fit(data_boston, target_boston)

print

(rfe.support_)

# 輸出

array(

[false

,false

,false

,false

,false

,true

,false

,true

,false

,false

,true

,false

,true

])

【**實現】:分類問題

from sklearn.feature_selection import rfe

# 引入資料集

dataset_iris = load_iris(

)data_iris = dataset_iris.data

target_iris = dataset_iris.target

rfe = rfe(estimator=decisiontreeclassifier(

), n_features_to_select=2)

rfe.fit(data_iris, target_iris)

print

(rfe.support_)

array(

[false

,false

,true

,true

])

sklearn 還提供 rfecv 方法,該方法通過交叉驗證的方式執行 rfe,以此來選擇最佳數量的特徵:對於乙個數量為 d 的特徵集合,它的所有子集的個數是 2d−

12^d-1

2d−1

。例如 d = 3 時,子集個數為 23−

1=72^3-1=7

23−1=7

。舉個例子,特徵集為 ,那麼其所有特徵子集為 、、、、、、。

rfe 找出所有的特徵子集後,分別計算所有特徵子集的驗證誤差,選擇誤差最小的特徵子集作為挑選的特徵。

【**實現】:

from sklearn.feature_selection import rfecv

rfecv = rfecv(estimator=decisiontreeclassifier())

rfecv.fit(data_iris, target_iris)

print

(rfecv.support_)

# 輸出

array(

[false

,false

,true

,true

])

lvw 是乙個典型的包裹式特徵選擇方法,它在拉斯維加斯(las vegas method)框架下使用隨機策略來進行子集搜尋,並以最終分類器的誤差為特徵子集評價準則。

【演算法】:

初始化誤差 e 為正無窮,d = |a|,a* = a,t = 0;

進入迴圈,迴圈停止條件為 while t < t;

隨機產生特徵子集 a』,設定 d』 = |a』|;

選擇特徵子集對應部分的資料集 da′

d^da

′,使用交叉驗證法來估計學習器 σ

\varsigma

σ 的誤差。誤差是特徵子集 a』 上的誤差,若它比當前特徵子集 a 上的誤差更小,或誤差相當但 a』 中包含的特徵數更少,則執行(a),否則執行(b)。

輸出特徵子集 a*。

【注意】:由於 lvw 演算法中特徵子集搜尋採用了隨機策略,而每次特徵子集評價都需要訓練學習器,計算開銷很大,因此演算法設定了停止條件控制引數 t。然而,整個 lvw 演算法是基於拉斯維加斯方法框架,若初始特徵數很多(即 |a| 很大)、t 設定較大,則演算法可能執行很長時間都達不到停止條件。換言之,若有執行時間限制,則有可能給不出解。

另外還有乙個經典的演算法——蒙特卡羅方法。這兩個以著名賭城名字命名的隨機化方法的主要區別是:若有時間限制,則拉斯維加斯方法或者給出滿足要求的解,或者不給出解;而蒙特卡羅方法一定會給出解,雖然給出的解未必滿足要求;若無時間限制,則兩者都能給出滿足要求的解。

特徵選擇 單變數特徵選擇

1.selectkbest可以依據相關性對特徵進行選擇,保留k個評分最高的特徵。方差分析 分類問題使用f classif,回歸問題使用f regression。f classif 分類任務 跟目標的分類,將樣本劃分成n個子集,s1,s2,sn,我們希望每個子集的均值 1,2,n不相等。我們假設h0 ...

模型選擇與特徵選擇

模型選擇 對備選的m個模型 a1,a2,a3,am 分別計算每個模型的誤差 可以用所有樣本訓練誤差或者k重交叉檢驗 k一般取10,k越大對資料的利用率越高 得到的誤差,總之用一種手段評判模型的好壞 然後選擇其中最好的乙個。特徵選擇 1 前向搜尋 設定初始特徵集為空,然後逐步新增特徵,如選擇加入後能使...

特徵選擇概述

維基百科定義 在機器學習和統計學中,特徵選擇 英語 feature selection 也被稱為變數選擇 屬性選擇或變數子集選擇。它是指 為了構建模型而選擇相關特徵 即屬性 指標 子集的過程。特徵選擇的目標是尋找最優特徵子集。特徵選擇能剔除不相關 irrelevant 或冗餘 redundant 的...