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


機器學習深度研究:特征選擇過濾法中幾個重要的統計學概念————卡方檢驗、方差分析、相關系數、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值最小,置信度也最高,與前面的結果一致。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM