「神經網路」能否代替「決策樹演算法」?
這個問題可以從幾個維度來分析。但先要說明決策樹就是決策樹,隨機森林和xgboost的效能提升主要是來自於整合學習。所以,我們擴充套件一下題目把對比延伸到:
單棵決策樹,如比較常見的C4.5等
以決策樹為基模型的整合學習演算法(Ensemble Tree),如隨機森林,gradient boosting,和xgboost
神經網路,包括各種深度和結構的網路
我的看法是,單棵決策樹的用途已經比較有限了,已經基本被整合決策樹代替。而決策樹整合模型和神經網路有不同的使用場景,不存在替代一說。給出一個較為通用的看法僅供參考:
如果不強調絕對的解釋度,儘量避免單棵決策樹,用整合樹模型
在整合數模型中,優先推薦使用xgboost
在中小資料集上,優先選擇整合樹模型。大資料集上推薦神經網路
在需要模型解釋度的專案上,優先使用樹模型
在專案時間較短的專案上,如果資料品質低(大量缺失值、噪音等),優先使用整合樹模型
在硬體條件有限及機器學習知識有限的前提下,優先選擇樹模型
對於結構化較高的資料,尤其是語音、圖片、語言,優先使用神經網路模型(往往其資料量也較大)
用個不恰當的比喻,整合樹模型就像Python,而神經網路就像C++。前者簡單粗暴效果好,容易上手優點多,後者比較精貴更為複雜但嚴肅專案上潛力很大。如果你願意好好學習資料結構、記憶體分配和要命的指標,C++幾乎無所不能。但如果你只打算寫個簡單的網路爬蟲,Python十行就可以搞定。
單棵決策樹 vs. 整合學習
決策樹是1963年被 Morgan和Sonquist提出的[5],通過類樹的結構實現分類和迴歸。我們一般認為決策樹模型:
易於使用和解釋[6],單棵的決策樹很容易進行視覺化和規則提取
可以自動實現特徵選擇[3] - 通過計算節點分裂時"不純度的降低"(impurity reduction) 和剪枝(pruning)
預測能力有限,無法和強監督學習模型相提並論[6]
穩定性低(stability)方差高(variance),資料擾動很容易造成決策樹表現有很大的變化[1, 6]
隨機森林是Breiman提出的[10],模型使用整合的學習來降低單棵決策樹中的高方差(high variance)從而提高了整體的預測能力。而gradient boosting machine(GBM) [9]和xgboost [8]分別是在2001年和2014年提出的。鑑於兩者比較相似放在一起討論,這兩個模型:
和隨機森林的並行學習(parallel learning)不同,使用序列學習(sequential learning)不斷地提高的模型的表現能力降低偏差(bias)
在進行預測分類的時候非常快且對於儲存空間的要求低[3]
boosting這個學習方法可以看成一種L1正則化來防止過擬合,因此模型不容易擬合[3]。Python工具庫scikit-learn也提到過其不容易過擬合[2],用較多的基學習器也不礙事
單純對比GBM和xgboost的話,它們的分類效能接近,xgboost有一個額外的正則項進一步降低過擬合。而xgboost的速度更快[4],往往更適合較大的資料集
根據各種各樣實踐和研究來看,隨機森林、GBM和xgboost都明顯優於普通的單棵決策樹,所以從這個角度來看,單棵決策樹可以被淘汰了。
而單棵決策樹最大的護城河在於,它可以被很輕鬆的視覺化甚至是提取規則分類規則。而整合學習在這一點是很難做到的[34]。而可解釋化對於工業界很多時候是很重要的,從這個角度來看,決策樹還有一點點立身之本。但這個使用的前提是,一定一定要確定決策樹的表現不錯(比如檢視交叉驗證的結果)再來視覺化和規則提取,不然很有可能提取到無效甚至是錯誤的規則。
隨機森林的作者曾經實現過視覺化,但遠不如決策樹直觀,xgboost支援單棵樹的視覺化。從某個角度上來看,或許對xgboost中較為可靠和穩定的單棵樹進行視覺化可以徹底淘汰決策樹。
整合樹模型 vs. 神經網路
神經網路已經是我們很熟悉的演算法了,最大能力就是從複雜的資料中進行特徵表示,也被認為可以近似表示任何函式(假設有特定多的node) [3],現在如此火爆的深度學習就是深度較大的神經網路的特定叫法。神經網路和整合樹模型在以下幾點上有較大的不同:
從資料量上來討論:神經網路往往需要較大的數量,而小資料集上樹模型有明顯的優勢。常常有人問,多小才算小?這也同時需要取決於特徵的數量。但一般來說,幾百幾十個資料的情況下神經網路很難表現良好。
從特徵工程角度看:神經網路需要更苛刻的資料準備工作,而樹模型一般不需要以下步驟:(i) 缺失資料彌補(missing value imputation) (ii) 資料型別轉化(categorical to numerical):把類別資料變為數字型 (iii) 資料縮放(data scaling):把不同範圍的資料歸一到[0,1]或者投射到正態分佈上 (iv) 更多的引數調整:比如初始化權重,比如選擇合適學習率等
從調參難度來看:整合樹模型遠低於神經網路。大部分的整合樹模型也僅需要:(i)基學習器數量 (ii) 考慮的特徵數 (iii) 最大深度 等。神經網路的調參慘劇已經沒什麼好說的,這點上和樹模型差距非常大。
從模型解釋度來看:整合樹模型的解釋度一般更高,比如可以自動生成特徵重要性(feature importance)。神經網路的特徵雖然也可以一定程度上進行分析,但不大直觀。再早年間,在神經網路上使用包裹式(wrapper)方法,每次加1或者減1個特徵進行特徵排序也曾存在過,遠不如整合樹模型的嵌入式(embedded)特徵選擇來的方便和直觀。
從模型預測能力來看:拋去調參的難度差異不提,大中型資料上的表現較為接近。隨著資料量增大,神經網路的潛力越來越大
從專案週期來看:因為在各個方面神經網路都需要更多的時間,因此其需要的總時間往往遠大於決策樹整合,更別提還需要很好的硬體支援,如GPU。
一般來說,在小資料量多特徵下,整合的樹模型往往優於神經網路。隨著資料量增大,兩者表現趨於接近,隨著資料量繼續上升,神經網路的優勢會逐步體現。這個跟很多答主提到的一樣:隨著資料量上升,對模型能力的要求增加而過擬合的風險降低,神經網路的優勢終於有了用武之地而整合學習的優勢降低。
總結
綜上來看,大部分專案建議使用整合決策樹,首推xgboost,速度快效果好用時少。特定的複雜且資料量大的專案,建議還是老老實實的為神經網路調參,拿出debug C++ pointer的精神來。
所以暫時來看,已經被替代的是單棵決策樹,而整合決策樹還非常重要甚至變得更為重要。在短時間內,看不到整合決策樹模型被替代的可能 ʕ•ᴥ•ʔ
* 另推薦一篇有趣但有點過時的文章[7],其中對比了各種各樣的演算法並給出作者的分析。
原文:https://weibo.com/ttarticle/p/show?id=2309404213436883035081#_0
via:全球人工智慧
End