作者:[龍心塵](http://blog.csdn.net/longxinchen_ml?viewmode=contents) &&[寒小陽](http://blog.csdn.net/han_xiaoyang?viewmode=contents)
時間:2016年1月。
出處:
[http://blog.csdn.net/longxinchen_ml/article/details/50471682](http://blog.csdn.net/longxinchen_ml/article/details/50471682),
[http://blog.csdn.net/han_xiaoyang/article/details/50481967](http://blog.csdn.net/han_xiaoyang/article/details/50481967)
聲明:版權所有,轉載請聯系作者并注明出處
### 1. 引言
再過一個月就是春節,相信有很多碼農就要準備歡天喜地地回家過(xiang)年(qin)了。我們今天也打算講一個相親的故事。
講機器學習為什么要講相親?被討論群里的小伙伴催著相親,哦不,催著講特征工程緊啊。只是我們不太敢講這么復雜高深的東西,畢竟工程實踐的經驗太復雜了,沒有統一的好解釋的理論,一般的教材講這方面的內容不多。我們就打算以一個相親的故事為例,串一些特征工程的內容。
### 2. 故事背景
**事先聲明:本故事純屬虛構,如有雷同,純屬巧合!**
> 海歸白富美韓梅梅剛回國,還沒適應工作,母親就催著相親。以父母的關系,他們了解到的適齡單身男青年有100個。要從100個男生中找到1個理想的女婿,可謂百里挑一。韓梅梅母親也擔心女兒相親多了會反感,打算草擬一個相親名單,人數不多。怎么從中挑出優秀男青年就是一個首要的問題。
### 3. 用機器學習的框架去分析
我們用機器學習的框架分析,在父母眼中,這100個男生最終將會分成兩類:“女婿”(1人)和“非女婿”(99人)。“女婿”和“非女婿”就叫做“標簽”。
而選擇相親名單的標準——如“是否高富帥”、“是否海歸”等等——就叫作“特征”。最好能有一個特征能夠精確定位理想女婿。但這太過理想了。比較現實的方法是從這些“特征”中選擇、拆分、組合出最合適的特征,逐漸逼近我們的標簽,以形成一個精簡的相親名單。而這個過程,就可以理解成特征處理、特征工程的過程。
但是,現實中的特征有千千萬,拆分重組之后特征又是幾何級數地增加,可能永遠也窮舉不完。因此需要有統一客觀的指標來衡量這些特征對標簽的識別能力,以便進一步地深入分析。而評估這些“特征”對我們的“標簽”的有效程度的過程就叫作“特征有效性分析”。
### 4. 劇情一:韓媽媽的“如意算盤”
為人父母嘛,總是希望女兒嫁得好。韓媽媽的第一反應的就是要找“高富帥”。先她先從這100個男生中挑了挑,符合高富帥這個標準的有5個人。
韓媽媽的如意算盤是這樣的:女婿就從這5個人中挑,概率就是20%,比之前的1%整整提高了20倍,嘿嘿嘿。。。
### 5. 特征有效性分析
其實,這就韓媽媽不知不覺就走了一個特征有效性分析的過程。我們用圖表演示一下:

考慮到各方面的概率,用下圖表示更加直觀:

為了表述方便,我們以隨機挑女婿而不考慮任何特征的概率叫做“先驗概率”(1%)。而中間的箭頭中的概率則表示在已經知道樣本所屬特征前提下,屬于女婿還是不屬于女婿的概率,也可以叫作“標簽相對于某個特征的后驗概率”(20%)。而母親的如意算盤就是考慮了上圖中紅圈部分的先驗概率與后驗概率(也可以叫條件概率)。這其實是一種很樸素的特征有效性分析的方法。而且她還做了個更加精確的數量化描述:
后驗概率先驗概率=20%1%=20(倍)。
只是在工程上做除法可能運算會麻煩些,而兩邊同時取對數轉換成減法則更方便:
log(后驗概率先驗概率)=log(后驗概率)?log(先驗概率)>
概率表示著選女婿的可能性或者確定性。在本例中,后驗概率的確定性比先驗概率的確定性更高。可見,“確定性的增加”可以作為特征有效性分析的一個指標。
我們進一步分析,無論先驗概率還是后驗概率,其本身是0-1之間的一個數,取完對數之后是一個負數,這在現實中不太方便找到其對應的現象解釋。但是概率的倒數一定大于1,取完對數之后就是一個正數,就好找現實解釋了。我們可以把這個“概率倒數的對數”理解成不確定性的指標。于是上式就變成:
log(后驗概率先驗概率)=log(1先驗概率)?log(1后驗概率)>
這里面的log(后驗概率先驗概率)我們叫做互信息。
因此,“不確定性的減少”可以作為特征有效性分析的一個指標。這個結論我們接下來將會反復用到。
### 6. 劇情二:白富美巧勸慈母
韓媽媽半開玩笑地問韓梅梅:“我們家閨女只挑高富帥的怎么樣?”女兒想了想,說:“如果人家看不上我們怎么辦?”母親笑著說:“我們的家境哪里差了?何況我們的女兒這么優秀,我們還看不上他們呢。”
女兒說:“這就是說明我們雙方不合適了。我們家條件雖然還不錯,但是比下有余、比上不足,跟真正條件好的家庭比較起來我們根本不算事兒。如果一味挑高富帥,他們可能覺得我們只是看中他們的錢,反倒把我們家看低了。相反,要是真要有個真正對我好的男生,比什么都幸福,而他不一定必須是高富帥。畢竟跟我一起相處一輩子的是一個活生生的人,而不是他背后的東西嘛。”
母親很有感慨地說:“嗯,你能這樣想我就放心了。梅梅真是長大了。那么,你打算怎么辦?”女兒說道:“高富帥也得分人,踏實人品好的也可以接觸一下,但是玩心太重不會照顧人的我就不喜歡。估計高富帥里面這兩種人一半一半吧。很多男生并不是高富帥,其中沒準也有合適的人呢。”
### 7. 特征有效性分析
現在特征的分布發生了新變化。按韓梅梅的分析,高富帥中可能有一半她就不會喜歡,而不是高富帥的男生中沒準有合適的人。我們可以簡單假設高富帥中與非高富帥中各有0.5個合適的人。則分析圖表如下:


現在的情況是,“是不是女婿”的可能性同時分布在“是高富帥”和“不是高富帥”中,單獨衡量“高富帥”本身的后驗概率已經不夠描述特征的整體效果了。我們可以有一個考慮特征整體情況的指標。
還是回到之前的那句話:
> “不確定性的減少”可以作為特征有效性分析的一個指標。
我們之前考慮了“是女婿”的不確定性是log(11%),相應的“不是女婿”的不確定性是log(199%),那么標簽“是否女婿”作為整體的平均不確定性則可以理解為這兩個狀態的加權平均:
> H(Y)=1%×log(11%)+99%×log(199%)=0.08079。(全文假定對數log的底數取為2)
> 這就是傳說中的信息熵。我們用Y表示標簽,用H(Y)表示“是否女婿”的信息熵,也就是其整體的平均不確定性。
那么考慮特征(“是否高帥富”)后的標簽(“是否女婿”)的平均不確定性怎么衡量?我們用X:{“是高富帥”,“不是高富帥”}來表示特征。其實,與上面的思路類似,我們在已知特征為“是高富帥”的前提下,“是否女婿”這個標簽的整體平均不確定性可以用相對“是高富帥”的后驗概率來求出:
> H(Y|X=“是高富帥”)=(0.5/5)×log(1(0.5/5))+(4.5/5)×log(1(4.5/5))=0.46900
在已知特征為“不是高富帥”的前提下,“是否女婿”這個標簽的整體平均不確定性可以用相對“不是高富帥”的后驗概率來求出:
> H(Y|X=“不是高富帥”)=(0.5/95)×log(1(0.5/95))+(94.5/95)×log(1(94.5/95))=0.04741。
因此,已知特征(無論具體是“是高富帥”還是“不是高富帥”)情況下的標簽平均不確定性為前面兩種情況的加權平均:
> H(Y|X)
=P(X=“是高富帥”)×H(Y|X=“是高富帥”)+P(X=“不是高富帥”)×H(Y|X=“不是高富帥”)
=5/100×0.46900+95/100×0.04741=0.06849
這就是傳說中的條件熵。
所以,考慮特征后,標簽的“不確定性的減少”為:
> I(Y,X)=H(Y)?H(Y|X)=0.01230
這個I(Y,X)就叫做**平均互信息**。
我們用同樣的方法去評價之前母親設想的女婿只在高富帥中的理想情況(也就是女婿只在高富帥中產生的情況)的互信息I(Y,X′)=0.04470
平均互信息從理想情況的0.04470下降到0.01230,也就是說原以為特征“是否高富帥”與標簽“是否女婿”的相關性很高,后來發現相關性其實是比較低的。可見理想很豐滿,現實很骨感。
### 8. 劇情三:白富美重定名單
其實,韓梅梅沒有說出來的話是她有一個青梅竹馬的碼農叫李雷。她出國之前的對他的印象還不錯。如果按母親的標準李雷肯定排除在相親名單外了,而她想給他一個機會。
這時母親說話了:“我們家女兒考慮得挺好,那相親名單你來定吧。”女兒說:“不是高富帥的男生也該好好區分一下,那些品行端正、氣度不凡、踏實肯干的潛力股的男生我也比較欣賞,其他的就暫且不考慮了。”母親說:“就是說可以從高富帥中挑出部分品德好的,還有從不是高帥富的男生中挑出部分潛力股,共同組成一個新的名單,我們的女婿就在這里面了?”女兒不好意思地說:“媽媽您真著急,八字還沒一撇呢。”
接著,韓梅梅母女倆從高富帥中挑了2個口碑不錯的,又從不是高富帥的男生中條了10個很不錯的。最終組成了12人的相親名單。李雷的名字在其中。
### 9. 拆分重組成為新特征
其實以上韓梅梅母女倆完成了一次特征的拆分與重組過程。具體圖示如下:

這里用“潛帥德”表示韓梅梅對“品行端正、氣度不凡、踏實肯干的潛力股”的特征的描述。
特征進行拆分與重組的過程在特征工程中經常出現。因為當你對特征與標簽的相關性有定量的評估方法后,會篩選出那些不那么顯著的特征(如本例中的“是否高富帥”),然后去分析考核指標這么低的原因,啟發你引入新的特征(如本例中的“是否品德良好”、“是否有潛力”)將原有特征拆分重組,可能會有更好的效果。而這些生成的新特征,又要經過特征有效性分析來最終評估。如此反復迭代。
### 10. 特征有效性分析

我們用X2來表示新特征,與上面的思路類似,我們計算X2的平均互信息:
I(Y,X2)=H(Y)?H(Y|X2)=0.03114>
與之前的平均互信息I(Y,X)=0.01230比起來,有了顯著提高。可見新特征X2比之前的特征X更有效。
### 11. 劇情四:韓媽媽給名單分級
在跟韓梅梅聊完之后,韓媽媽轉念一想:“為什么非要有一份相親名單?可以把這12個人再分成兩類,第一類是高富帥的,先相親。這些覺得不合適后再考慮剩下的10個人啊。”
### 12. 特征有效性分析

我們繼續分析,用X3來表示新特征,與上面的思路類似,我們計算X3的平均互信息:
I(Y,X3)=H(Y)?H(Y|X3)=0.03593>
與之前的平均互信息I(Y,X2)=0.03114比起來,又有了一定的提高。可見新特征X3比之前的特征X2更有效。
韓媽媽真是為女兒的相親操碎了心。
### 13. 劇情五:韓媽媽問計趙媒婆
韓媽媽思索完之后抑制不住內心的興奮,想找人傾訴。這時她正好在路上碰見了趙媒婆。趙媒婆在韓媽媽的老閨蜜圈中享有盛譽,相親非常有經驗。
趙媒婆聽了韓媽媽的訴說后,微微一笑,說:“你這個名單不夠專業。”韓媽媽大為詫異。趙媒婆繼續說:“高、富、帥三個特征本來就是相互獨立的三個特征,你硬生生地綁在一起,多少大好青年被你給甩掉了。后面的潛力股啊、人品端正啊什么的都類似。”韓媽媽恍然大悟:“真是這樣啊。”
趙媒婆說:“其實你這里最大的問題是這些特征的評估都是拍腦袋決定,沒有充分的現實數據做支撐,很可能會犯錯誤的。”韓媽媽暗暗點頭,心生佩服。
趙媒婆接著說:“還有一個問題,你準備了兩份名單,也就是把人群分成了三份,你算平均互信息只能評價整體的,具體到每一份人群你怎么對他們評價?”韓媽媽想了想,說:“我們可以直接用相對于某個具體條件的信息熵啊。”趙媒婆說:“何苦這么麻煩呢?”
韓媽媽聽她話里有話,打算繼續問下去。
### 14. 評價特征選項的兩個方法
在趙媒婆最后一個問題中,韓媽媽所說的其實是可以計算以下三個值來評估具體的特征選項:
- H(Y|X3=“高富帥德”)
- H(Y|X3=“潛帥德”)
- H(Y|X3=“不是高富帥德且不是潛帥德”)
而這三個值在之前計算條件熵H(Y|X3)的過程中就已經計算出來了。所以比較起來應該很方便。
但其實更簡單的方法用他們相對于所需要標簽的后驗概率評價。如下圖紅色的部分,比較大小就可以找出評價較好的特征。

顯然“高富帥德”的評分最高(0.25),“潛帥德”的評分次之(0.05),“不是高富帥德且不是潛帥德”評分最差(0)。符合韓媽媽的預期。
然而,趙媒婆的想說的并不是這種方法,而是邏輯回歸……
### 15. 劇情六:趙媒婆的數據庫
趙媒婆不等韓媽媽說話,就直接拿出了自己的神器:一個平板電腦。然后打開她的相親數據庫,點了點鼠標,一張巨大的表展現出來。韓媽媽目瞪口呆:“現在媒婆都用高科技了?”趙媒婆傲嬌地說:“那是。”
這張大表是她這么多年來全國各地相親介紹的所有男生信息,分別標注了每個男生的升高、年齡、年薪、長相特點、教育經歷、工作經歷、是否海歸、工作年限、工作公司、工作地點、出身地、是否有戶口、是否公務員、具體職業、行業、性格傾向等等信息。
她還有一張女生信息表,另外一張男生女生相親情況表(相親成功、相親不成、繼續發展、未接觸)。媒婆一一給韓媽媽解釋這些信息。韓媽媽連連驚呼。
趙媒婆接著說道:“我們可以從里面找出跟你女兒情況相近的一些女生信息,再把跟她們相過親的男生找出來,把其中相親成功的歸為一類,剩下的歸為另一類。然后假設男生的每個特征對相親成功都有貢獻,貢獻的權重為wi。我們用邏輯回歸的方法可以求出這些權重,把這些權重大的特征挑出來,你再用它們來找女婿就方便了。”
韓媽媽說:“邏~輯~什么?”趙媒婆說:“高科技了,你不懂的。不過給我干兒子寫了個[博客](http://blog.csdn.net/han_xiaoyang/article/details/49332321)來介紹,你可以看看。”
### 16. 特征篩選與特征工程工作流
呃,我們什么時候成趙媒婆的干兒子了?先不管這些。邏輯回歸并不是什么高科技,在[前面的文章](http://blog.csdn.net/han_xiaoyang/article/details/49123419)里已有簡單的解釋。我們在這里就補充說明一下為什么可以用權重來衡量特征的貢獻。以下是一個典型的邏輯回歸過程:

我們期望P(z)的概率越大越好,sigmoid函數是個單調遞增函數,所以z越大越好,在所有特征都歸一化的前提下,顯然是權重wi越大越好。因此與wi對應的特征就是我們要尋找的顯著特征。而那些權重小的特征就可以先不考慮了。這就完成了一個最簡單的特征篩選的過程。
當然,這里所說的權重大可以指的是權重的絕對值很大,比如特征“富”的權重是-100,是一個很小的數,但這也就意味著“不富”的權重會很大,以至于顯著影響我們的z的結果。所以這也是一個顯著特征。
需要補充一下的是,在工程實踐中,權重的幅度和正則化也有關系。L1正則化會把特征拉稀疏,會產出一部分0特征。而不是0的那些特征,是有作用的特征。所以L1正則化其實具備一定的特征選擇(feature selection)的作用。尤其是很高維空間的feature,用L1正則化,其實能幫助做一下feature selection的。而L2正則化,則會把各個維度的權重拉平均一些,抑制住各個維度權重幅度的方差。但是抑制歸抑制,最后的權重還是會有大小差異,就像上文說的,絕對值大的權重,對應的特征區分度好一些。
對于那些不夠顯著的特征,我們需要分析一下這個特征的具體情況是怎樣,是否需要對其進行重新拆分與重組,拆分重組后新的特征又可以進行特征有效性分析。如此不斷迭代反復,就可以挑選出比較理想的特征了。
我們用以下整個工作流大致展現這個過程。由于很多內容沒有展開,我們先把名字寫進去,在后續的文章中繼續擴展。

### 17. 劇情七:韓媽媽新名單塵埃落定
在韓媽媽與趙媒婆的盡心鼓搗下,最終生成了一個只有4個人的相親名單。其中只剩下一名高富帥,另外三人中有一人正是李雷。韓媽媽拿著新名單給女兒看,韓梅梅沉默半晌,心想李雷在四人名單中怎么也能存在,莫非這也是緣分?
### 18. 小結
本文中主要講了一些特征有效性分析的方法,包括用互信息,平均互信息,條件熵,后驗概率,邏輯回歸權重等方法對特征與標簽的相關性進行了評估。有了這些評估做基礎,可以篩選出顯著的特征,并對對不顯著的特征進行分析、拆分和重組,最終形成新的特征并反復迭代。本文略過了一些特征預處理的方法,并對特征有效性評估的闡述不夠充分,我們將在接下來的文章中予以討論。
- 前言
- 機器學習系列(1)_邏輯回歸初步
- 機器學習系列(2)_從初等數學視角解讀邏輯回歸
- 機器學習系列(3)_邏輯回歸應用之Kaggle泰坦尼克之災
- 手把手入門神經網絡系列(1)_從初等數學的角度初探神經網絡
- 手把手入門神經網絡系列(2)_74行代碼實現手寫數字識別
- 機器學習系列(4)_機器學習算法一覽,應用建議與解決思路
- 機器學習系列(5)_從白富美相親看特征預處理與選擇(上)
- 機器學習系列(6)_從白富美相親看特征預處理與選擇(下)
- 機器學習系列(7)_機器學習路線圖(附資料)
- NLP系列(2)_用樸素貝葉斯進行文本分類(上)
- NLP系列(3)_用樸素貝葉斯進行文本分類(下)
- NLP系列(4)_樸素貝葉斯實戰與進階