特征选择: 卡方检验、F 检验和互信息
特征選擇是特征工程中的重要一環(huán),其主要目的是從所有特征中選出相關(guān)特征 (relevant feature),或者說在不引起重要信息丟失的前提下去除掉無關(guān)特征 (irrelevant feature) 和冗余特征 (redundant feature)。進(jìn)行特征選擇的好處主要有以下幾種:
不同的模型對于無關(guān)特征的容忍度不同,下圖來自《 Applied Predictive Modeling 》 (P489),顯示了逐漸增加無關(guān)特征后不同模型的RMSE的變化。樹模型普遍表現(xiàn)較好,而神經(jīng)網(wǎng)絡(luò)因其模型的復(fù)雜性則很容易過擬合。Lasso 因其可以產(chǎn)生稀疏特征因而也有較好的表現(xiàn)。
特征選擇的方法主要分為三大類:過濾式方法 (Filter Methods),包裹式方法 (Wrapper Methods) 和嵌入式方法 (Embedded Methods)。
- 過濾式方法運(yùn)用統(tǒng)計(jì)指標(biāo)來為每個(gè)特征打分并篩選特征,其聚焦于數(shù)據(jù)本身的特點(diǎn)。其優(yōu)點(diǎn)是計(jì)算快,不依賴于具體的模型,缺點(diǎn)是選擇的統(tǒng)計(jì)指標(biāo)不是為特定模型定制的,因而最后的準(zhǔn)確率可能不高。而且因?yàn)檫M(jìn)行的是單變量統(tǒng)計(jì)檢驗(yàn),沒有考慮特征間的相互關(guān)系。
- 包裹式方法使用模型來篩選特征,通過不斷地增加或刪除特征,在驗(yàn)證集上測試模型準(zhǔn)確率,尋找最優(yōu)的特征子集。包裹式方法因?yàn)橛心P偷闹苯訁⑴c,因而通常準(zhǔn)確性較高,但是因?yàn)槊孔儎?dòng)一個(gè)特征都要重新訓(xùn)練模型,因而計(jì)算開銷大,其另一個(gè)缺點(diǎn)是容易過擬合。
- 嵌入式方法利用了模型本身的特性,將特征選擇嵌入到模型的構(gòu)建過程中。典型的如 Lasso 和樹模型等。準(zhǔn)確率較高,計(jì)算復(fù)雜度介于過濾式和包裹式方法之間,但缺點(diǎn)是只有部分模型有這個(gè)功能。
下面這張圖總結(jié)地更加全面,來自 《A review of feature selection techniques in bioinformatics 》
本文接下來主要考察過濾式方法中常用的幾個(gè)方法:卡方檢驗(yàn)、F 檢驗(yàn)和互信息,并探討它們用于特征選擇的內(nèi)在機(jī)理。
既然特征選擇的目的是去除無關(guān)特征,那么什么是無關(guān)特征? 對于分類問題,在過濾式方法中一般假設(shè)與標(biāo)簽獨(dú)立的特征為無關(guān)特征,而卡方檢驗(yàn)恰好可以進(jìn)行獨(dú)立性檢驗(yàn),所以其適用于特征選擇。如果檢驗(yàn)結(jié)果是某個(gè)特征與標(biāo)簽獨(dú)立,則可以去除該特征。說到卡方檢驗(yàn)自然會(huì)用到卡方分布,其定義如下:
設(shè)隨機(jī)變量 \(x_1, x_2 ... x_n \,,\quad \text{i.i.d} \sim N(0,1)\) ,即獨(dú)立同分布于標(biāo)準(zhǔn)正態(tài)分布,那么這 \(n\) 個(gè)隨機(jī)變量的平方和:
\[ X = \sum\limits_{i=1}^n x_i^2 \]
構(gòu)成一個(gè)新的隨機(jī)變量,其服從自由度為 \(n\) 的卡方分布 ( \(\chi^2\) 分布) ,記為 \(X \sim \chi^2_n\) 。
下圖顯示不同自由度下卡方分布的概率密度曲線,可以看到自由度越大,卡方分布就越接近正態(tài)分布:
下面舉個(gè)例子看卡方檢驗(yàn)的一般流程:
假設(shè)我想檢驗(yàn)一個(gè)男人有特殊著裝癖好與其變態(tài)與否的關(guān)系,如果檢驗(yàn)的結(jié)果是二者不獨(dú)立,那下次在街上看見女裝大佬我可能就要繞著走了。。。 所以該獨(dú)立性檢驗(yàn)的假設(shè)如下:
零假設(shè) ($H_0$):著裝偏好與變態(tài)傾向獨(dú)立 備選假設(shè) ($H_1$) :著裝偏好與變態(tài)傾向不獨(dú)立卡方檢驗(yàn)一般需要先建立列聯(lián)表,表中每個(gè)格子是觀察頻數(shù),表示實(shí)際觀測到的同時(shí)滿足兩個(gè)條件的數(shù)量:
同時(shí)需要計(jì)算每個(gè)格子的期望頻數(shù),因?yàn)榱慵僭O(shè)是兩個(gè)變量獨(dú)立,因此依獨(dú)立性的定義:\(P(A,B) = P(A)\, P(B)\),于是上表中每個(gè)格子的期望頻數(shù)為 \(N \times P(A,B) = N \times P(A) \times P(B)\) ,其中 \(N\) 為總數(shù)量,那么第一個(gè)格子的期望頻數(shù)為 \(3100 \times \frac{750}{3100} \times \frac{500}{3100} = 121\) 。因此總體期望頻數(shù)表為:
有了這兩個(gè)列聯(lián)表后,就可以計(jì)算檢驗(yàn)統(tǒng)計(jì)量 \(\chi^2\) ( \(\chi^2\) 表示卡方值) ,\(\chi^2\) 越大,表示觀測值和理論值相差越大,當(dāng) \(\chi^2\) 大于某一個(gè)臨界值時(shí),就能獲得統(tǒng)計(jì)顯著性的結(jié)論:
\[ \chi^2 = \sum\frac{(觀測頻數(shù) - 期望頻數(shù))^2}{期望頻數(shù)}= \sum_{i=1}^{r} \sum_{j=1}^{c} {(O_{i,j} - E_{i,j})^2 \over E_{i,j}} \tag{1} \]
其中 \(O_{ij}\) 為觀測頻數(shù)表中單元格的數(shù)值,\(E_{ij}\) 為期望頻數(shù)表中單元格的數(shù)值,\(r\) 為行數(shù),\(c\) 為列數(shù),自由度 \(df\) 為 \((2-1)\times(3-1) = 2\) ,\(\chi^2\) 服從卡方分布,則查卡方分布表:
得 \(P(\chi^2 > 13.82) < 0.001\) ,而實(shí)際計(jì)算出的 \(\chi^2\) 為 26.99,顯著性很高,意味著零假設(shè)成立的情況下樣本結(jié)果出現(xiàn)的概率小于 \(0.1\%\),因而可以拒絕零假設(shè),接受備選假設(shè)。這意味著男性的特殊著裝偏好與變態(tài)傾向具有相關(guān)性。當(dāng)然這里得說明兩點(diǎn):
再回到特征選擇的問題,從嚴(yán)格的統(tǒng)計(jì)學(xué)角度來看,使用卡方檢驗(yàn)進(jìn)行特征選擇可能會(huì)產(chǎn)生一些問題。假設(shè)選擇的顯著性水平 \(\alpha\) 為 0.05,這說明犯第一類錯(cuò)誤 (\(\text{type} \, \text{I} \, \text{error}\),兩個(gè)變量實(shí)際獨(dú)立卻被判為相關(guān)) 的概率為 5%,若進(jìn)行了 1000 次卡方檢驗(yàn),則平均有 \(1000 \times 0.05 = 50\) 次會(huì)選擇與標(biāo)簽不相關(guān)的特征。機(jī)器學(xué)習(xí)問題中動(dòng)輒就有幾千至上百萬的特征,那么這里面漏過的特征可能會(huì)相當(dāng)多。不過好在搞機(jī)器學(xué)習(xí)并不是在搞統(tǒng)計(jì),我們實(shí)際上比較關(guān)心的是特征的相對重要性。依上面的卡方分布表,檢驗(yàn)統(tǒng)計(jì)量 \(\chi^2\)越大,越有信心拒絕零假設(shè),接受兩個(gè)變量不獨(dú)立 的事實(shí),因而可以按每個(gè)特征 \(\chi^2\) 值的大小進(jìn)行排序,去除 \(\chi^2\) 值小的特征。
以上就是卡方檢驗(yàn)用于特征選擇的一般流程,而我看到在大部分資料中舉的例子都是離散型特征的,如下圖:
這其中有幾個(gè)值得注意的點(diǎn):
(1) 上面舉的卡方檢驗(yàn)例子是判別 著裝癖好與 變態(tài)傾向 具有相關(guān)性,然而 著裝癖好 是離散型特征,而大部分機(jī)器學(xué)習(xí)模型是無法直接處理離散型特征的,如果按通常的作法進(jìn)行 one-hot 轉(zhuǎn)換 (如下圖),就不能確定其中單個(gè)的特征 (如 著裝癖好_女裝 ) 是否仍與 變態(tài)傾向 有相關(guān)性。
(2) 上面這一點(diǎn)也可以反過來看,假設(shè)卡方檢驗(yàn)的結(jié)果是 著裝癖好與 變態(tài)傾向 獨(dú)立,也并不代表單個(gè)的特征 (如著裝癖好_不定裝 )與變態(tài)傾向 獨(dú)立。所以綜合這兩點(diǎn),應(yīng)該先將離散型特征進(jìn)行轉(zhuǎn)換,再對每個(gè)特征進(jìn)行卡方檢驗(yàn),而不是像這些資料中那樣直接對一個(gè)離散型特征作檢驗(yàn)。
(3) 如果是對 one-hot 轉(zhuǎn)換后的每個(gè)特征構(gòu)建列聯(lián)表進(jìn)行卡方檢驗(yàn),那將會(huì)是個(gè)巨大的工程,因?yàn)閛ne-hot 轉(zhuǎn)換通常會(huì)使特征維數(shù)成倍增加。因此我們需要一個(gè)快速計(jì)算 \(\chi^2\) 的方法,而不是繁瑣地對每個(gè)特征計(jì)算列聯(lián)表頻數(shù),所幸 scikit-learn 中就提供了這樣的快捷方法,同時(shí)也將看到這個(gè)方法也為連續(xù)型變量的應(yīng)用打開了一扇大門。下面看 feature_selection.chi2 的源碼 (有省略):
def chi2(X, y):Y = LabelBinarizer().fit_transform(y) # (1)if Y.shape[1] == 1:Y = np.append(1 - Y, Y, axis=1)observed = safe_sparse_dot(Y.T, X) # (2)feature_count = X.sum(axis=0).reshape(1, -1) # (3)class_prob = Y.mean(axis=0).reshape(1, -1) # (4)expected = np.dot(class_prob.T, feature_count) # (5)return _chisquare(observed, expected)def _chisquare(f_obs, f_exp):f_obs = np.asarray(f_obs, dtype=np.float64)k = len(f_obs)chisq = f_obschisq -= f_expchisq **= 2with np.errstate(invalid="ignore"):chisq /= f_expchisq = chisq.sum(axis=0)return chisq, special.chdtrc(k - 1, chisq)這個(gè)實(shí)現(xiàn)并不是傳統(tǒng)意義上的通過計(jì)算頻數(shù)構(gòu)建列聯(lián)表,而是將屬于每一個(gè)標(biāo)簽類別的特征取值總和作為列聯(lián)表單元格的觀測值,即第 (2) 步 (需要先在第 (1) 步將標(biāo)簽離散化)。而對于列聯(lián)表單元格的期望值的計(jì)算,則是基于這樣的假設(shè):如果標(biāo)簽與特征獨(dú)立,則每個(gè)標(biāo)簽類別為均勻分布,即第 (4) 步中的 \(\rm{class\_prob} \Longrightarrow p\),則第 (5) 步中每個(gè)單元格期望值的計(jì)算就與傳統(tǒng)意義上期望值類似了: \(\mathbb{E}[x] = \sum_i p_i x_i\) 。接下來的_chisuqare() 方法則是按照公式 \((1)\) 計(jì)算 \(\chi^2\) 值。
這樣實(shí)現(xiàn)的一大好處是可以通過矩陣相乘快速得出所有特征的觀測值和期望值,在計(jì)算出各特征的 \(\chi^2\) 值后,如上文所述,可以按每個(gè)特征的 \(\chi^2\) 值大小進(jìn)行排序,方便地進(jìn)行特征選擇。另一個(gè)好處是擴(kuò)大了 chi2 的適用范圍,觀察上面的代碼,對于原始特征的唯一處理就是第 (3) 步中的 sum ,而不是原來的計(jì)算頻數(shù),這樣一些連續(xù)型特征也可以使用該方法進(jìn)行特征選擇了。
F 檢驗(yàn)是一類建立在 F 分布基礎(chǔ)上的假設(shè)檢驗(yàn)方法,服從 F 分布的隨機(jī)變量與上文中卡方分布的關(guān)系如下:
\[ F = \frac{X_1 / d_1}{X_2 / d_2} \tag{2} \]
其中 \(X_1\) 和 \(X_2\) 分別服從自由度為 \(d_1\) 和 \(d_2\) 的卡方分布,即 \(X_1 \sim \chi^2(d_1), \;X_2 \sim \chi^2(d_2)\) ,且 \(X_1\) 與 \(X_2\) 獨(dú)立,則隨機(jī)變量 \(F\) 服從自由度為 \((d_1, d_2)\) 的F分布,記為 \(F \sim \text{F}(d_1, d_2)\) 。
下圖顯示不同自由度下F分布的概率密度曲線:
scikit-learn 中提供了兩種F檢驗(yàn)方法 —— 適用于分類的 f_classif 和適用于回歸的 f_regression ,分別對應(yīng)單因素方差分析和線性相關(guān)分析,下面分別介紹。
(1) 方差分析
在卡方檢驗(yàn)中我們要測試的是被檢驗(yàn)的特征與類別是否獨(dú)立,若拒絕零假設(shè),則特征與類別相關(guān)。而在方差分析中則采用了不同的思路: 按照不同的標(biāo)簽類別將特征劃分為不同的總體,我們想要檢驗(yàn)的是不同總體之間均值是否相同 (或者是否有顯著性差異)。下面承接上文的例子,類別為變態(tài)與否,因?yàn)榉讲罘治鲋贿m用于連續(xù)型特征,所以這里采用了 “身高” 這個(gè)特征:
上圖中紅框和籃框中的特征值對應(yīng)于兩個(gè)類別區(qū)分出的兩個(gè)不同的總體。方差分析用于特征選擇的邏輯是這樣: 如果樣本中是變態(tài)的平均身高為 1.7 米,非變態(tài)的平均身高也為 1.7 米,憑身高無法判定一個(gè)人變態(tài)與否,那么說明身高這個(gè)特征對于類別沒有區(qū)分度,則可以去除。反之,若前者的平均身高為 1.6 米,后者的平均身高為 1.9 米,那么我們有理由認(rèn)為身高很能區(qū)分變態(tài)與否。因此將問題形式化為假設(shè)檢驗(yàn)問題:
零假設(shè) ($H_0$): $\mu_1 = \mu_2 = \cdots = \mu_k$ 備選假設(shè) ($H_1$) : $k$ 個(gè)總體的均值不全相等下面闡述方差分析的原理。設(shè)共有 \(k\) 個(gè)類別,總樣本數(shù)為 \(n\) ,第 \(j\) 個(gè)類別的樣本數(shù)為 \(n_j\) ,\(x_{ij}\) 表示第 \(j\) 個(gè)類別的第 \(i\) 個(gè)樣本,\(\bar{x_j}\) 表示第 \(j\) 個(gè)類別的樣本均值,即 \(\bar{x_j} = \frac{\sum_{i=1}^{n_j} x_{ij}}{n_j}\) ,\(\bar{x}\) 為總樣本均值 \(\bar{x} = \frac{\sum_{j=1}^k \sum_{i=1}^{n_j}x_{ij}}{n}\) ,那么樣本的總體變異為:
\[ SST = \sum\limits_{j=1}^k \sum\limits_{i=1}^{n_j} (x_{ij} - \bar{x})^2 \]
\(SST\) 可以分解為兩部分 —— 類別內(nèi)差異 \(SSE\) 和類別間差異 \(SSB\) :
\[ \begin{array} & SSE = \sum\limits_{j=1}^k \sum\limits_{i=1}^{n_j} (x_{ij} - \bar{x_j})^2 \\ SSB = SST - SSE = \sum\limits_{j=1}^k n_j (\bar{x_j} - \bar{x})^2 \end{array} \]
\(SSE\) 衡量每個(gè)類別內(nèi)部樣本之間的差異,可以認(rèn)為是隨機(jī)誤差。\(SSB\) 則衡量不同類別之間的差異。方差分析的基本思想是將不同類別之間的變異與隨機(jī)誤差作比較,如果二者之比大于某一臨界值,則可拒絕零假設(shè)接受備選假設(shè),即不同類別間樣本均值不全相等,這也意味著樣本特征對于類別有一定的區(qū)分度。
而對于如何確定臨界值,則終于要用到傳說中的 F 分布了。在 \((2)\) 式中已經(jīng)定義了服從F分布的隨機(jī)變量,注意到分子分母都要除以自由度,而 \(SSE\) 和 \(SSB\) 的自由度分別為 \(k-1\) 和 \(n-k\) ,因而統(tǒng)計(jì)檢驗(yàn)量 \(F\) :
\[ F = \frac{類別間方差}{類別內(nèi)方差} = \frac{MSB}{MSE} = \frac{SSB \,/\, (k-1)}{SSE\, / \, (n-k)} \]
服從分子自由度為 \(k-1\),分母自由度為 \(n-k\) 為的 F 分布,即 \(\frac{MSB}{MSE} \sim F(k-1, \,n-k)\) 。看到這里,敏感的同學(xué)可能已經(jīng)注意到了,方差分析的思想和線性判別分析 (Linear Discriminant Analysis,LDA) 非常類似 ( LDA 的思想可大致概括為 “投影后類內(nèi)方差最小,類間方差最大”)。沒錯(cuò)~,這兩個(gè)方法都是由英國大統(tǒng)計(jì)學(xué)家和生物學(xué)家 Ronald Fisher 爵士所創(chuàng)立。
于是按假設(shè)檢驗(yàn)的套路,零假設(shè)成立的情況下算出 F 值,查 F 分布表,若p值小于0.05 (或0.01),則拒絕零假設(shè)接受備選假設(shè),不同類別間均值不相等。在現(xiàn)實(shí)中使用軟件包可以方便地輸出方差分析表,這里使用 python 里的統(tǒng)計(jì)包 statsmodels:
import statsmodels import statsmodels.api as sm from statsmodels.formula.api import olslm = ols('標(biāo)簽 ~ 身高', data=data).fit() table = sm.stats.anova_lm(lm, typ=1) print(table)#######################################################df sum_sq mean_sq F P(>F) 身高 1.0 0.188034 0.188034 0.622642 0.460102 Residual 6.0 1.811966 0.301994 NaN NaN從上表可以看出 \(p\) 值為0.46,所以不能拒絕零假設(shè),即身高這個(gè)特征無法區(qū)分變態(tài)與否。
方差分析可用于控制一個(gè)或多個(gè)自變量來檢驗(yàn)其與因變量的關(guān)系,進(jìn)而檢測某種實(shí)驗(yàn)效果,因而與實(shí)驗(yàn)設(shè)計(jì)有著千絲萬縷的關(guān)系,不過這里面的水頗深。。。 甚至有很多專著,如 《 Design and Analysis of Experiments 》 等。 就一般的特征選擇問題而言,和卡方檢驗(yàn)一樣,我們依然比較關(guān)心的是特征的相對重要性,所以可以按每個(gè)特征 F 值的大小進(jìn)行排序,去除F值小的特征。
上面的例子中檢驗(yàn)身高與標(biāo)簽之間的關(guān)系,因?yàn)橹挥猩砀咭粋€(gè)因素,所以被稱為單因素方差分析。當(dāng)然其他還有雙因素方差分析,可以同時(shí)檢驗(yàn)兩個(gè)特征與標(biāo)簽的關(guān)系,以及兩個(gè)特征之間的相互關(guān)系,缺點(diǎn)是計(jì)算繁瑣,復(fù)雜度比單因素高。
單因素方差分析 (F檢驗(yàn)) 與統(tǒng)計(jì)學(xué)中另一大假設(shè)檢驗(yàn)方法 —— \(t\) 檢驗(yàn)也頗有淵源,檢驗(yàn)統(tǒng)計(jì)量 F 與 t 檢驗(yàn)中的檢驗(yàn)統(tǒng)計(jì)量 t 的關(guān)系為: \(F = t^2\) ,所以對于只有兩個(gè)類別來說,F 檢驗(yàn)和 t 檢驗(yàn)會(huì)得出相同的結(jié)論,但對于多個(gè)類別的情況,t檢驗(yàn)只能兩兩進(jìn)行比較,這會(huì)帶來一些問題:
所以對于多個(gè)類別的比較,方差分析是首選,其相當(dāng)于是 t 檢驗(yàn)對于多類別的擴(kuò)展,我想 scikit-learn 的特征選擇模塊中使用 F 檢驗(yàn)而不是 t 檢驗(yàn)是有這方面考慮的。
(2) 線性相關(guān)分析
對于特征和標(biāo)簽皆為連續(xù)值的回歸問題,要檢測二者的相關(guān)性,最直接的做法就是求相關(guān)系數(shù) \(r_{xy}\):
\[ r_{xy} = \frac{cov(x,y)}{\sigma_x \sigma_y} =\frac{\sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^n(x_i - \bar{x})^2} \sqrt{\sum_{i=1}^n (y_i - \bar{y})^2}} \]
但 scikit-learn 中的 f_regression 采用的是先計(jì)算相關(guān)系數(shù),然后轉(zhuǎn)化為F值。這又是個(gè)神奇的操作,究竟是如何轉(zhuǎn)換的?在線性回歸中常使用判定系數(shù) \(R^2\) 作為回歸方程擬合數(shù)據(jù)點(diǎn)的程度,或者說是因變量的總體方差能被自變量解釋的比例。\(R^2\) 的定義以及和相關(guān)系數(shù) \(r_{xy}\) 的關(guān)系如下:
\[ R^2 = \frac{SSR}{SST} = 1- \frac{SSE}{SST} = r_{xy}^2 \]
其中 \(SSE\) 為誤差平方和:\(SSE = \sum_{i=1}^n (y_i - \hat{y}_i)^2\) ,\(SSR\) 為回歸平方和:\(SSR = \sum_{i=1}^n (\hat{y}_i - \bar{y})^2\) ,\(SST\) 為總體平方和:\(SST = \sum_{i=1}^n (y_i - \bar{y})^2\) 。可以看到這些式子與方差分析中的式子非常類似,不過注意這里計(jì)算的是都是標(biāo)簽值 \(y\),而不是方差分析中的 \(x\) 。這其中的原理都是相通的,我們同樣可以用 \(SSR\) 和 \(SSE\) 來計(jì)算檢驗(yàn)統(tǒng)計(jì)量 \(F\) (\(SSR\) 和 \(SSE\) 的自由度分別為1和 n-2 ):
\[ F = \frac{MSR}{MSE} = \frac{SSR \,/\, 1}{SSE \,/\, (n-2)} = \frac{SSR / SST}{SSE / SST} \times (n-2) = \frac{r_{xy}^2}{1-r_{xy}^2} \times (n-2) \]
即 \(\frac{MSR}{MSE} \sim F(1, \,n-2)\) 。這樣就可以方便地將相關(guān)系數(shù)轉(zhuǎn)化為 F 值了,接下來的步驟與之前的假設(shè)檢驗(yàn)一樣。該方法的缺點(diǎn)是只能檢測線性相關(guān)關(guān)系,但不相關(guān)不代表獨(dú)立,可能是非線性相關(guān)關(guān)系。
互信息 (mutual information) 用于特征選擇,可以從兩個(gè)角度進(jìn)行解釋:(1)、基于 KL 散度和 (2)、基于信息增益。對于離散型隨機(jī)變量 \(X, \,Y\),互信息的計(jì)算公式如下:
\[ I(X;Y) = \sum\limits_{y \in \mathcal{Y}}\sum\limits_{x \in \mathcal{X}} p(x,y) \,\text{log}\left(\frac{p(x,y)}{p(x)p(y)}\right) \tag{3.1} \]
對于連續(xù)型變量:
\[ I(X;Y) = \int_{\mathcal{Y}}\int_{\mathcal{X}} p(x,y) \,\text{log}\left(\frac{p(x,y)}{p(x)p(y)}\right) dxdy \tag{3.2} \]
可以看到連續(xù)型變量互信息的需要計(jì)算積分比較麻煩,通常先要進(jìn)行離散化,所以這里主要討論離散型變量的情況。互信息可以方便地轉(zhuǎn)換為 KL 散度的形式:
\[ I(X;Y) = \sum\limits_{y \in \mathcal{Y}}\sum\limits_{x \in \mathcal{X}} p(x,y) \,\text{log}\left(\frac{p(x,y)}{p(x)p(y)}\right) = D_{KL}(p(x,y) || p(x)p(y)) \tag{3.3} \]
我們知道 KL 散度可以用來衡量兩個(gè)概率分布之間的差異,而如果 \(x\) 和 \(y\) 是相互獨(dú)立的隨機(jī)變量,則 \(p(x,y) = p(x)\,p(y)\) ,那么 \((3.3)\) 式為 \(\huge{0}\)。因此若 \(I(X;Y)\) 越大,則表示兩個(gè)變量相關(guān)性越大,于是就可以用互信息來篩選特征。
而從信息增益的角度來看,互信息表示由于 \(X\) 的引入而使 \(Y\) 的不確定性減少的量。信息增益越大,意味著特征 \(X\) 包含的有助于將 \(Y\) 分類的信息越多 (即 \(Y\) 的不確定性越小)。決策樹就是一個(gè)典型的應(yīng)用例子,其學(xué)習(xí)的主要過程就是利用信息增益來選擇最優(yōu)劃分特征,表示由于特征 \(A\) 而使得對數(shù)據(jù)集 \(D\) 的分類不確定性減少的程度,信息增益大的特征具有更強(qiáng)的分類能力。其計(jì)算公式為:
\[ \begin{align} I(D\,;A) & = H(D) - H(D|A) = H(D) - \sum\limits_{v=1}^\mathcal{V}\frac{|D^v|}{|D|} H(D^v) \tag{3.4} \\ & = -\sum\limits_{k=1}^\mathcal{K}\frac{|C_k|}{|D|}\,\text{log}\frac{|C_k|}{|D|} -\left(\sum\limits_{v=1}^\mathcal{V} \frac{|D^v|}{|D|}\sum\limits_{k=1}^\mathcal{K}\frac{|D_{k}^v|}{|D^v|}\,\text{log}\frac{|D_{k}^v|}{|D^v|}\right) \tag{3.5} \end{align} \]
\((3.4)\) 式中 \(\mathcal{V}\) 表示特征 \(A\) 有 \(\mathcal{V}\) 個(gè)可能的取值,\(|D^v|\) 表示第 \(v\) 個(gè)取值上的樣本數(shù)量。 \((3.5)\) 式中設(shè)總共有 \(\mathcal{K}\) 個(gè)類別,\(|C_k|\) 表示屬于第 \(k\) 類的樣本數(shù)量,\(\sum_{k=1}^\mathcal{K}|C_k| = |D|\)。 \(|D_k^v|\) 表示特征 \(A\) 的取值為 \(v\) 且類別為 \(k\) 的樣本數(shù)量。
互信息和信息增益,二者是等價(jià)的,下面我們來看表示互信息的 \((3.1)\) 式是如何推導(dǎo)出表示信息增益的 \((3.4)\) 和 \((3.5)\) 式的:
\[ \begin{align*} I(X;Y) = I(Y;X)&= \sum\limits_{y \in \mathcal{Y}}\sum\limits_{x \in \mathcal{X}} p(x,y) \,\text{log}\left(\frac{p(x,y)}{p(x)p(y)}\right) \\ & = -\sum\limits_y\sum\limits_x p(x,y)\,\text{log}\,p(y) + \sum\limits_x\sum\limits_y p(x,y)\text{log} \left(\frac{p(x,y)}{p(x)}\right) \\ & = -\sum\limits_y p(y)\,\text{log}\,p(y) + \sum\limits_x\sum\limits_y p(x)p(y|x)\text{log}\, p(y|x) \\ & = -\sum\limits_y p(y)\,\text{log}\,p(y) + \sum\limits_x p(x) \sum\limits_y p(y|x)\text{log}\, p(y|x) \tag{a} \\ & = H(Y) - \sum\limits_x p(x)H(Y|X=x) \tag{b}\\ & = H(Y) - H(Y|X) \end{align*} \]
上面的 \((a)\) 式就對應(yīng)著 \((3.5)\) 式,而 \((b)\) 式對應(yīng) \((3.4)\) 式, \(p(y) \simeq \frac{|C_k|}{|D|}\;,\; p(x) \simeq \frac{|D^v|}{|D|}\;,\; p(y|x) \simeq \frac{|D_{k}^v|}{|D^v|}\) 。由此可以看到?jīng)Q策樹的學(xué)習(xí)過程也是一種依賴于訓(xùn)練數(shù)據(jù)的極大似然估計(jì)。
再來探究下 \((b)\) 式,\(H(Y)\) 為熵,表示隨機(jī)變量 \(Y\) 的不確定性。\(H(Y|X)=\sum\limits_{x}p(x) H(Y|X=x)\) 為條件熵 (conditional entropy),表示在隨機(jī)變量 \(X\) 已知的情況下隨機(jī)變量 \(Y\) 的不確定性。那么二者的差 \(I(X;Y) = H(Y) - H(Y|X)\) 就表示由于 \(X\) 的引入而使 \(Y\) 的不確定性減少的量,維基里有一張形象的圖:
放在特征選擇的語境下,我們希望 \(Y\) 的不確定越小越好,這樣越有助于分類,那么互信息越大,則特征 \(X\) 使得 \(Y\) 的不確定性減少地也越多,即 \(X\) 中包含的關(guān)于 \(Y\) 的信息越多。因而策略還是和上文一樣,計(jì)算每個(gè)特征與類別的互信息值,排序后去除互信息小的特征。
互信息的一大優(yōu)點(diǎn)是其能檢測出多種變量之間的關(guān)系,而相較而言 F 檢驗(yàn)只能表示線性相關(guān)關(guān)系。Scikit-learn 的這個(gè)例子 (Comparison of F-test and mutual information) 中顯示了這一點(diǎn),互信息能很好展現(xiàn) \(x\) 和 \(y\) 之間的非線性關(guān)系:
/
轉(zhuǎn)載于:https://www.cnblogs.com/massquantity/p/10486904.html
總結(jié)
以上是生活随笔為你收集整理的特征选择: 卡方检验、F 检验和互信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嘿嘿 抢到了iphone4
- 下一篇: day7-字典作业