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