特徵工程系列 特徵篩選的原理與實現

2021-10-10 16:12:53 字數 4844 閱讀 8435

3. 特徵選擇實現

3.3 線性模型與正則化

3.4 隨機森林選擇

3.5 頂層特徵選擇

4. 總結

優點:執行速度快,是一種非常流行的特徵選擇方法。

缺點無法提供反饋,特徵選擇的標準/規範的制定是在特徵搜尋演算法中完成,學習演算法無法向特徵搜尋演算法傳遞對特徵的需求。另外,可能處理某個特徵時由於任意原因表示該特徵不重要,但是該特徵與其他特徵結合起來則可能變得很重要

不太好用

from sklearn.feature_selection import variancethreshold

variancethreshold(threshold=

0.1)

最大資訊係數

from sklearn.model_selection import cross_val_score, shufflesplit

from sklearn.datasets import load_boston

from sklearn.ensemble import randomforestregressor

#load boston housing dataset as an example

boston = load_boston(

)x = boston[

"data"

]y = boston[

"target"

]names = boston[

"feature_names"

]# 樹的個數 n_estimators = 20

rf = randomforestregressor(n_estimators=

20, max_depth=4)

scores =

# 使用每個特徵單獨訓練模型,並獲取每個模型的評分來作為特徵選擇的依據。

# cross_val_score(estimator,x,y,打分方式,cv 幾折)

# shufflesplit(n_splits 劃分次數 test_size 比例)

for i in

range

(x.shape[1]

):score = cross_val_score(rf, x[

:, i:i+1]

, y, scoring=

"r2"

, cv=shufflesplit(n_splits=

3,test_size=

0.3))(

round

(np.mean(score),3

),names[i]))

print

(sorted

(scores, reverse=

true))

輸出:[

(0.659

,'lstat'),

(0.544

,'rm'),

(0.473

,'indus'),

(0.407

,'nox'),

(0.319

,'ptratio'),

(0.258

,'tax'),

(0.221

,'crim'),

(0.19

,'rad'),

(0.145

,'zn'),

(0.136

,'dis'),

(0.101

,'age'),

(0.084

,'b'),

(-0.002

,'chas'

)]

from sklearn.model_selection import shufflesplit

from sklearn.metrics import r2_score

from sklearn.ensemble import randomforestregressor

from collections import defaultdict

from sklearn.datasets import load_boston

boston = load_boston(

)x = boston.data

y = boston.target

featurenames = boston.feature_names

'''r2_score r2=1-(真實值和**值的平方差)/(真實值和均值的平方差)

# '''rf = randomforestregressor(

)scores = defaultdict(

list

)for train_idx,test_idx in shufflesplit(

len(x)

,n_splits=

3,test_size=

0.3)

.split(x)

: x_train,x_test = x[train_idx]

,x[test_idx]

y_train,y_test = y[train_idx]

,y[test_idx]

rf.fit(x_train,y_train)

acc = r2_score(y_test,rf.predict(x_test)

)for i in

range

(x.shape[1]

):x_t = x_test.copy(

) np.random.shuffle(x_t[

:,i]

) shuff_acc = r2_score(y_test,rf.predict(x_t)

) scores[featurenames[i]

](acc-shuff_acc)

/acc)

print

("feature sorted by scores"

)print

(sorted([

(round

(np.mean(score),4

),feat)

for feat,score in scores.items()]

,reverse=

true))

'''feature sorted by scores

[(0.6932, 'lstat'), (0.543, 'rm'), (0.0797, 'dis'), (0.0362, 'crim'),

(0.0353, 'nox'), (0.0197, 'ptratio'), (0.0134, 'tax'), (0.0085, 'age'),

(0.0047, 'b'), (0.0041, 'indus'), (0.0024, 'rad'), (0.0002, 'chas'),

(0.0001, 'zn')]

'''

from sklearn.datasets import load_boston

from sklearn.feature_selection import rfe

from sklearn.linear_model import linearregression

boston = load_boston(

)x = boston.data

y = boston.target

featurenames = boston.feature_names

lr = linearregression(

)rfe = rfe(lr, n_features_to_select=3)

rfe.fit(x,y)

print

("features sorted by their rank:"

)print

(sorted

(zip

(map

(lambda x:

round

(x,4

), rfe.ranking_)

,featurenames)))

'''features sorted by their rank:

[(1, 'chas'), (1, 'nox'), (1, 'rm'), (2, 'ptratio'), (3, 'dis'),

(4, 'lstat'), (5, 'rad'), (6, 'crim'), (7, 'indus'), (8, 'zn'),

(9, 'tax'), (10, 'b'), (11, 'age')]

'''

資料預處理後,先排除取值變化很小的特徵。如果機器資源充足,並且希望盡量保留所有資訊,可以把閾值設定得比較高,或者只過濾離散型特徵只有乙個取值的特徵

如果資料量過大,計算資源不足(記憶體不足以使用所有資料進行訓練、計算速度過慢),可以使用單特徵選擇法排除部分特徵。這些被排除的特徵並不一定完全被排除不再使用,在後續的特徵構造時也可以作為原始特徵使用。

如果此時特徵量依然非常大,或者是如果特徵比較稀疏時,可以使用pca主成分分析和lda線性判別等方法進行特徵降維。

經過樣本取樣和特徵預篩選後,訓練樣本可以用於訓練模型。但是可能由於特徵數量比較大而導致訓練速度慢,或者想進一步篩選有效特徵或排除無效特徵(或噪音),我們可以使用正則化線性模型選擇法、隨機森林選擇法或者頂層特徵選擇法進一步進行特徵篩選。

特徵工程 之 特徵篩選

從現有的m個特徵中選出n個特徵 n m 降低特徵維度減少計算量的同時,使模型效果達到最優。在實際業務中,用於模型中的特徵維度往往很高,幾萬維。如一些ctr預估問題中,特徵維度高達上億維,維度過高會增大模型計算複雜度。但實際情況是,並不是每個特徵對模型的 都是有效果的,所以需要去除一些不必要的特徵,從...

機器學習 特徵工程 特徵篩選

1 冗餘 部分特徵相關度太高,消耗計算效能,影響決策樹分支的選擇。2 雜訊 部分特徵是對 結果有負影響 3 降維 減少特徵數量 降維,使模型泛化能力更強,減少過擬合 4 特徵選擇與降維的關係 特徵選擇只篩選掉原本特徵裡和結果 關係不大的,後者做特徵的計算組合構成新特徵。svd pca降維也能解決一定...

特徵篩選的原理與實現

特徵工程又包含了feature selection 特徵選擇 feature extraction 特徵提取 和feature construction 特徵構造 等子問題,本章內容主要討論特徵選擇相關的方法及實現。在實際專案中,我們可能會有大量的特徵可使用,有的特徵攜帶的資訊豐富,有的特徵攜帶的資...