一文講解各種機(jī)器學(xué)習(xí)算法選型思路
前言
這是知乎上一個(gè)問題:k近鄰、貝葉斯、決策樹、svm、邏輯斯蒂回歸和最大熵模型、隱馬爾科夫、條件隨機(jī)場、adaboost、em 這些在一般工作中分別用到的頻率多大?一般用途是什么?需要注意什么?
這個(gè)問題有1.3萬關(guān)注,50個(gè)回答,我知乎賬號(hào)解封還有幾個(gè)小時(shí),先寫在公眾號(hào)上,正好前面寫過兩個(gè)問題,很多思路都是一致的,今天當(dāng)個(gè)縫合怪,這個(gè)系列就完整了。
引入
時(shí)間來到了2021年,神經(jīng)網(wǎng)絡(luò)從沒人考慮,到現(xiàn)在已經(jīng)開始獨(dú)領(lǐng)風(fēng)騷,各個(gè)領(lǐng)域,各個(gè)場景,NN都變得不可或缺。
我們把這一些算法分分類,大體可以分為有監(jiān)督和無監(jiān)督。大部分回答也是集中在有監(jiān)督的選型上,無監(jiān)督確實(shí)在實(shí)際工作應(yīng)用中,因?yàn)楦鞣N問題沒有像有監(jiān)督那樣好施展拳腳。
我們拋開他們復(fù)雜的外衣,抽絲剝繭,找到他們應(yīng)用的關(guān)鍵差異吧。沒有最牛的算法,只有最合適的場景。
我還是出那道最經(jīng)典的題目吧。
題目:請使用一個(gè)邏輯回歸的模型,建模一個(gè)身材分類器,身材分偏胖和偏瘦兩種,輸入的特征有身高和體重。
數(shù)據(jù)集大概長這樣:
我們從邏輯回歸開始講起,順便引入一個(gè)貫穿全文非常關(guān)鍵的概念,非線性。
LR
邏輯回歸解決的方法就是我拍兩個(gè)系數(shù)加權(quán),使用 sigmoid(ax+by+c)就搞定了。LR建模的過程,就是學(xué)習(xí)到a b c 三個(gè)參數(shù)的過程。
LR在早期工業(yè)界,有著舉足輕重的地位,你可能聽說過鳳巢上億特征解決個(gè)性化廣告的傳說。
那大概是LR這輩子的高光時(shí)刻吧。他就是搞了上億個(gè)這樣的參數(shù),然后算了個(gè)加權(quán)求和,通過sigmoid轉(zhuǎn)化為概率。看起來這個(gè)模型,有多少人力,就有多少智能,非常接近人工智能的本質(zhì)了,我只要能把特征搞出來,權(quán)重算出來,那問題不就迎刃而解了嗎?
事實(shí)上,我們很難單純地從身高和體重決策出一個(gè)人的身材,你說姚明體重280斤,他真的一定就胖嗎??別忘了他身高有226公分的。
這組數(shù)據(jù)可能超出了你的認(rèn)知,只看數(shù)據(jù)不看照片,一下子不好說他是胖還是瘦。(其實(shí)挺胖的哈哈)
嗯,這個(gè)你看到那組數(shù)據(jù),不好一下子說出來的感覺,就是機(jī)器學(xué)習(xí)里面非常關(guān)鍵的概念,“非線性”。
這個(gè)問題不是那么好“線性“解決的,線性解決的意思就是我拍兩個(gè)系數(shù)加權(quán)在原始特征x和y上,使用 sigmoid(ax+by+c)就搞定了。
解決的方法有兩個(gè):
1.升級(jí)模型,把線性的邏輯回歸加上kernel來增加非線性的能力。我們使用這個(gè)模型 sigmoid(ax+by+kx*y^(-2)+c),這個(gè)模型通過多項(xiàng)式核方法的升級(jí),解決了低維空間線性模型不太好解決的問題。
2.特征工程,掏出體檢報(bào)告上的BMI指數(shù),BMI=體重/(身高^2)。這樣,通過BMI指數(shù),就能非常顯然地幫助我們,刻畫一個(gè)人身材如何。甚至,你可以拋棄原始的體重和身高數(shù)據(jù)。
類似的問題還有樸素貝葉斯和SVM。
貝葉斯
大家接觸樸素貝葉斯估計(jì)都是從文本分類的任務(wù)開始的。教科書上非常常講的垃圾郵件分類例子。
樸素貝葉斯作為經(jīng)典的統(tǒng)計(jì)機(jī)器學(xué)習(xí)方法,根正苗紅的貝葉斯原理的應(yīng)用,是最最直觀,最最樸素和最最快的算法。
還是用我上面講的例子,樸素貝葉斯解決這個(gè)問題怎么做的呢?
我只需要算一個(gè)這樣的貝葉斯公式就好了
p(類別|特征) = p(特征|類別)*p(類別)/p(特征)
特征就是身高、體重,類別就是身材。
最后三項(xiàng),對應(yīng)著用身高體重身材的等維度的統(tǒng)計(jì)概率,都是可以在數(shù)據(jù)集中統(tǒng)計(jì)出來的,貝葉斯模型訓(xùn)練的過程,就是算這些各種形式概率表達(dá)式的過程。這樣,我就把預(yù)測變成了查表連乘的過程,查表是計(jì)算機(jī)中最快的操作,意味著他也是推斷最快的模型。
樸素貝葉斯假設(shè)各特征之間的條件獨(dú)立性,即
p(身高、體重|身材) = p(身高|身材)*p(體重|身材)
也由于他的過度簡化,導(dǎo)致它幾乎只在特定場景應(yīng)用了,比如特別簡單的文本分類就比較適合樸素貝葉斯。
SVM
支持向量機(jī)也是線性的模型。
SVM應(yīng)該是學(xué)術(shù)界非常喜歡的模型,他有著分類器最美好的愿望,在特征空間里畫一個(gè)平面,把樣本點(diǎn)劃分開,這個(gè)模型算是把可視化角度可解釋性拉滿了。
往往事與愿違,很多并不是線性可分的,你沒辦法簡單的畫一個(gè)超平面。你需要畫一個(gè)很曲折的東西,才能把他們分好。
回到剛才的身材分類器的例子上,如果你沒有BMI指數(shù),和有BMI指數(shù),SVM的超平面截然不同。
有BMI指數(shù)的話,我在一維度坐標(biāo)軸上畫一個(gè)點(diǎn)就能解決。
要是沒有BMI指數(shù)的話。你也只能像LR那樣,通過核方法來解決了。在方式一我們使用了核方法給這些模型升維,方式二使用了特征方法。
要知道天下沒有免費(fèi)的午餐,在你使用核方法升維的時(shí)候,實(shí)際很難精煉出恰好是x*y^(-2)這樣的多項(xiàng)式表達(dá),你肯定是一股腦地把x*y,x^2*y, x*y^2 這些項(xiàng)都扔進(jìn)去了。
決策樹
這么暴力的操作,有兩個(gè)問題,一是共線性,二是噪聲。
第一、共線性的意思是幾個(gè)項(xiàng)表達(dá)的含義是趨同的,保持了很強(qiáng)的線性關(guān)系,對于邏輯回歸是致命的問題,因?yàn)樗麕砹藱?quán)重的不穩(wěn)定,要知道邏輯回歸權(quán)重可是暗示了特征重要性的。還會(huì)破壞樸素貝葉斯的基本假設(shè)。這些都是有副作用的。
(要是你對這段話,不好理解的話,仔細(xì)學(xué)習(xí)下邏輯回歸模型和共線性的理論,此處不單獨(dú)展開)
第二、噪聲讓你的分類器學(xué)習(xí)到了一些不好的東西,對你的決策沒有產(chǎn)生泛化的貢獻(xiàn),反而帶跑偏你的模型,學(xué)習(xí)到了一些不是知識(shí)的邊邊角角。
而有一些模型,他們天然可以解決這些問題。
典型的就像決策樹和神經(jīng)網(wǎng)絡(luò)。
決策樹的優(yōu)點(diǎn)
1.天然的魯棒性,能自動(dòng)從異常點(diǎn),缺失值學(xué)到信息。不需要?dú)w一化。直接上手一把梭哈。
2.樹可以半自動(dòng)化地完成一些特征非線性表達(dá)的工作,而且基于貪心切分+采樣等抗過擬合手段,能比較好的挖掘數(shù)據(jù)的非線性。
3.樹的可解釋性很好,能生產(chǎn)特征重要性,幫助你理解數(shù)據(jù),改善特征工程。一個(gè)經(jīng)典的套路是思考topN特征背后的邏輯,并圍繞他們進(jìn)行特征工程。
神經(jīng)網(wǎng)絡(luò)
NN模型也有一些天然的優(yōu)點(diǎn):
1.全自動(dòng)化的特征工程和登峰造極的非線性表達(dá)能力,在數(shù)據(jù)表征范式統(tǒng)一,語義含義統(tǒng)一的稠密數(shù)據(jù)上(典型文本圖像)上,NN一個(gè)打十個(gè)。另外,典型的像ID序列這種,人很難做出花來。也就是Bag of words或者借用embedding表達(dá)一下,還有一半是NN的功勞。
2.NN模型容量極大,在數(shù)據(jù)量的加持上,放大了1的優(yōu)勢。
但是看起來樹模型的優(yōu)點(diǎn)在其他模型也有,他們跟SVM和LR這些模型比又有啥區(qū)別呢?
1.第一,這些模型獲取非線性的方式太粗暴了,有種大炮打蚊子的感覺。依靠kernel強(qiáng)行把VC維提高,帶來的噪聲特別多,有用信息很少。第二,kernal是有先驗(yàn)的,很容易被人設(shè)的參數(shù)帶跑偏。這在實(shí)際業(yè)務(wù)數(shù)據(jù)中是非常致命的。
2.理論上LR+完美的特征工程可以很強(qiáng),但是太難了,又不是人人都是特征工程大師。早期鳳巢億級(jí)特征跑LR效果特別好逐漸成為傳說。
給你們整個(gè)表吧
優(yōu)勢 | 劣勢 | |
---|---|---|
LR等 |
速度極快,可解釋性普遍很高。 |
無非線性,依賴kernel, 人工特征工程。 |
決策樹 | 1.魯棒,異常點(diǎn),缺失值都是可以學(xué)習(xí)的信息 2.適中的非線性能力,在一定范圍內(nèi)是優(yōu)勢3.可解釋性很好,可以幫你優(yōu)化特征工程 |
1.非線性表達(dá)能力有限,很難在文本圖像上有用。 2.數(shù)據(jù)量帶來的邊際增益不大,容易觸及天花板。 |
NN | 1.全自動(dòng)化的特征工程 2.模型容量大,可以利用數(shù)據(jù)量的優(yōu)勢 |
1.異常值敏感,依賴手動(dòng)處理 2.不可解釋,改進(jìn)迭代的措施和結(jié)果的路徑太遠(yuǎn)。3.過強(qiáng)的非線性中隱含過擬合和噪音。 |
橫向?qū)Ρ?/h3>
我把之前用過的圖再改進(jìn)一下。
這個(gè)圖表達(dá)意思是,y軸是人的認(rèn)知可解程度,對應(yīng)著就是特征工程的難度和可行性。x軸是數(shù)據(jù)的非線性。
經(jīng)常調(diào)侃的人工智能,就是有多少人工,就有多少智能,就是線性模型因人工特征工程發(fā)揮的空間。隨著數(shù)據(jù)非線性的提高,特征工程難度的增大,LR線性模型的用武之地就越來越小。反而逐漸決策樹,神經(jīng)網(wǎng)絡(luò)等非線性模型開始大展身手。
回到問題,這些模型使用的頻率,大概也和各自的圖中面積差不多一致了。神經(jīng)網(wǎng)絡(luò)在工業(yè)界,已經(jīng)占據(jù)了半邊天,決策樹占據(jù)了剩下的絕大部分,還有一點(diǎn)點(diǎn)場景,因?yàn)樘厥庑?,仍舊用著LR等模型。