如何用sklearn工具包裏面的feature_selection模塊來進行特徵選擇/降維(一)

最近在進行一個比賽的時候遇到特徵處理的問題,於是就在sklearn官網查了一下,發現有專門的一節來講關於特徵選擇的,因此翻譯一下主要供自己學習使用,當然如果對你也有幫助,那更好。

sklearn.feature_selection

PS:翻譯如果覺得有問題,請大佬幫忙糾正!謝謝。

----------------------------------------------------------------------------------我是一條無感情的分界線-------------------------------------------------------------------------
1.13. Feature selection

sklearn.feature_selection模塊能在樣本數據集上進行特徵選擇或降維,這既能改善評估器的準確得分,也能提升高維數據集的泛化性能。

  • 1.13.1. 移除低方差的特徵
    VarianceThreshold是特徵選擇的基本方法,它移除所有不滿足方差閾值的特徵。默認地會移除所有零方差地特徵,比如在所有樣本中有着相同值的特徵。

舉個例子,假設現在有個布爾特徵的數據集,然後我們想要移除 樣本里超過80%是1或0的所有特徵。布爾特徵就是伯努利隨機變量,這些變量的方差是由下面這個公式得來:
Var[X]=p(1p) Var[X]= p(1-p)
所以我們可以選擇使用 .8 * (1 - .8) 的閾值:

>>> from sklearn.feature_selection import VarianceThreshold
>>> X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]
>>> sel = VarianceThreshold(threshold=(.8 * (1 - .8)))
>>> sel.fit_transform(X)
array([[0, 1],
       [1, 0],
       [0, 0],
       [1, 1],
       [1, 0],
       [1, 1]])

如上,VarianceThreshold 方法移除了第一列,因爲它裏面0的佔比 p=5/6>.8p = 5 / 6 > .8

  • 1.13.2. 單變量特徵選擇
    單變量特徵選擇是基於單變量統計檢驗來選取最佳特徵的方法。它可以看作是評估器的預處理步驟,Scikit-learn把特徵選擇例程作爲實現transform方法的對象:
    • SelectKBest只保留最高K值得分的特徵
    • SelectPercentile只保留用戶指定的最高得分比特徵
    • 每個特徵使用通用的單變量統計檢驗方法:其中假正率用SelectFpr,誤發現率用 SelectFdr,族系錯誤用 SelectFwe
    • GenericUnivariateSelect允許執行可配置策略的單變量特徵選擇。它會選取超參數搜索評估器的最佳單變量選擇策略。

例如,我們可以在下面這個樣本集中利用 χ2\chi^2檢驗來找到僅有的兩個最佳特徵:

>>> from sklearn.datasets import load_iris
>>> from sklearn.feature_selection import SelectKBest
>>> from sklearn.feature_selection import chi2
>>> X, y = load_iris(return_X_y=True)
>>> X.shape
(150, 4)
>>> X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
>>> X_new.shape
(150, 2)

這些對象將一個得分函數作爲輸入,該函數返回單變量得分和p值(或僅返回SelectKBestSelectPercentile的得分):

該方法是基於F檢驗來估計兩個隨機變量之間的線性相關程度。另一方面,互信息方法可以捕獲任何類型的統計依賴關係,但由於是非參數性的,因此需要更多樣本才能進行準確估計。

稀疏數據的特徵選擇

如果你使用稀疏數據(例如稀疏矩陣這樣的數據),那麼chi2,mutual_info_regression, mutual_info_classif這幾個函數在處理數據的時候不會讓其變得密集。

警告:請注意不要使用迴歸得分函數來解決分類問題,因爲你會得到一個無效的結果。

示例

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章