Feature Engineering 特征工程 4. Feature Selection
文章目錄
- 1. Univariate Feature Selection 單變量特征選擇
- 2. L1 regularization L1正則
learn from https://www.kaggle.com/learn/feature-engineering
上一篇:Feature Engineering 特征工程 3. Feature Generation
經過各種編碼和特征生成后,通常會擁有成百上千個特征。這可能導致兩個問題:
- 首先,擁有的特征越多,就越有可能過擬合
- 其次,擁有的特征越多,訓練模型和優化超參數所需的時間就越長。使用較少的特征可以加快預測速度,但會降低預測準確率
為了解決這些問題,使用特征選擇技術來為模型保留最豐富的特征
1. Univariate Feature Selection 單變量特征選擇
最簡單,最快的方法是基于單變量統計檢驗
- 統計label對每個單一特征的依賴程度
- 在scikit-learn特征選擇模塊中,feature_selection.SelectKBest返回 K 個最佳特征
- 對于分類問題,該模塊提供了三種不同的評分功能:χ2\chi^2χ2,ANOVA F-value和mutual information score
- F-value測量特征變量和目標之間的線性相關性。這意味著如果是非線性關系,得分可能會低估特征與目標之間的關系
- mutual information score是非參數的,可以捕獲非線性關系
但是,上面犯了嚴重的錯誤,特征選擇時fit,把所有數據用進去了,會造成數據泄露
我們應該只用訓練集來進行fit,選擇特征
- 可以看見,兩種情況下,選擇了不同的特征
- 現在,我們需要把得到的特征數值,轉換回去,并丟棄其他未選擇的特征
| 0 | 0.0 | 0.0 | 0.0 | 0.0 | 2015.0 | 0.0 | 5.0 | 9.0 | 0.0 | 0.0 | 18.0 | 1409.0 | 0.0 |
| 1 | 0.0 | 0.0 | 0.0 | 0.0 | 2017.0 | 0.0 | 13.0 | 22.0 | 0.0 | 0.0 | 31.0 | 957.0 | 0.0 |
| 2 | 0.0 | 0.0 | 0.0 | 0.0 | 2013.0 | 0.0 | 13.0 | 22.0 | 0.0 | 0.0 | 31.0 | 739.0 | 0.0 |
| 3 | 0.0 | 0.0 | 0.0 | 0.0 | 2012.0 | 0.0 | 13.0 | 22.0 | 0.0 | 0.0 | 31.0 | 907.0 | 0.0 |
| 4 | 0.0 | 0.0 | 0.0 | 0.0 | 2015.0 | 0.0 | 13.0 | 22.0 | 0.0 | 0.0 | 31.0 | 1429.0 | 0.0 |
- 我們發現逆轉換回去后,未被選擇的特征都是0.0,需要丟棄它們
| 302896 | 2015 | 13 | 22 | 31 | 1534.0 |
| 302897 | 2013 | 13 | 22 | 31 | 625.0 |
| 302898 | 2014 | 5 | 9 | 18 | 851.0 |
| 302899 | 2014 | 13 | 22 | 31 | 1973.0 |
| 302900 | 2014 | 5 | 9 | 18 | 2163.0 |
2. L1 regularization L1正則
單變量方法在做出選擇決定時一次只考慮一個特征
相反,我們可以通過將所有特征包括在具有L1正則化的線性模型中來使用所有特征進行特征篩選
與懲罰系數平方的 L2(Ridge)回歸相比,這種類型的正則化(有時稱為Lasso)會懲罰系數的絕對大小
隨著L1正則化強度的提高,對于預測目標而言次要的特征將設置為0
對于回歸問題,可以使用sklearn.linear_model.Lasso
分類問題,可以使用sklearn.linear_model.LogisticRegression
這些都可以跟sklearn.feature_selection.SelectFromModel一起使用,來選擇非零系數
類似于單變量測試,返回具有選定特征的數組。我們要將它們轉換為DataFrame,以便獲得選定的特征列
# Get back the kept features as a DataFrame with dropped columns as all 0s selected_features = pd.DataFrame(model.inverse_transform(X_new), index=X.index,columns=X.columns)# Dropped columns have values of all 0s, keep other columns selected_columns = selected_features.columns[selected_features.var() != 0]- 通常,使用L1正則化進行特征選擇比單變量測試更強大
- 但是在具有大量數據和大量特征的情況下,L1正則化的特征選擇速度也會很慢
- 在大型數據集上,單變量測試將更快,但預測性能可能會更差
完成課程和練習,獲得證書一張,繼續加油!🚀🚀🚀
上一篇:Feature Engineering 特征工程 3. Feature Generation
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Feature Engineering 特征工程 4. Feature Selection的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 293. 翻转游戏
- 下一篇: LeetCode 1101. 彼此熟识的