我認為T檢驗 和F檢驗在機器學習中的作用:判斷機器學習中樣本集中的某個特征(自變量)和因變量之間的相關性強弱(用於在建模中判斷此自變量是否可以扔掉)
最近在做數據分析方面的工作,經常需要檢驗兩組樣本之間是否存在差異,所以會遇到統計學中假設檢驗相關的知識。在機器學習特征工程這一步,筆者最常用到的是假設檢驗中的卡方檢驗去做特征選擇,因為卡方檢驗可以做兩個及兩個以上樣本率( 構成比)以及兩個分類變量的關聯性分析。但是筆者今天想介紹一下通過T檢驗做機器學習中的特征工程,希望能夠讓大家初步了解到各種假設檢驗是如何在機器學習項目的特征工程發揮作用。
1、理論部分假設檢驗簡介
統計學中,常見的假設檢驗有:T檢驗(Student's t Test),F檢驗(方差齊性檢驗),卡方驗證等。無論任何假設檢驗,它們都遵循如下圖所示的流程:
- 做兩個假設:一般如果假設對象是兩組樣本的話(一組數據集中有多個特征,選擇其中的兩個特征,就是指的這里說的兩組樣本),都會假設這兩組樣本(其實也就是指的是樣本數據中的兩個特征值)均值相等,(T檢驗的假設),方差滿足齊次性(F檢驗的假設)等。而另一個假設其實就是兩組樣本均值不相等(T檢驗的假設),方差不滿足齊次性(F檢驗的假設)等,其實這兩個假設就是一對非此即彼的選項。這兩個假設在教科書上就叫做原假設
,和備擇假設
。
- 設置一個顯著性值:通俗點理解,就是如果真實的情況偏離原假設的程度。
1.如果真實情況和原假設差異不大(P值高於顯著性值),那證明原假設是對的,接受原假設。
2.如果真實情況和原假設差異太大(P值低於顯著性值),那證明原假設錯了,我們得拒絕原假設,接受備擇假設。
顯著性值的選擇是個經驗值:一般和樣本量有關,樣本量越大,顯著性值越大,一般幾百左右的樣本量P值一般選擇0.05,樣本量在兩千左右時P值一般選擇0.001,樣本量再大,P值就沒有作用了,所以做假設檢驗時樣本量一般不會超過5千,樣本量超過5千時P值就沒什么意義了。 - 收集證據:用手頭的數據去驗證第一步定義的假設。這一步就是對樣本進行統計計算等操作。
- T檢驗得到結論:結論一般不外乎這兩種:
1.如果P>0.05(上方第二步設定的顯著性的值),原假設成立;
2.如果P< 0.05(上方第二步設定的顯著性的值),原假設不成立,備擇假設成立。

假設檢驗
假設檢驗與特征相關性分析
熟悉機器學習的同學都知道,特征X和目標Y的數值類型經常會出現兩類:1. 連續型數值,2. 離散性數值(類別特征可以編碼成離散型特征)。
特征X和目標Y在不同數值類型的組合下,應該采用不同的假設檢驗手段去做特征相關性分析。下圖羅列了特征X和目標Y在各種數值類型組合時最適合的假設檢驗方法。

T檢驗簡介
T檢驗分單樣本T檢驗和雙樣本T檢驗,單樣本T檢驗檢驗的是樣本的均值是否能代表總體的均值。雙樣本T檢驗檢驗的是兩個獨立樣本所代表的總體數據均值差異是否顯著。換句話說就是檢驗兩個總體是否是存在差異。雙樣本T檢驗適用條件如下:
- 兩樣本均來自於正態總體
- 兩樣本相互獨立
- 滿足方差齊性,方差齊次性指的是樣本的方差在一個數量級水平上(通過方差齊性檢驗)
接下來按照假設檢驗流程:
1.原假設:兩個獨立樣本所代表的總體數據均值相同(),備擇假設:兩個獨立樣本所代表的總體數據均值不相同(
);
2.P值定為0.05;
3.計算兩組樣本的均值,標准差然后帶入下圖所示的公式后求得t值,然后查T檢驗表得到P值。其中 和
分別指這兩組樣本的均值,
和
分別代表兩組樣本的標准差,
和
分別代表兩組樣本的樣本量;
4.如果P< 0.05,則兩組數據均值不同,數據間存在差異,如果P> 0.05,則兩組數據均值相同。

2、雙樣本T檢驗特征相關性分析實戰
數據載入
導入必要的python包和數據集,這里筆者用的是boston房價預測的數據集。
from scipy import stats import pandas as pd from sklearn.datasets import load_boston data_value = load_boston().data data_target = load_boston().target feature = load_boston().feature_names data = pd.DataFrame({ i:j for i, j in zip(feature, [data_value[:,index] for index in range(len(feature))])}) data["Price"] = data_target
數據大致如下圖所示,其中Price列是預測值Y,其他列都是特征X列,根據上文假設檢驗和特征相關分析對照表,我們發現如果X和Y中一個為二分類數值類型時,一個為連續數值類型時即可以使用雙樣本T檢驗。
data
下圖顯示CHAS這列是二分類數值類型,506個樣本中CHAS = 0的有471個樣本,CHAS = 1的有35個樣本,而boston 房價預測數據中Price是連續數值類型,所以我們可以采用雙樣本T檢驗去檢驗CHAS(0或者1)的不同是否會對房價有影響,換句話說就是去檢驗CHAS這列特征和房價是否有關聯。

CHAS的統計結果
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面是實際的建模中 涉及到的判斷因變量Y和自變量X之間相關性的實戰
1)准備樣本
將CHAS = 0 的房價Price 樣本 和 將CHAS = 1 的房價Price 樣本 分別抽取出來。
CHAS_0 = list(data[data["CHAS"]==0].Price) CHAS_1 = list(data[data["CHAS"]==1].Price)
2)方差齊次性檢驗
按照T檢驗的步驟,首先做方差齊次性檢驗,下方代碼就是在做方差齊次性檢驗,一行代碼,so easy。
stats.levene(CHAS_0,CHAS_1)
得到的結果如下所示:
LeveneResult(statistic=4.590342218715871,pvalue=0.03263097600633006)
這里我們只需要關注p value(上文提到的P值),P=0.03小於0.05,證明方差齊次性檢驗的原假設不成立,說明兩組樣本方差不滿足齊次性。
3)雙樣本T檢驗
接着做雙樣本T檢驗,依然是一行代碼。注意由於兩組樣本之間的方差不滿足齊次性,需要加一個參數equal_var=False。此API默認為equal_var=Ture。
stats.ttest_ind(CHAS_0,CHAS_1,equal_var=False)
結果如下:
Ttest_indResult(statistic=-3.113291312794837,pvalue=0.003567170098137517)
P=0.003小於0.05,證明雙樣本T檢驗的原假設不成立,即兩個總體之間的均值存在差異。
結論
下面結果顯示:CHAS = 0的這一波房子的房價均值為22,而CHAS = 1的這一波房價的均值為26,說明CHAS = 1的房子比CHAS = 0的房子要貴。所以CHAS這列特征和房價還是很相關。而且T檢驗也證明其相關性還是很顯著,所以這列特征,不能隨意扔掉。

鏈接:https://www.jianshu.com/p/7555c4311a57
來源:簡書