1. 程式人生 > 實用技巧 >機器學習深度研究:特徵選擇中幾個重要的統計學概念

機器學習深度研究:特徵選擇中幾個重要的統計學概念

機器學習深度研究:特徵選擇過濾法中幾個重要的統計學概念————卡方檢驗、方差分析、相關係數、p值

問題引出

當我們拿到資料並對其進行了資料預處理,但還不能直接拿去訓練模型,還需要選擇有意義的特徵(即特徵選擇),這樣做有四個好處:

1、避免維度災難

2、降低學習難度

3、減少過擬合

4、增強對特徵和特徵值之間的理解

常見的特徵選擇有三種方法:

過濾法(Filter):先對資料集進行特徵選擇,然後再訓練學習器,特徵選擇過程與後續學習器無關。

包裝法(Wrapper):根據目標函式(通常是預測效果評分),每次選擇若干特徵,或者排除若干特徵。

嵌入法(Embedding):先使用機器學習模型進行訓練,得到各個特徵的權值係數,根據係數從大到小選擇特徵。

其中,過濾法是最簡單,最易於執行和最易於理解的。

過濾法核心思路就是考察自變數和目標變數之間的關聯性、相關性,設定閾值,優先選擇與目標相關性高的特徵。

主要方法:

1、分類問題:卡方檢驗(chi2),F檢驗(f_classif), 互資訊(mutual_info_classif)

2、迴歸問題:相關係數(f_regression), 資訊係數(mutual_info_regression)

卡方檢驗、F檢驗、互資訊、相關係數、資訊係數

這些都是統計學領域的概念,在sklearn特徵選擇中被使用,所以在解釋這些概念時,我也重點參考了sklearn文件。

卡方檢驗百科定義:

卡方檢驗就是統計樣本的實際觀測值與理論推斷值之間的偏離程度,實際觀測值與理論推斷值之間的偏離程度就決定卡方值的大小,如果卡方值越大,二者偏差程度越大;反之,二者偏差越小;若兩個值完全相等時,卡方值就為0,表明理論值完全符合。

卡方值 $\chi^{2}$ 計算公式

不要望公式興嘆,其實只需掌握到第一個等號後就行了:A為實際值,T為理論值。

F檢驗

F檢驗和方差分析(ANOVA)是一回事,主要用於兩個及兩個以上樣本均數差別的顯著性檢驗。方差分析的基本原理是認為不同處理組的均數間的差別基本來源有兩個:
(1) 實驗條件,即不同的處理造成的差異,稱為組間差異。用變數在各組的均值與總均值之偏差平方和的總和表示,記作$SS_b$,組間自由度$df_b$。

(2) 隨機誤差,如測量誤差造成的差異或個體間的差異,稱為組內差異,用變數在各組的均值與該組內變數值之偏差平方和的總和表示, 記作$SS_w$,組內自由度$df_w$。

利用f值可以判斷假設H0是否成立:$f$值越大,大到一定程度時,就有理由拒絕零假設,認為不同總體下的均值存在顯著差異。所以我們可以根據樣本的某個特徵$x_i$的f值來判斷特徵$x_i$對預測類別的幫助,$f$值越大,預測能力也就越強,相關性就越大,從而基於此可以進行特徵選擇。

互資訊(mutual_info_classif/regression)

互資訊是變數間相互依賴性的量度。不同於相關係數,互資訊並不侷限於實值隨機變數,它更加一般且決定著聯合分佈 p(X,Y) 和分解的邊緣分佈的乘積 p(X)p(Y) 的相似程度。

兩個離散隨機變數 X 和 Y 的互資訊可以定義為:

相關係數(f_regression)

相關係數是一種最簡單的,能幫助理解特徵和響應變數之間關係的方法,該方法衡量的是變數之間的線性相關性,結果的取值區間為[-1,1],-1表示完全的負相關,+1表示完全的正相關,0表示沒有線性相關。
$$r_i = \frac{(X_i - \bar X_i)^{T}(y - \bar y)}{std(X_i)std(y)}$$

$$f = \frac{r_i2}{1-r_i2} * (n-2)$$

式中$X_i$是代表所有樣本的在i號特徵上的取值的$n$維列向量,分子上其實兩個$n$維列向量的內積,所以$r_i$是一個數值,其實就是樣本相關係數。

$f$ 值越大,第i個特徵和因變數y之間的相關性就越大,據此我們做特徵選擇。

P值 (P-value)

P值,也就是常見到的 P-value。P 值是一種概率,指的是在 H0 假設為真的前提下,樣本結果出現的概率。如果 P-value 很小,則說明在原假設為真的前提下,樣本結果出現的概率很小,甚至很極端,這就反過來說明了原假設很大概率是錯誤的。通常,會設定一個顯著性水平(significance level)$\alpha$ 與 P-value 進行比較,如果 P-value < $\alpha$ ,則說明在顯著性水平$\alpha$ 下拒絕原假設,$\alpha$ 通常情況下設定為0.05。

sklearn特徵選擇——過濾法

sklearn過濾法特徵選擇方法

SelectBest 只保留 k 個最高分的特徵;
SelectPercentile 只保留使用者指定百分比的最高得分的特徵;
使用常見的單變數統計檢驗:假正率SelectFpr,錯誤發現率selectFdr,或者總體錯誤率SelectFwe;
GenericUnivariateSelect 通過結構化策略進行特徵選擇,通過超引數搜尋估計器進行特徵選擇。

SelectKBest按照scores保留K個特徵;

SelectPercentile按照scores保留指定百分比的特徵;

SelectFpr、SelectFdr和SelectFwe對每個特徵使用通用的單變數統計檢驗;

GenericUnivariateSelect允許使用可配置策略如超引數搜尋估計器選擇最佳的單變數選擇策略。
特徵選擇指標

使用sklearn中SelectKBest函式進行特徵選擇,引數中的score_func選擇:
分類:chi2----卡方檢驗

f_classif----方差分析,計算方差分析(ANOVA)的F值 (組間均方 / 組內均方)

mutual_info_classif----互資訊,互資訊方法可以捕捉任何一種統計依賴,但是作為非引數方法,需要更多的樣本進行準確的估計

迴歸:f_regression----相關係數,計算每個變數與目標變數的相關係數,然後計算出F值和P值

mutual_info_regression----互資訊,互資訊度量 X 和 Y 共享的資訊:它度量知道這兩個變數其中一個,對另一個不確定度減少的程度。

sklearn過濾法特徵選擇-示例

在sklearn中,可以使用chi2這個類來做卡方檢驗得到所有特徵的卡方值與顯著性水平P臨界值,我們可以給定卡方值閾值, 選擇卡方值較大的部分特徵。程式碼如下:

  1. 首先import包和實驗資料:
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
from sklearn.datasets import load_iris
#匯入IRIS資料集
iris = load_iris()
  1. 使用卡方檢驗來選擇特徵
model1 = SelectKBest(chi2, k=2)#選擇k個最佳特徵
model1.fit_transform(iris.data, iris.target)#iris.data是特徵資料,iris.target是標籤資料,該函式可以選擇出k個特徵

結果輸出為:

array([[ 1.4,  0.2],
       [ 1.4,  0.2],
       [ 1.3,  0.2],
       [ 1.5,  0.2],
       [ 1.4,  0.2],
       [ 1.7,  0.4],
       [ 1.4,  0.3],

可以看出後使用卡方檢驗,選擇出了後兩個特徵。如果我們還想檢視卡方檢驗的p值和得分,可以使用第3步。

  1. 檢視p-values和scores
model1.scores_  #得分

得分輸出為:

array([ 10.81782088, 3.59449902, 116.16984746, 67.24482759])

可以看出後兩個特徵得分最高,與我們第二步的結果一致;

model1.pvalues_  #p-values

p值輸出為:

array([ 4.47651499e-03, 1.65754167e-01, 5.94344354e-26, 2.50017968e-15])

可以看出後兩個特徵的p值最小,置信度也最高,與前面的結果一致。