机器学习系列|从白富美相亲看特征预处理与选择
上篇
1. 引言
再過一個月就是春節,相信有很多碼農就要準備歡天喜地地回家過(xiang)年(qin)了。我們今天也打算講一個相親的故事。
講機器學習為什么要講相親?被討論群里的小伙伴催著相親,哦不,催著講特征工程緊啊。只是我們不太敢講這么復雜高深的東西,畢竟工程實踐的經驗太復雜了,沒有統一的好解釋的理論,一般的教材講這方面的內容不多。我們就打算以一個相親的故事為例,串一些特征工程的內容。
2. 故事背景
事先聲明:本故事純屬虛構,如有雷同,純屬巧合!
海歸白富美韓梅梅剛回國,還沒適應工作,母親就催著相親。以父母的關系,他們了解到的適齡單身男青年有100個。要從100個男生中找到1個理想的女婿,可謂百里挑一。韓梅梅母親也擔心女兒相親多了會反感,打算草擬一個相親名單,人數不多。怎么從中挑出優秀男青年就是一個首要的問題。
3. 用機器學習的框架去分析
我們用機器學習的框架分析,在父母眼中,這100個男生最終將會分成兩類:“女婿”(1人)和“非女婿”(99人)。“女婿”和“非女婿”就叫做“標簽”。
而選擇相親名單的標準——如“是否高富帥”、“是否海歸”等等——就叫作“特征”。最好能有一個特征能夠精確定位理想女婿。但這太過理想了。比較現實的方法是從這些“特征”中選擇、拆分、組合出最合適的特征,逐漸逼近我們的標簽,以形成一個精簡的相親名單。而這個過程,就可以理解成特征處理、特征工程的過程。
但是,現實中的特征有千千萬,拆分重組之后特征又是幾何級數地增加,可能永遠也窮舉不完。因此需要有統一客觀的指標來衡量這些特征對標簽的識別能力,以便進一步地深入分析。而評估這些“特征”對我們的“標簽”的有效程度的過程就叫作“特征有效性分析”。
4. 劇情一:韓媽媽的“如意算盤”
為人父母嘛,總是希望女兒嫁得好。韓媽媽的第一反應的就是要找“高富帥”。先她先從這100個男生中挑了挑,符合高富帥這個標準的有5個人。
韓媽媽的如意算盤是這樣的:女婿就從這5個人中挑,概率就是20%,比之前的1%整整提高了20倍,嘿嘿嘿。。。
5. 特征有效性分析
其實,這就韓媽媽不知不覺就走了一個特征有效性分析的過程。我們用圖表演示一下:
?
考慮到各方面的概率,用下圖表示更加直觀:
?
為了表述方便,我們以隨機挑女婿而不考慮任何特征的概率叫做“先驗概率”(1%)。而中間的箭頭中的概率則表示在已經知道樣本所屬特征前提下,屬于女婿還是不屬于女婿的概率,也可以叫作“標簽相對于某個特征的后驗概率”(20%)。而母親的如意算盤就是考慮了上圖中紅圈部分的先驗概率與后驗概率(也可以叫條件概率)。這其實是一種很樸素的特征有效性分析的方法。而且她還做了個更加精確的數量化描述:
我們進一步分析,無論先驗概率還是后驗概率,其本身是0-1之間的一個數,取完對數之后是一個負數,這在現實中不太方便找到其對應的現象解釋。但是概率的倒數一定大于1,取完對數之后就是一個正數,就好找現實解釋了。我們可以把這個“概率倒數的對數”理解成不確定性的指標。于是上式就變成:
6. 劇情二:白富美巧勸慈母
韓媽媽半開玩笑地問韓梅梅:“我們家閨女只挑高富帥的怎么樣?”女兒想了想,說:“如果人家看不上我們怎么辦?”母親笑著說:“我們的家境哪里差了?何況我們的女兒這么優秀,我們還看不上他們呢。”
女兒說:“這就是說明我們雙方不合適了。我們家條件雖然還不錯,但是比下有余、比上不足,跟真正條件好的家庭比較起來我們根本不算事兒。如果一味挑高富帥,他們可能覺得我們只是看中他們的錢,反倒把我們家看低了。相反,要是真要有個真正對我好的男生,比什么都幸福,而他不一定必須是高富帥。畢竟跟我一起相處一輩子的是一個活生生的人,而不是他背后的東西嘛。”
母親很有感慨地說:“嗯,你能這樣想我就放心了。梅梅真是長大了。那么,你打算怎么辦?”女兒說道:“高富帥也得分人,踏實人品好的也可以接觸一下,但是玩心太重不會照顧人的我就不喜歡。估計高富帥里面這兩種人一半一半吧。很多男生并不是高富帥,其中沒準也有合適的人呢。”
7. 特征有效性分析
現在特征的分布發生了新變化。按韓梅梅的分析,高富帥中可能有一半她就不會喜歡,而不是高富帥的男生中沒準有合適的人。我們可以簡單假設高富帥中與非高富帥中各有0.5個合適的人。則分析圖表如下:
現在的情況是,“是不是女婿”的可能性同時分布在“是高富帥”和“不是高富帥”中,單獨衡量“高富帥”本身的后驗概率已經不夠描述特征的整體效果了。我們可以有一個考慮特征整體情況的指標。
還是回到之前的那句話:
“不確定性的減少”可以作為特征有效性分析的一個指標。
我們之前考慮了“是女婿”的不確定性是log(11%),相應的“不是女婿”的不確定性是log(199%),那么標簽“是否女婿”作為整體的平均不確定性則可以理解為這兩個狀態的加權平均:
那么考慮特征(“是否高帥富”)后的標簽(“是否女婿”)的平均不確定性怎么衡量?我們用
X:{“是高富帥”,“不是高富帥”}來表示特征。其實,與上面的思路類似,我們在已知特征為“是高富帥”的前提下,“是否女婿”這個標簽的整體平均不確定性可以用相對“是高富帥”的后驗概率來求出:
在已知特征為“不是高富帥”的前提下,“是否女婿”這個標簽的整體平均不確定性可以用相對“不是高富帥”的后驗概率來求出:
因此,已知特征(無論具體是“是高富帥”還是“不是高富帥”)情況下的標簽平均不確定性為前面兩種情況的加權平均:
所以,考慮特征后,標簽的“不確定性的減少”為:
我們用同樣的方法去評價之前母親設想的女婿只在高富帥中的理想情況(也就是女婿只在高富帥中產生的情況)的互信息
I(Y,X′)=0.04470
平均互信息從理想情況的0.04470下降到0.01230,也就是說原以為特征“是否高富帥”與標簽“是否女婿”的相關性很高,后來發現相關性其實是比較低的。可見理想很豐滿,現實很骨感。
8. 劇情三:白富美重定名單
其實,韓梅梅沒有說出來的話是她有一個青梅竹馬的碼農叫李雷。她出國之前的對他的印象還不錯。如果按母親的標準李雷肯定排除在相親名單外了,而她想給他一個機會。
這時母親說話了:“我們家女兒考慮得挺好,那相親名單你來定吧。”女兒說:“不是高富帥的男生也該好好區分一下,那些品行端正、氣度不凡、踏實肯干的潛力股的男生我也比較欣賞,其他的就暫且不考慮了。”母親說:“就是說可以從高富帥中挑出部分品德好的,還有從不是高帥富的男生中挑出部分潛力股,共同組成一個新的名單,我們的女婿就在這里面了?”女兒不好意思地說:“媽媽您真著急,八字還沒一撇呢。”
接著,韓梅梅母女倆從高富帥中挑了2個口碑不錯的,又從不是高富帥的男生中條了10個很不錯的。最終組成了12人的相親名單。李雷的名字在其中。
9. 拆分重組成為新特征
其實以上韓梅梅母女倆完成了一次特征的拆分與重組過程。具體圖示如下:
這里用“潛帥德”表示韓梅梅對“品行端正、氣度不凡、踏實肯干的潛力股”的特征的描述。
特征進行拆分與重組的過程在特征工程中經常出現。因為當你對特征與標簽的相關性有定量的評估方法后,會篩選出那些不那么顯著的特征(如本例中的“是否高富帥”),然后去分析考核指標這么低的原因,啟發你引入新的特征(如本例中的“是否品德良好”、“是否有潛力”)將原有特征拆分重組,可能會有更好的效果。而這些生成的新特征,又要經過特征有效性分析來最終評估。如此反復迭代。
10. 特征有效性分析
我們用X2來表示新特征,與上面的思路類似,我們計算X2的平均互信息:
與之前的平均互信息
I(Y,X)=0.01230比起來,有了顯著提高。可見新特征X2比之前的特征X更有效。
11. 劇情四:韓媽媽給名單分級
在跟韓梅梅聊完之后,韓媽媽轉念一想:“為什么非要有一份相親名單?可以把這12個人再分成兩類,第一類是高富帥的,先相親。這些覺得不合適后再考慮剩下的10個人啊。”
12. 特征有效性分析
我們繼續分析,用X3來表示新特征,與上面的思路類似,我們計算X3的平均互信息:
與之前的平均互信息
I(Y,X2)=0.03114比起來,又有了一定的提高。可見新特征X3比之前的特征X2更有效。
韓媽媽真是為女兒的相親操碎了心。
13. 劇情五:韓媽媽問計趙媒婆
韓媽媽思索完之后抑制不住內心的興奮,想找人傾訴。這時她正好在路上碰見了趙媒婆。趙媒婆在韓媽媽的老閨蜜圈中享有盛譽,相親非常有經驗。
趙媒婆聽了韓媽媽的訴說后,微微一笑,說:“你這個名單不夠專業。”韓媽媽大為詫異。趙媒婆繼續說:“高、富、帥三個特征本來就是相互獨立的三個特征,你硬生生地綁在一起,多少大好青年被你給甩掉了。后面的潛力股啊、人品端正啊什么的都類似。”韓媽媽恍然大悟:“真是這樣啊。”
趙媒婆說:“其實你這里最大的問題是這些特征的評估都是拍腦袋決定,沒有充分的現實數據做支撐,很可能會犯錯誤的。”韓媽媽暗暗點頭,心生佩服。
趙媒婆接著說:“還有一個問題,你準備了兩份名單,也就是把人群分成了三份,你算平均互信息只能評價整體的,具體到每一份人群你怎么對他們評價?”韓媽媽想了想,說:“我們可以直接用相對于某個具體條件的信息熵啊。”趙媒婆說:“何苦這么麻煩呢?”
韓媽媽聽她話里有話,打算繼續問下去。
14. 評價特征選項的兩個方法
在趙媒婆最后一個問題中,韓媽媽所說的其實是可以計算以下三個值來評估具體的特征選項:
而這三個值在之前計算條件熵H(Y|X3)的過程中就已經計算出來了。所以比較起來應該很方便。
但其實更簡單的方法用他們相對于所需要標簽的后驗概率評價。如下圖紅色的部分,比較大小就可以找出評價較好的特征。
顯然“高富帥德”的評分最高(0.25),“潛帥德”的評分次之(0.05),“不是高富帥德且不是潛帥德”評分最差(0)。符合韓媽媽的預期。
然而,趙媒婆的想說的并不是這種方法,而是邏輯回歸……
15. 劇情六:趙媒婆的數據庫
趙媒婆不等韓媽媽說話,就直接拿出了自己的神器:一個平板電腦。然后打開她的相親數據庫,點了點鼠標,一張巨大的表展現出來。韓媽媽目瞪口呆:“現在媒婆都用高科技了?”趙媒婆傲嬌地說:“那是。”
這張大表是她這么多年來全國各地相親介紹的所有男生信息,分別標注了每個男生的升高、年齡、年薪、長相特點、教育經歷、工作經歷、是否海歸、工作年限、工作公司、工作地點、出身地、是否有戶口、是否公務員、具體職業、行業、性格傾向等等信息。
她還有一張女生信息表,另外一張男生女生相親情況表(相親成功、相親不成、繼續發展、未接觸)。媒婆一一給韓媽媽解釋這些信息。韓媽媽連連驚呼。
趙媒婆接著說道:“我們可以從里面找出跟你女兒情況相近的一些女生信息,再把跟她們相過親的男生找出來,把其中相親成功的歸為一類,剩下的歸為另一類。然后假設男生的每個特征對相親成功都有貢獻,貢獻的權重為wi。我們用邏輯回歸的方法可以求出這些權重,把這些權重大的特征挑出來,你再用它們來找女婿就方便了。”
韓媽媽說:“邏~輯~什么?”趙媒婆說:“高科技了,你不懂的。不過給我干兒子寫了個博客來介紹,你可以看看。”
16. 特征篩選與特征工程工作流
呃,我們什么時候成趙媒婆的干兒子了?先不管這些。邏輯回歸并不是什么高科技,在前面的文章里已有簡單的解釋。我們在這里就補充說明一下為什么可以用權重來衡量特征的貢獻。以下是一個典型的邏輯回歸過程:
我們期望P(z)的概率越大越好,sigmoid函數是個單調遞增函數,所以z越大越好,在所有特征都歸一化的前提下,顯然是權重wi越大越好。因此與wi對應的特征就是我們要尋找的顯著特征。而那些權重小的特征就可以先不考慮了。這就完成了一個最簡單的特征篩選的過程。
當然,這里所說的權重大可以指的是權重的絕對值很大,比如特征“富”的權重是-100,是一個很小的數,但這也就意味著“不富”的權重會很大,以至于顯著影響我們的z的結果。所以這也是一個顯著特征。
需要補充一下的是,在工程實踐中,權重的幅度和正則化也有關系。L1正則化會把特征拉稀疏,會產出一部分0特征。而不是0的那些特征,是有作用的特征。所以L1正則化其實具備一定的特征選擇(feature selection)的作用。尤其是很高維空間的feature,用L1正則化,其實能幫助做一下feature selection的。而L2正則化,則會把各個維度的權重拉平均一些,抑制住各個維度權重幅度的方差。但是抑制歸抑制,最后的權重還是會有大小差異,就像上文說的,絕對值大的權重,對應的特征區分度好一些。
對于那些不夠顯著的特征,我們需要分析一下這個特征的具體情況是怎樣,是否需要對其進行重新拆分與重組,拆分重組后新的特征又可以進行特征有效性分析。如此不斷迭代反復,就可以挑選出比較理想的特征了。
我們用以下整個工作流大致展現這個過程。由于很多內容沒有展開,我們先把名字寫進去,在后續的文章中繼續擴展。
17. 劇情七:韓媽媽新名單塵埃落定
在韓媽媽與趙媒婆的盡心鼓搗下,最終生成了一個只有4個人的相親名單。其中只剩下一名高富帥,另外三人中有一人正是李雷。韓媽媽拿著新名單給女兒看,韓梅梅沉默半晌,心想李雷在四人名單中怎么也能存在,莫非這也是緣分?
18. 小結
本文中主要講了一些特征有效性分析的方法,包括用互信息,平均互信息,條件熵,后驗概率,邏輯回歸權重等方法對特征與標簽的相關性進行了評估。有了這些評估做基礎,可以篩選出顯著的特征,并對對不顯著的特征進行分析、拆分和重組,最終形成新的特征并反復迭代。本文略過了一些特征預處理的方法,并對特征有效性評估的闡述不夠充分,我們將在接下來的部分予以討論。
下篇
1、劇情一:挑螃蟹的秘密
李雷與韓梅梅的關系發展得不錯,趁國慶休假一起來天津玩。今天,李雷十分神秘地請韓梅梅去一家餐館吃螃蟹。韓梅梅大失所望,這個餐館很不起眼,感覺就像路邊的老食堂。菜單都用粉筆寫在黑板上,一點都不高檔。一看價格,滿黃螃蟹120塊錢一只!這也太貴了。
李雷看到了韓梅梅的神情,笑著解釋道:“這家店老板有一個絕活——會看螃蟹。他能保證120塊的螃蟹就是滿黃。如果拆開來不是,這個螃蟹就不要錢,再換一個。靠著老板的絕活,這家店已經是幾十年的老店了,在當地非常有名氣。郭德綱、趙麗蓉這些天津社會名流都來這家店吃過螃蟹。”
韓梅梅將信將疑。拆開螃蟹,飽滿的蟹黃噴薄欲出。韓梅梅邊吃邊驚嘆:“從沒有吃個這么好吃的螃蟹!”
李雷接著說:“老板的絕活密不外傳,幾十年來都自己上貨。雖說是一個大老板,一年到頭滿身海鮮味。而且他也不開分店。”
韓梅梅說:“那是,這么高明的絕活只有他自己知道才能掙錢啊。”這時,韓梅梅拂面而笑,突然想考一考自己的相親對象,說:“李大碼農,你不是做機器學習的嗎?如果要你去用機器學習挑滿黃的螃蟹,你怎么做?”
2. 初步劃定特征的范圍,獲取特征
李雷早就想過這個問題了。長期的職業素養讓他對任何事情都想用機器學習的方法去鼓搗。李雷的基本思路是這樣的,我們盡可能觀察螃蟹更多的特征,從中找出與“螃蟹滿黃”最相關的特征來,幫助我們去判斷。當然特征有非常多,我們可以先頭腦風暴一下:
一些直觀的特征:包括蟹殼的顏色和光澤度、鉗子的大小、肚臍的形狀、螃蟹腿的粗細和長度、眼睛的大小和顏色光澤、螃蟹的品種、重量、體積、腰圍等等……
一些需要在互動過程中觀察到的特征:螃蟹鉗子的力量,對外界刺激的反應,用筷子觸碰螃蟹眼睛后的反應,螃蟹行動的速度……
還有一些外部環境的特征: 收獲螃蟹的季節,培養螃蟹的水域……
韓梅梅插話到:“這么多特征我頭都大了,你還有完沒完?”
其實,如果真要窮舉出所有的特征可能永遠也舉不完。但是我們目的很明確——判斷螃蟹是否是滿黃。所以我們只關心跟這個問題(“標簽”)相關的特征,它們只占所有特征中很小一部分。怕就怕一些糊涂的需求方連目的都不明確就要求一通亂搞,即便出來了一堆結果,也不知道有什么用。
頭腦風暴完之后,很重要的一點就是找到對這個問題有長期經驗的人,虛心向他們學習。人腦其實是一個很好的特征篩選器,這些經驗可以給我們非常多的指導和啟發,極大地減少我們試錯的工作量。比如我們可以直接去找海鮮市場問螃蟹販子,去田間地頭找螃蟹養殖戶,去海鮮飯店去問有經驗的采購員和廚師……他們的最一線的經驗是特征工程中的寶貴財富。
但這里需要考慮將經驗轉換成可量化的指標,才能便于機器學習。比如人們可能會說螃蟹很“活躍”、很“精神”,或者很“慵懶”。這些特征需要轉換成一些可量化指標去衡量,具體怎么轉換也有很大學問。
接下來要考慮的問題是對這些特征的可用性進行簡單的評估。比如:
特征獲取、描述難度
數據的規模
特征的準確率
特征的覆蓋率
其他
我們通過明確目標,頭腦風暴,咨詢專家,特征量化,可用性評估等流程,就基本劃定了特征范圍。
3. 劇情二:“特征預處理”的門道
李雷說完,便拿出自己的平板,給韓梅梅看自己某個項目中搜集的初始特征。這些特征被放在一張巨大的表里。
韓梅梅看著這些密密麻麻的數字,心想:看李雷說得頭頭是道,但還是沒告訴我怎么挑,不能讓他輕易繞過去。
于是她說:“我看你這些特征數據有大有小,有些就是幾萬上下浮動,有些僅僅是小數點后好幾位的微小變化,有些就是在0或1這兩種可能中變化,有些連值都沒有。你這些數據能用嗎?”
李雷說:“不能,要轉換成標準件。”
韓梅梅:“標準件?”
4. “特征標準件”
如果把機器學習過程當做一個加工廠的話,那輸入的數據(特征、標簽)就是原材料,輸出的模型和判斷結果就是產品。并不是胡亂扔進去任何原材料都能加工出合格產品的。原材料需要一個“預處理”過程才能方便地被算法處理。這些預處理后的數據,李雷起了個不夠規范的名字,叫做“特征標準件”。
以二分類問題為例,不同的算法對“特征標準件”的要求是不同的。比如邏輯回歸和神經網絡,比較喜歡歸一化之后在[-1,1]區間內浮動的特征。而貝葉斯方法,喜歡因子化之后的{0,1}分布的二元特征,每個特征只有“是”和“不是”兩種可能的狀態。
5. 連續特征與非連續特征
特征可以分為兩類:“連續特征”和“非連續特征”。
“身高”、“體重”、“成績”、“腰圍”、“長度”、“寬度”、“體積”、“速度”等等,都是連續特征。連續特征能夠比較方便地進行歸一化。歸一化的統一公式如下:
當S=xmax?xmin時,經過處理的數據在區間[-1,1]之間。
當S=σ(所有樣本的標準差)時,經過處理的數據符合標準正態分布,即均值為0,標準差為1
另一方面:“是否高富帥”、“是否白富美”、“螃蟹的品種”、“螃蟹所在的水域”、“收獲螃蟹的季節”等等,都是非連續特征。非連續特征能夠比較方便地進行因子化,或者它本身就是二元特征。方法如下:
特征“收獲螃蟹的季節”:{春,夏,秋,冬} 因子化后的結果為:
-
特征“是否春”:{是,否}
-
特征“是否夏”:{是,否}
-
特征“是否秋”:{是,否}
-
特征“是否冬”:{是,否}
6. 兩類特征的相互轉化
連續特征可以當非連續特征來用,非連續特征可以當連續特征來用。
連續特征可以離散化非連續特征。比如“年齡”作為一個連續特征,假設它的取值范圍是[0,100]。我們可以中間切一刀,比如選擇60(歲)。大于等于60歲的就叫做“老年”,小于60歲的就是“非老年”,這樣就轉化成了一個二元特征了。怎么選擇離散的分離邊界也很有學問。
如果我們中間切兩刀甚至更多刀,比如18(歲)和60(歲)。大于等于60歲的就叫做“老年”,18歲到60歲之間的就叫做“中青年”,小于18歲就叫做“未成年”。然后再把這3類因子化成3個二分類就夠了:“是否老年”、“是否中青年”和“是否未成年”。
非連續特征因子化成二元特征{0,1}后可以直接當做[0,1]之間的連續特征來用。
7. 去除特征之間的共線性
我們在對離散特征因子化過程中細分到二元特征為止即可。那對于二元特征本身能否因子化成兩個特征?比如以下例子:
特征“螃蟹的性別”:{公,母} ,可否轉換為:
-
特征“是否公螃蟹”:{是,否}
-
特征“是否母螃蟹”:{是,否}
這是不行的,因為這兩個特征的信息完全一樣,也叫做共線性。計算這兩個特征之間的條件熵:
H(“是否公螃蟹”|“是否母螃蟹”)=0
也可以用計算條件熵的方法去衡量兩類離散特征的差異性,方便去除共線性關系的特征。
連續特征也有著共線性的情況,比如同一個品種的螃蟹腿的“長度”和“粗細”是共線性關系。也就是說,如果我們知道螃蟹腿的長度是x厘米,那么螃蟹腿的直徑就是kx厘米,k是一個穩定的常數。因此我們只需要螃蟹腿的“長度”這一個特征就夠了。那么連續特征的共線性如何去除?
可以計算兩個變量(x,y)的相關系數:
可以計算這些數據的協方差矩陣,進而求出相關系數矩陣。就可以比較任意兩個特征了。
既然協方差矩陣都求了,那就干脆用主成分分析(PCA)吧,這樣更省事。得到主成分,線性相關的那些量就直接被舍棄了。我們在前文《深度學習與計算機視覺系列(7)_神經網絡數據預處理,正則化與損失函數》 對PCA有相關論述。
感興趣的同學可以試試把上述離散二元特征當做連續變量使用,構造幾個數據,計算其相關系數并進行主成分分析。發現其相關系數就是-1,主成分分析后自動就變成一個主成分了。可見PCA對于連續特征與非連續特征都是去除共線性的通用方法。
8. 缺失值的處理
這個問題現在才講,但實際過程中應該在前期去處理。掌握以下三點就夠了:
如果某個特征的缺失值比較多:可能就直接舍棄。
如果缺失值不是很多,而且是連續特征:可以考慮用回歸方法去擬合,或者直接用眾數、中位數、平均數等具體的值去替代即可。
如果缺失值不是很多,而且是非連續特征:可以嘗試把缺失值當做一個新的類目去處理,可能也揭示了一定的客觀現實。
9. 離群點的分析
對于連續特征,最好看看其在樣本中的分布。如果某些值偏離了主要聚集區域,可能需要單獨抽出來分析,里面可能包含了更多的信息,可以這樣畫圖方便觀察:
10. 特征預處理小結
特征的預處理步驟比較多,相互之間的關系比較復雜。我們畫了一張圖以揭示它們之間的關系:
11. 劇情三:李雷另辟蹊徑挑螃蟹
韓梅梅長嘆一口氣:“終于聽你叨逼叨逼說完了。”
李雷說:“沒辦法啊,這塊工作其實挺多的。我還要好多沒說完……” “你打住”,韓梅梅趕緊說,“我算服了你了。但是李大碼農,你還沒有跟我說你怎么靠這些特征挑螃蟹呢。”
李雷說:“不急,用邏輯回歸……”韓梅梅說:“不要用邏輯回歸,我已經從趙媒婆那知道了。你換個方法,用非連續特征來做。”韓梅梅存心想刁難她的相親對象。
李雷說:“那可以用貝葉斯。”
12. 用貝葉斯方法挑螃蟹
我們的標簽用Y=“是滿黃”來表示,相應的Y=“不是滿黃”。Xi表示所有離散化的二元特征,如X1=“是河蟹”,X2=“是秋季收貨”,X3=”鉗子的力量大”……。于是在已知這些特征的情況下,該螃蟹“是滿黃”的概率如下:
其實,可以直接判斷P(Y|X1,X2,X3...)是否大于1/2即可。因為P(X1,X2,X3...)這一項算起來比較麻煩,我們用以下方法直接把它約掉。
先求出螃蟹“不是滿黃”的概率:
再兩式相處,得到:
這樣就約去了P(X1,X2,X3…)。只需要判斷是否大于1即可。但是,工程上用除法不太方便,兩邊同時取對數log,得到:
到目前為止,以上都是等價變換。
接下來我們引入貝葉斯方法中常用的條件獨立假設:
將它們帶入上式,就變成了:
于是我們得到了一個簡單的求和式,只需要判斷等式右邊求和的結果是否大于0即可。而最關鍵的就是右邊每一項都非常好求!假如訓練集中所有的滿黃螃蟹收集在一起,統計每一個特征出現的次數,除以滿黃螃蟹的總數,就是其相應的條件(后驗)概率了。再統計該特征在非滿黃螃蟹集合中的條件(后驗)概率,二者相除再取對數即可。
13. 用貝葉斯方法進行特征有效性分析
等式右邊作為一個求和式,其中每個求和項的絕對值越大,其對結果的影響越強烈,相對應的特征就是顯著特征。而絕對值比較小的特征就是非顯著特征,剔除掉也不會很明顯地影響結果。這就完成了一個特征篩選的過程。
我們再分析一下各個求和項的結構,里面的概率部分是后驗概率,是特征相對于標簽的后驗概率。
14. 貝葉斯與邏輯回歸之間的關系
我們繼續看看這個求和項,是不是很像邏輯回歸中的求和項?我們如果拿二元特征當做連續變量采用邏輯回歸方法。其判別式如下:
二者的表達式驚人地相似!莫非,二者一模一樣?
感興趣的同學可以自己舉個例子試一下,發現還是有區別的,二者求出來的權重不一樣。產生這樣差別的原因是什么呢?
想必大家都猜到了。就是貝葉斯方法引入的兩個條件獨立假設。正因為這兩個條件獨立假設,貝葉斯方法直接跳過了邏輯回歸中反復迭代用梯度下降法才能求出的各個權重。
因此貝葉斯方法與邏輯回歸的區別就是貝葉斯方法引入了一個更強的附加假設,而且可以直接通過統計結果求權重,而不必用梯度下降法。
所以有些情況下貝葉斯方法求出來的結果不好,就可以考慮考慮是不是條件獨立假設的原因。
因此,可以說“在某種假定下,可以證明:與樸素貝葉斯分類方法一樣,許多神經網絡和曲線擬合算法輸出最大的后驗假定。”——韓家煒:《數據挖掘:概念與技術(第三版)》
15. 劇情四:李雷露餡兒了
韓梅梅聽完,十分感慨地說:“難怪機器學習能挑出正確的結果,難怪趙媒婆用機器學習方法從這么多人中能把你挑出里來。你還是有兩下子嘛。”
“廢話,她是我干媽”,李雷志得意滿,不小心說漏嘴。 韓梅梅:“什么?!”
李雷后悔不已,尷尬地陪著笑臉說道:“梅梅,我錯了,我不該瞞你這么久。”到了這個地步,李雷只能和盤托出了。
16. 數據VS算法
其實李雷早就知道韓媽媽要挑選相親名單,如果按她的標準,李雷根本沒法進入名單中。而李雷也猜想她會去找趙媒婆。他就早早地聯系趙媒婆,跟她推銷他的機器學習方法。趙媒婆終于被李雷忽悠動心了。李雷就幫她開發那個相親算法。但其實趙媒婆的樣本數量不夠,特征數量卻非常多,肯定會過擬合。李雷就跟她說他會多找一些相親的數據。李雷能從哪里找啊,只能發動周圍的同學,讓他們找他們觀察到的情侶案例。而在這些群體中,恰好中學、大學是同學的情侶比率非常高,而且很多男方是碼農。而李雷剛好符合這個條件,李雷的評分就非常高了。
因為樣本選擇本來就代表性不足,沒能覆蓋更多的青年群體,所以還是過擬合,只是偏向了李雷這邊的概率而已。
可見,做機器學習雖然看起來比較炫酷的是算法,但真正關鍵的是數據。數據決定了你結果的上限,而算法只是盡可能逼近這個上限。而這點李雷并沒有告訴趙媒婆。
對樣本情況的分析要在特征優化過程中尤其注意。整個流程圖如下:
17. 特征選擇的局限性
而且,李雷并不覺得感情這樣復雜的東西能夠用趙媒婆那些量化的指標衡量好的。房子、車子、學歷、文憑這些并不能衡量兩個人之間的感情。一些非常重要的特征是難以量化的,比如兩個人的“三觀”、兩個人對待感情的態度、兩個人相互相處的獨一無二的經歷、兩個人刻骨銘心的情感體驗、那種兩個人相信能夠一輩子都在一起的篤定的感覺……這些至關重要的特征極其復雜,卻非常難以量化。所以對于這類問題,機器學習的能力還是很有限的。
18. 劇情五:尾聲
韓梅梅聽完李雷,既生氣,又好笑,還有一點點小感動:這小子為了感情還是蠻拼的。
一段沉默之后,韓梅梅笑著對李雷說:“好了好了,我不怪你了。”李雷長舒一口氣。
韓梅梅繼續說:“問個挑螃蟹的問題。你剛才選了這么多特征。為什么不考慮用B超直接照一下,看看里面什么東西不就成了嗎?”
李雷一聽,猶如當頭一棒,整個腦子都被草泥馬占滿了:“我去,這么簡單的方法我怎么想不到?!”
韓梅梅這時已經笑得肚子痛了,根本說不上話。
李雷吐槽到:“梅梅,你太厲害了。我覺得機器永遠也學不到的兩樣東西就是人類的情感和腦洞啊!”
19. 后記
其實博主也沒有喪心病狂到抓只螃蟹去照B超,只是自己被這個想法逗樂了,大家開心就好哈。O(∩_∩)O~~
如果真要死磕,據說B超的穿透力比較弱,對骨骼、空氣等很難達到深部,因此難以成像。但是通過聲波的回聲來判斷,也是一個思路。就像有些人可以通過拍打西瓜聽聲音來判斷它甜不甜的道理一樣。
如果不用機械波而用電磁波,比如X射線,估計哪怕能看到螃蟹滿黃顧客也不會吃了。顧客也會擔心放射殘留的。CT應該好些,但是貴呀。一套設備下來,螃蟹估計也不止120塊錢了吧。沒玩過CT,不知道成本多少……總之還是要考慮獲取特征的成本的。
原文發布時間為:2016-01-15
本文來自云棲社區合作伙伴“大數據文摘”,了解相關信息可以關注“BigDataDigest”微信公眾號
總結
以上是生活随笔為你收集整理的机器学习系列|从白富美相亲看特征预处理与选择的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《数据科学:R语言实现》——第1章 R
- 下一篇: 《NLTK基础教程——用NLTK和Pyt