【編者按】針對Quora上的一個老問題:不同分類演算法的優勢是什麼?Netflix公司工程總監Xavier Amatriain近日給出新的解答,他根據奧卡姆剃刀原理依次推薦了邏輯迴歸、SVM、決策樹整合和深度學習,並談了他的不同認識。他並不推薦深度學習為通用的方法,這也側面呼應了我們之前討論的問題:深度學習能否取代其他機器學習演算法。
不同分類演算法的優勢是什麼?例如有大量的訓練資料集,上萬的例項,超過10萬的特徵,我們選擇哪種分類演算法最好?Netflix公司工程總監Xavier Amatriain認為,應當根據奧卡姆剃刀原理(Occam’s Razor)來選擇演算法,建議先考慮邏輯迴歸。
選擇一個合理的演算法可以從很多方面來考察,包括:
- 訓練例項的數量?
- 特徵空間的維度?
- 是否希望該問題線性可分?
- 特徵是否是獨立的?
- 是否預期特徵能夠線性擴充套件?
- 過度擬合是否會成為一個問題?
- 系統在速度/效能/記憶體使用等方面的要求如何?
邏輯迴歸
作為一般的經驗法則,我建議先考慮邏輯迴歸(LR,Logistic Regression)。邏輯迴歸是一個漂亮乖巧的分類演算法,可以訓練你希望的特徵大致線性和問題線性可分。你可以很容易地做一些特徵引擎把大部分的非線性特徵轉換為線性。邏輯迴歸對噪聲也相當強勁,能避免過度擬合,甚至使用L2或L1正則化做特徵選擇。邏輯迴歸也可以用在大資料場景,因為它是相當有效的,並且可以分佈使用,例如ADMM。 邏輯迴歸的最後一個優點是,輸出可以被解釋為概率。這是一個好的附加作用,例如,你可以使用它排名而不是分類。
即使在你不希望邏輯迴歸100%地工作,你也可以幫自己一個忙,在使用“票友”辦法之前,執行一個簡單的L2正則化邏輯迴歸作為基線。
好了,現在你已經設定邏輯迴歸基線,下一步你應該做的,我基本上會推薦兩個可能的方向:支援向量機(SVM)或者決策樹整合。如果我不知道你的具體問題,我肯定會選擇後者,但我將開始描述為什麼SVM可能是一個值得考慮的方法。
支援向量機
支援向量機使用一個與LR不同的損失函式(Hinge)。它們也有不同的解釋(maximum-margin)。然而,在實踐中,用線性核函式的SVM和邏輯迴歸是沒有很大的不同的(如果你有興趣,你可以觀察Andrew Ng在他的Coursera機器學習課程如何從邏輯迴歸中驅動SVM)。用SVM代替邏輯迴歸的一個主要原因可能是因為你的問題線性不可分。在這種情況下,你將不得不使用有非線性核心的SVM(如RBF)。事實上,邏輯迴歸也可以伴隨不同的核心使用,但出於實際原因你更可能選擇SVM。另一個使用SVM的相關理由可能是高維空間。例如,SVM已經被報導在工作文字分類方面做得更出色。
不幸的是,SVM的主要缺點是,它們的訓練低效到痛苦。所以,對於有大量訓練樣本的任何問題,我都不會推薦SVM。更進一步地說,我不會為大多數“工業規模”的應用程式推薦SVM。任何超出玩具/實驗室的問題可能會使用其他的演算法來更好地解決。
決策樹整合
第三個演算法家族:決策樹整合(Tree Ensembles)。這基本上涵蓋了兩個不同的演算法:隨機森林(RF)和梯度提升決策樹(GBDT)。它們之間的差異隨後再談,現在先把它們當做一個整體和邏輯迴歸比較。
決策樹整合有超過LR的不同優勢。一個主要優勢是,它們並不指望線性特徵,甚至是互動線性特性。在LR裡我沒有提到的是,它幾乎不能處理分類(二進位制)特性。而決策樹整合因為僅僅是一堆決策樹的結合,可以非常好地處理這個問題。另一主要優點是,因為它們構造了(使用bagging或boosting)的演算法,能很好地處理高維空間以及大量的訓練例項。
至於RF和GBDT之間的差別,可以簡單理解為GBDT的效能通常會更好,但它們更難保證正確。更具體而言,GBDT有更多的超引數需要調整,並且也更容易出現過度擬合。RF幾乎可以“開箱即用”,這是它們非常受歡迎的一個原因。
深度學習
最後但並非最不重要,沒有深度學習的次要參考,這個答案將是不完整的。我絕對不會推薦這種方法作為通用的分類技術。但是,你可能會聽說這些方法在某些情況下(如影象分類)表現如何。如果你已經通過了前面的步驟並且感覺你的解決方案還有優化的空間,你可能嘗試使用深度學習方法。事實是,如果你使用一個開源工具(如Theano)實現,你會知道如何使這些方法在你的資料集中非常快地執行。
總結
綜上所述,先用如邏輯迴歸一樣簡單的方法設定一個基準,如果你需要,再使問題變得更加複雜。這一點上,決策樹整合可能正是要走的正確道路,特別是隨機森林,它們很容易調整。如果你覺得還有改進的餘地,嘗試GBDT,或者更炫一些,選擇深度學習。
你還可以看看Kaggle比賽。如果你搜尋關鍵字“分類”,選擇那些已經完成的,你能找到一些類似的東西,這樣你可能會知道選擇一個什麼樣的方法來贏得比賽。在這一點上,你可能會意識到,使用整合方法總容易把事情做好。當然整合的唯一問題,是需要保持所有獨立的方法並行地工作。這可能是你的最後一步,花哨的一步。
編輯點評:Xavier Amatriain不推薦深度學習為通用演算法的理由,並不能說是因為深度學習不好,而是因為深度學習會增加複雜性及成本,卻無法保證在所有的場景表現出比邏輯迴歸、SVM及決策樹整合更優的結果。事實上,Xavier Amatriain的Netflix團隊早已開始研究人工神經網路和深度學習技術,希望藉助AWS雲服務和GPU加速的分散式神經網路,分析網民最愛看的電影電視劇,實現節目的個性化推薦。
Netflix推薦系統架構(圖片來自Xavier Amatrain參與撰寫的Netflix官方部落格)
此後,Xavier Amatriain還分享了Netflix機器學習實踐的十大經驗教訓,大致包括:
- 更多的資料需要與更好的模型之匹配
- 你可能不需要所有的大資料
- 更復雜的模型未必意味著更好的結果,可能是你的樣本集太簡單
- 要充分考慮你的訓練資料
- 學會處理偏差
- UI是聯絡演算法和最重要的使用者之間唯一通道
- 正確的演進方式比資料和模型更重要
- 分散式演算法重要,知道在哪個層級使用它更重要
- 選擇合適的度量自動超引數優化
- 並非所有的事都能離線完成,近線處理也是一種選擇