使用互信息進行特徵選擇

特徵提取

1.TF-IDF學習

之前已經總結過TF-IDF相關的內容了。這裏就不再重複編寫了,需要的話請參看:https://blog.csdn.net/sir_TI/article/details/88135434。本質內容就是一個公式的問題。

然後現在主要總結的就是關於TF-IDF相關的代碼分析。先總結出特徵提取的流程,然後將相關的內容以代碼的形式體現出來。

具體請參見我的github

2.互信息

說起互信息,其實我們都不陌生。相信當您學到了這兒的時候,已經對決策樹有了基本的瞭解,那麼現在就簡單的回顧一下相關的概念:

2.1 熵

如果X是一個離散型隨機變量,取值空間爲R,其概率分佈爲p(x)=P(X=x),xRp(x)=P(X=x),x\subseteq R.那麼X的熵的定義式爲:
H(X)=xRp(x)log2p(x) H(X)=-\sum _{x \subseteq R}p(x)\log_2p(x)
其中熵的物理意義就是反應了某個物體的混亂程度。當熵最大時,隨機變量最不確定。

2.2 聯合熵

如果X,Y是一對離散型隨機變量X,Y ~ P(x,y),X,Y的聯合熵(joint entropy)定義爲:
H(X,Y)=xXyYp(x,y)log2p(x,y) H(X,Y)=-\sum _{x\subset X}\sum_{y\subset Y}p(x,y)\log_2p(x,y)
聯合熵描述的意義就是一對隨機隨機變量平均所需要的信息量。

2.3 條件熵

給定隨機變量X的情況下,隨機變量Y的條件熵(conditional entropy)定義爲:
H(YX)=xXyYp(x,y)log2p(yx) H(Y|X)=-\sum _{x\subset X}\sum_{y\subset Y}p(x,y)\log_2p(y|x)

2.4 互信息

在這裏我先給出定義:如果隨機變量(X,Y)~p(x,y),那麼X,Y之間的互信息定義爲:
I(X;Y)=H(X)H(XY) I(X;Y)=H(X)-H(X|Y)
是不是很熟悉,其實我們所說的互信息,其實就是等同於決策樹中定義的信息增益。

那麼筆者上面講了一堆內容,有什麼用呢?還不如直接就是給出互信息的公式呢。那麼請看我慢慢道來:

我們知道,條件概率的定義式爲:P(yx)=p(x,y)p(x)P(y|x)=\frac{p(x,y)}{p(x)},那麼我們對聯合熵進行化簡:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲\nonumber H(X,Y…
同理可得:
H(X,Y)=H(Y)+H(XY) H(X,Y)=H(Y)+H(X|Y)
因爲聯合熵是相等的,那麼有:
H(X)+H(YX)=H(Y)+H(XY) H(X)+H(Y|X)=H(Y)+H(X|Y)
即:
H(X)H(XY)=H(Y)H(YX) H(X)-H(X|Y)=H(Y)-H(Y|X)
通過這樣一系列的推導,我們就可以知道互信息(信息增益)是怎麼來的。

2.5 交叉熵

說到了上面的幾個內容,那麼不得不提及的就是交叉熵了。交叉熵在我們的機器學習、深度學習中廣泛的被用做爲代價函數,那麼接下來主要就是介紹交叉熵的定義以及爲什麼代價函數會使用交叉熵損失函數。

2.5.1 定義

如果一個隨機變量X~p(x),存在q(x),使得q(x)爲用於近似p(x)的概率分佈,那麼隨機變量X和模型q之間的交叉熵(cross entropy)定義爲:
H(p,q)=xp(x)logq(x) H(p,q)=-\sum _{x}p(x)\log q(x)
交叉熵的概念就是用來衡量模型與真實概率分佈之間的差異的情況。在實際的應用中,模型的交叉熵越小,模型的表現越好。

2.5.2 why cross entropy?

爲什麼需要交叉熵損失函數呢?這裏主要是相對於MSE(均方誤差損失函數)進行解釋。

結論就是:由於梯度的原因,可以加快訓練速度。

具體解釋參看下面這個Blog:爲什麼使用交叉熵作爲損失函數

3.使用互信息來作爲特徵篩選

回顧之前,對於中文的數據集處理的最多的就是去除停用詞,基本沒有對我們的數據來進行特徵篩選。想想就覺得可怕。

PS:之前就在某國產最大的性價比手機廠商面試的問到了這個問題,空有一番理論,沒得實踐,正好藉着這個機會,從互信息出發,來進行特徵篩選。

特徵,在機器學習領域是無比重要的,好的特徵能夠更加明確的表達出模型的特點。但是在實際情況中,找到好的模型一般是無比困難的,這其中涉及到數據清洗,數據分析以及特徵選擇,然後進行一大段的分析選擇之後,才能得到我們需要的特徵。

特徵選擇的方式主要分爲三個類別:

3.1 過濾法

過濾法只用於檢驗特徵向量和目標(響應變量)的相關度,不需要任何的機器學習的算法,不依賴於任何模型,只是應用統計量做篩選:我們根據統計量的大小,設置合適的閾值,將低於閾值的特徵剔除。

所以,我們的過濾法主要是一個數學過程。過濾法可以主要採用以下指標進行過濾:

方差分析、相關係數、假設檢驗(如卡方檢驗、F檢驗和t檢驗等)、互信息等

3.2 包裝法

包裝法的解決思路是會選擇一個目標函數來一步步的篩選特徵。

最常用的包裝法是遞歸消除特徵法(recursive feature elimination)。遞歸消除特徵法使用一個機器學習模型來進行多輪訓練,每輪訓練後,消除若干權值係數的對應的特徵,再基於新的特徵集進行下一輪訓練。在sklearn中存在RFE這個類來進行特徵篩選。

3.3 嵌入法

​ 嵌入法也是用機器學習的方法來選擇特徵,但是它和RFE的區別是它不是通過不停的篩掉特徵來進行訓練,而是使用的都是特徵全集。在sklearn中,使用SelectFromModel函數來選擇特徵。

最常用的是使用L1正則化和L2正則化來選擇特徵。此外,GBDT和決策樹也可以來選擇特徵。

另外一個常見的就是做的特徵融合。就是根據特徵之間的關係進行特徵融合,找到更能表達出模型的特徵。

3.4 實例

這部分主要以代碼的形式展現,參見我的github

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