神經網路能否代替決策樹演算法?
現在決策樹(xgb、隨機森林等)普遍運用於數據挖掘比賽中,很少見使用神經網路,那麼問題來了能否用神經網路代替決策樹?以及如何代替呢?
以及什麼樣結構的神經網路適合代替決策樹呢?
感謝各位大佬指點迷津
替代不了,決策樹是一種先進生產力,能夠在中等規模數據上低難度獲得較好的模型。
這是因為樹類的幾大能力:
1 數據不需精心歸一化,這個在神經網路領域是不行的,輕則效果不好,重則分分鐘梯度給你nan
2 離散特徵連續特徵無腦混搭即可使用,神經網路需要精細設計
3 能接受缺失數據,這一點神經網至今為止沒有好的解決方案
4 超參意義簡明易調
5 一定的「可解釋」性,當然 樹太多了也不行
這個問題可以從幾個維度來分析。但先要說明決策樹就是決策樹,隨機森林和xgboost的性能提升主要是來自於集成學習。所以,我們擴展一下題目把對比延伸到:
- 單棵決策樹,如比較常見的C4.5等
- 以決策樹為基模型的集成學習演算法(Ensemble Tree),如隨機森林,gradient boosting,和xgboost
- 神經網路,包括各種深度和結構的網路
我的看法是,單棵決策樹的用途已經比較有限了,已經基本被集成決策樹代替。而決策樹集成模型和神經網路有不同的使用場景,不存在替代一說。給出一個較為通用的看法僅供參考:
- 如果不強調絕對的解釋度,盡量避免單棵決策樹,用集成樹模型
- 在集成數模型中,優先推薦使用xgboost
- 在中小數據集上,優先選擇集成樹模型。大數據集上推薦神經網路
- 在需要模型解釋度的項目上,優先使用樹模型
- 在項目時間較短的項目上,如果數據質量低(大量缺失值、噪音等),優先使用集成樹模型
- 在硬體條件有限及機器學習知識有限的前提下,優先選擇樹模型
- 對於結構化較高的數據,尤其是語音、圖片、語言,優先使用神經網路模型(往往其數據量也較大)
用個不恰當的比喻,集成樹模型就像Python,而神經網路就像C++。前者簡單粗暴效果好,容易上手優點多,後者比較精貴更為複雜但嚴肅項目上潛力很大。如果你願意好好學習數據結構、內存分配和要命的指針,C++幾乎無所不能。但如果你只打算寫個簡單的網路爬蟲,Python十行就可以搞定。
1. 單棵決策樹 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這個學習方法可以看成一種 正則化來防止過擬合,因此模型不容易擬合[3]。Python工具庫scikit-learn也提到過其不容易過擬合[2],用較多的基學習器也不礙事
- 單純對比GBM和xgboost的話,它們的分類性能接近,xgboost有一個額外的正則項進一步降低過擬合。而xgboost的速度更快[4],往往更適合較大的數據集
根據各種各樣實踐和研究來看,隨機森林、GBM和xgboost都明顯優於普通的單棵決策樹,所以從這個角度來看,單棵決策樹可以被淘汰了。
而單棵決策樹最大的護城河在於,它可以被很輕鬆的可視化甚至是提取規則分類規則。而集成學習在這一點是很難做到的[34]。而可解釋化對於工業界很多時候是很重要的,從這個角度來看,決策樹還有一點點立身之本。但這個使用的前提是,一定一定要確定決策樹的表現不錯(比如查看交叉驗證的結果)再來可視化和規則提取,不然很有可能提取到無效甚至是錯誤的規則。
隨機森林的作者曾經實現過可視化,但遠不如決策樹直觀,xgboost支持單棵樹的可視化。從某個角度上來看,或許對xgboost中較為可靠和穩定的單棵樹進行可視化可以徹底淘汰決策樹。
2. 集成樹模型 vs. 神經網路
神經網路已經是我們很熟悉的演算法了,最大能力就是從複雜的數據中進行特徵表示,也被認為可以近似表示任何函數(假設有特定多的node) [3],現在如此火爆的深度學習就是深度較大的神經網路的特定叫法。神經網路和集成樹模型在以下幾點上有較大的不同:
- 從數據量上來討論:神經網路往往需要較大的數量,而小數據集上樹模型有明顯的優勢。常常有人問,多小才算小?這也同時需要取決於特徵的數量。但一般來說,幾百幾十個數據的情況下神經網路很難表現良好。
- 從特徵工程角度看:神經網路需要更苛刻的數據準備工作,而樹模型一般不需要以下步驟:
- 缺失數據彌補(missing value imputation)
- 數據類型轉化(categorical to numerical):把類別數據變為數字型
- 數據縮放(data scaling):把不同範圍的數據歸一到[0,1]或者投射到正態分布上
- 更多的參數調整:比如初始化權重,比如選擇合適學習率等
- 從調參難度來看:集成樹模型遠低於神經網路。大部分的集成樹模型也僅需要:(i)基學習器數量 (ii) 考慮的特徵數 (iii) 最大深度 等。神經網路的調參慘劇已經沒什麼好說的,這點上和樹模型差距非常大。
- 從模型解釋度來看:集成樹模型的解釋度一般更高,比如可以自動生成特徵重要性(feature importance)。神經網路的特徵雖然也可以一定程度上進行分析,但不大直觀。再早年間,在神經網路上使用包裹式(wrapper)方法,每次加1或者減1個特徵進行特徵排序也曾存在過,遠不如集成樹模型的嵌入式(embedded)特徵選擇來的方便和直觀。
- 從模型預測能力來看:拋去調參的難度差異不提,大中型數據上的表現較為接近。隨著數據量增大,神經網路的潛力越來越大
- 從項目周期來看:因為在各個方面神經網路都需要更多的時間,因此其需要的總時間往往遠大於決策樹集成,更別提還需要很好的硬體支持,如GPU。
一般來說,在小數據量多特徵下,集成的樹模型往往優於神經網路。隨著數據量增大,兩者表現趨於接近,隨著數據量繼續上升,神經網路的優勢會逐步體現。這個跟很多答主提到的一樣:隨著數據量上升,對模型能力的要求增加而過擬合的風險降低,神經網路的優勢終於有了用武之地而集成學習的優勢降低。
3. 總結
綜上來看,大部分項目建議使用集成決策樹,首推xgboost,速度快效果好用時少。特定的複雜且數據量大的項目,建議還是老老實實的為神經網路調參,拿出debug C++ pointer的精神來。
所以暫時來看,已經被替代的是單棵決策樹,而集成決策樹還非常重要甚至變得更為重要。在短時間內,看不到集成決策樹模型被替代的可能 ?????
* 另推薦一篇有趣但有點過時的文章[7],其中對比了各種各樣的演算法並給出作者的分析。
[1] A. Géron, Hands-on machine learning with Scikit-Learn and TensorFlow: concepts, tools, and techniques to build intelligent systems. O"Reilly Media, 2017.
[2] F. Pedregosa, G. Varoquaux, A. Gramfort, V. Michel, B. Thirion, O. Grisel, M. Blondel, P. Prettenhofer, R. Weiss, V. Dubourg and J. Vanderplas, 「Scikit-learn: Machine learning in Python,」 J. Mach. Learn. Res., vol. 12, pp. 2825-2830, 2011.
[3] K. P. Murphy. Machine learning: a probabilistic perspective. MIT press. 2012.
[4] R. Punnoose and P. Ajit, 「Prediction of employee turnover in organizations using
machine learning algorithms,」International Journal of Advanced Research in Artificial Intelligence, vol.5, pp. 22-6, 2016.
[5] J. N. Morgan and J. A. Sonquist, 「Problems in the analysis of survey data, and a
proposal,」 J. AM. Stat. Assoc., vol. 58, pp. 415-434, 1963.
[6] J. Friedman, T. Hastie and R. Tibshirani, The elements of statistical learning. New York: Springer series in statistics, 2001.
[7] S. B. Kotsiantis, 「Supervised Machine Learning: A Review of Classification Techniques,」 Informatica, vol. 31, pp. 249-268, 2007.
[8] T. Chen and C. Guestrin, 「Xgboost: A scalable tree boosting system,」 in Proceedings of the 22nd acm sigkdd international conference on knowledge discovery and data mining, 2016, pp.785-794. ACM.
[9] H. Friedman, 「Greedy function approximation: a gradient boosting machine,」 Ann. Stat., pp. 1189-1232, 2001.
[10] L. Breiman, 「Random forests,」 Machine learning, vol. 45, pp. 5-32. 2001.
不能完全代替。
神經網路尤其是深度神經網路適用的場景是圖片、視頻、音頻、文字這樣的,有大量特徵,每個特徵和最終結果都可能有關但關係又不那麼明顯(所謂從特徵到結果有較大的gap,你用一個像素去判斷手寫數字幾乎就是瞎猜,但是用一個特徵判斷泰坦尼克號乘客的生存情況準確率很有可能高於50%),容易獲得海量數據(10^5甚至10^6以上)的場景。深度神經網路可以從大量特徵中提取更高級的特徵,海量數據可以減弱過擬合。
而傳統數據挖掘任務相對而言特徵數量較少,特徵與結果之間的關係更為明顯,數據量相對較低。如果使用深度神經網路,很有可能會造成嚴重的過擬合。對這類任務,一般採用特徵工程+集成學習的方法。
數據挖掘比賽中大部分數據是feature類數據。所謂feature類數據,就是每一維都有明確的含義,比如房價預測的時候,數據里各維分別表示房子大小,樓層,離地鐵站距離,是否是學區房等等;與之對應的是raw data數據,比如圖像、語音等等,一個像素點和一個波幅的值沒有明確的含義。
對於feature類數據,用決策樹還是一個蠻好的選擇,既有非線性擬合能力,又可解釋,而且又有比較完整的理論指導你如何調參。神經網路雖然有非線性擬合能力,但是解釋性不強,參數不太好調。
對於raw data類數據,神經網路有獨特的優勢,通過data driven的方式可以學習到一些比較好的representation,比如在圖像和語音里,神經網路代表著當前最先進的生產力。
很難說某一類演算法完全取代另外一類演算法。這個主要也是看業務場景的需要。
如果是做圖像,語音,文本之類的技術,尤其是圖像領域,基本上都在使用深度學習的知識和框架在做,因為人臉識別,物體定位的準確率實在是非常高,甚至超過了人類的識別能力。在這種情況下,如果使用決策樹之類的演算法來人工寫特徵,就不那麼合適了,而且準確率很難超越深度學習框架。
但是如果是其他領域,那就不是這種場景了。在工作中遇到過一類事情,那就是大家發現這件事情發生了,但是想知道為什麼發生了這件事情,想知道原因是什麼,也就是所謂的根因分析(Root Cause Analysis)。應用場景就是例如某款APP的DAU,MAU跌了或者漲了,商業智能分析的員工希望知道發生這件事情的原因是什麼。或者說某個場景的成功率跌了,那麼需要運維人員去分析為什麼成功率會比之前有所下降。在這一類應用場景下,使用深度學習或者說神經網路就不那麼合適了,因為神經網路的解釋性是不太好的。但是在這種場景下,使用決策樹則是一個不錯的選擇。把正負樣本輸入到決策樹的模型中,並且使用特徵離散化的工具,然後使用決策樹來構建一顆樹,通過根節點和葉子節點的路徑來構建所謂的規則集合,輸出的規則集合就是發生這件事情的原因。之前整理過一篇文章,關於使用決策樹來進行根因分析的,在這裡貼出鏈接供大家參考。
文章:《智能運維繫統(一)》
我沒有比賽經驗,但感覺是,在比賽中,通常 類別 不多,或者數據沒有「深度的複雜性」,所以決策樹可以應付。
在「實際」應用中,例如機器視覺,或人臉識別,通常是不能用 決策樹 取代的。
原因是: 決策樹 用的是 greedy algorithm,它通常不會 back-track,否則 複雜性 和 運行時間 會增加。 神經網路 不需要 back-track,因為它將 高層 和 低層 權重 同時改變,這一點在 決策樹 是做不到的(或者暫時未有做)。 Come to think of it, 這或許是一個有趣的 thesis 題目 : 用 進化演算法 同時搜尋很多層的決策樹。
已經訓練好的神經網路,可以 extract 出來,變成 決策樹。
不能。
神經網路強的表示學習,比較適用在初始數據和最終訓練要用的數據有很大gap的時候,比如圖片,語音等,可以利用神經網路來逐層抽取原始數據的特徵表示。所以很多時候都是去掉最後一層,用神經網路來提特徵,再用其它模型來訓練。
如果不滿足很大gap的條件,是不用神經網路的。
此外,No free lunch也告訴我們,沒有哪種模型是萬能的,每一種方法都有自己的殺手鐧應用。
兩者是不同的應用場景。
傳統的機器學習比如SVM和樹演算法,要求數據是結構化數據,比如離散或者連續的好幾個特徵,特徵通常都是數值類型,並且具有一定統計意義。要求數據的量也很小,著名的IRIS數據集就150條數據,波士頓房價數據集就506條數據
神經網路這樣的演算法現在構成越來越深的網路,要求數據是非結構化數據,比如圖片、語音、文字,其中的統計意義隱藏的非常深。由於網路參數通常很多,Inception系列大約都有兩千萬個參數,也要求數據量非常的大,一般來說小於十萬的數據集基本沒法用。這也意味著對於小規模的數據集,如果不是用微調這樣的技巧,網路將會和數據集發生過擬合而失去泛化能力
當然,如果你真的要用神經網路代替的話,也不是不行。從數學意義上可以分析的
我們知道決策樹劃開的都是垂直或水平的線,形如:
而對於全連接神經網路, 在去掉b的情況下,wx這個矩陣相乘是把特徵x所在的空間進行線性變換,+b是對原點進行偏移,激活函數 引入非線性部分,空間直覺上來看就是扭曲了空間。
綜上可以發現DT這樣的演算法對數據的線性是有很高的要求的,這也是為什麼傳統機器學習之前總要進行繁雜的特徵工程。說道特徵工程,深度網路可以將一些非結構數據轉化為結構化數據,從而極大地減輕了特徵工程師的工作量,再在此基礎上做解釋性更好的工作。也是一個比較好的思路
神經網路可以在數學形式上復刻決策樹,但需要加上較強的約束,比如完全去掉激活函數就去掉了非線性的部分
樹形演算法在中小數據集上的確具有不可替代性,xgboost之類的演算法目前依然在工業界占很大的比重。
不過說到特徵工程,本質上,fm演算法,lr演算法,svm演算法也都是可以看作一個淺層的神經網路演算法來著。
widedeep,deepfm,deepcross這些新的演算法,一定意義上已經可以簡化特徵工程的步驟了,在稍微大一些的數據集上應該也有比較好的性能。
樹形演算法和神經網路演算法兩者其實可以混在一起使用,能互相補充一些信息來著。
萬金油答案當然是「具體情況具體分析」,不過對現在數據挖掘大多數問題,決策樹比神經網路更靠譜
深度神經網路的優勢在於從看起來和目標沒有什麼聯繫的、初級的數據單元上能夠自動提取出特徵,比如從圖像的像素上,句子的單詞上,看上去好像能把需要人為參與的特徵工程給天然替換掉(實際非常玄學,操作要騷)
決策樹的特徵工程則是人為來參與的,天然地就從更靠譜的特徵、更高抽象的特徵開始工作,比如要預測產品銷售收入,給決策樹的特徵不會是產品的圖片像素,而是廣告投入啊,產品類別啊等等。決策樹在建模時,從特徵的選擇開始自然就融入了人的一些先驗知識、經驗,這些經驗讓建模的起點一開始就離目標不是太遠,而且符合邏輯,解釋性更強。 在實際的很多問題里,我們本來對問題就已經有一定的認識(比如廣告投的多賣得應該就更多),就不需要讓模型再花大工夫走一遍從蠻荒到認識問題(提取高層次特徵)這個過程。
當然決策樹的活替代是可以替代的。神經網路也可以一開始就輸入人工篩選的特徵,比如傳統BPNN常用來乾的活。但是這玩意是黑箱啊!它裡面是個啥情況完全搞不清楚(決策樹就解釋性強很多,能知道哪些特徵貢獻大,甚至單個特徵怎麼劃分)。黑箱有啥不好呢,一來搞不清楚內部的作用機制,調優越來越玄學;二來沒有解釋性。沒有解釋性意味著:在學術上,很難證明自己使用了神經網路的方法得到的結果真的比baseline好了;在工業上,聰明的老闆希望做的模型對生產是有指導意義的,有很多老闆(特別是非互聯網行業的)不是特別care預測的誤差啊準確率啊,更care哪些因素影響更大,對業務怎麼調整。工業界喜歡用LR和線性、廣義線性回歸不是沒道理的。再看看深度神經網路火的領域,圖像啊語音啊,其實可以算作是解釋性相對次要的領域,畢竟要說明一堆像素和這個圖是不是貓狗、或者這裡有圈圈、有線和這個圖是不是貓狗有啥聯繫...意義不是很明顯...中間的一層一層節點說不清楚
另外一個很關鍵很關鍵的是數據量。在小樣本(單位G或以下)上,SVM為代表的一票傳統方法已經表現非常好了,往往能吊打BPNN,再加上增強演算法,秒天秒地,不需要強上神經網路。但是在大數據上(單位P、T),傳統方法會出現瓶頸,很難進一步提高效果,而深度神經網路則很適合大數據的學習,能夠在數據量非常大的情況下繼續提高。一般比賽給的測試、訓練數據,數據量還是比較小的,殺雞焉用牛刀,而且牛刀殺雞太糙。
打個不恰當的比方,做高中物理題用牛頓力學定律就OK了,已經能答滿分了,所以就不用強行上相對論嘛~當然用相對論做高中物理也是可以的,那主要功能就是裝逼了hhh(遇到過好幾個不懂機器學習但是想強行在項目中上深度神經網路的企業人員,有經理也有高T,搭一個深度神經網路對他們還是正對胃口的)
每個模型,都有自己的先驗假設和特性。
數據和問題,越接近模型的先驗假設和特性,效果會越好。
但總歸一句就是No free lunch
純理論上來說,我覺得可以。
決策樹模型邏輯簡單,輸入特徵是多為手工構造特徵,需要人的先驗知識,而人的先驗知識是有限的(對具象特徵的觀察不全,缺乏對抽象特徵的感知能力等等),在特徵比較少的情況下還需要構造統計特徵去「試」。
然而,神經網路模型複雜度高,強大的非線性能力可以從原始數據提取到數據的本質特徵,對特徵工程部分要求較低,不需要依賴人的先驗知識。但需要更多的數據才能學習到這些本質特徵。
理論上,只要模型夠複雜、數據量夠大、調參方法合理,且忽略解釋性和成本的情況下。
神經網路的效果往往會比決策樹等其他機器學習方法要好。
個人淺見說幾句。
決策樹的優點是模型的可解釋性強,每個節點的生成以及解釋都很直觀,所以特別適用於分類的問題。
神經網路恰恰相反,模型的可解釋性不好,而且就像前面的答案提到,神經網路適合用於圖像識別,計算機視覺,以及圍棋,遊戲人工智慧等等。輸入數據與輸出數據往往有很大的距離。所以需要神經網路這種複雜的模型,在隱藏層或多個隱藏層之間進行傳導。
所以決策樹和神經網路,其實是應用的場景不同。
神經網路不是Golden Hammer,指哪兒錘哪兒是不行的。題主提到的數據挖掘比賽一般解決的是現實生活中遇到的問題,拿著神經網路一頓亂錘出不了好結果。
數據挖掘比賽主要考察的是:
- 參賽者對於垂直領域的業務理解
- 通過各種統計方法去挖掘隱藏的特徵
- 在參賽數據以外爬取信息擴充特徵集
- 以及如何去利用參賽數據集中被泄露的比賽相關信息獲得更高名次(誤)
總之,數據挖掘比賽是關於數據的比賽。
而神經網路對於我來說更像是一個自動特徵構建器,把輸入通過非線性變換擴充到一個高維空間,然後再通過非線性變換降維輸出結果。
中間的這個高維空間可以看作被自動挖掘出來的隱藏特徵集。對於圖片這種很難人工提取特徵的輸入,神經網路構建的特徵集會優於手工打造的特徵集。而對於一般的數據挖掘比賽來說,一個行業專家精心構建的特徵集絕對會弔打神經網路。
理論上神經網路可以做任何事,但不是反過來任何事都需要用神經網路來做,特別是當我們對識別過程的知識多到足以使之成為白箱的時候。
比如我們對人腦到底怎麼進行圖像識別仍然所知甚少,只好上神經網路來做;生產線上產品的照相測量,我們很清楚每個位置反映在圖像里應當表現出什麼尺寸和顏色,自然也就不需要用神經網路了。
決策樹演算法不懂。
不過,簡單小數據用支持向量機,複雜大數據用神經元。總應該效果不差的。
不過數據挖掘和人工智慧是不一樣的。數據挖掘往往不過是某部門或者外服公司做的一張報表,真寫個人工智慧,成本夠嗎?挖掘出來的數據的價值搞不好不夠工程師發工資的。不過現在AI應該已經瞄上數據分析師職業了。
某AI:對不起,我不是要搶你的飯碗,我是要搶你們所有人的飯碗。
個人覺得不能,樹演算法由if else組成,神經網路都要靠公式,各自有各自好處。generalized linear 模型都可以被替代,svm估計也會,但是樹的不會。
樹和網路結合可能有更好的結果,記得iccv前幾年有篇paper, 微軟發的,就是關於這個的
1. 決策樹(及其集成模型rf和gbm)和神經網路,理論上都有很強的擬合能力,在這一點上不存在誰強誰弱的問題!
2. 決策樹和神經網路的適應性取決於兩個因素,數據量和數據類型。神經網路易過擬合,需要較大數據量,決策樹可以很輕鬆處理小數據集同時有效地控制過擬合。決策樹真正的弱勢並不在數據量上,並不是數據量大了,就會被神經網路吊打。而很重要的是數據類型!對於特徵意義比較直接的結構化數據,比如用當地的經濟數據預測房價,數據量再大,神經網路也難以超越gbm!
3. 決策樹真正的不足在於難以處理這兩類數據: 高度稀疏id類數據,數據具有局部相關性且這種相關性對結果很重要!對於前者,決策樹根本沒法學到稀疏特徵間的組合,因為幾乎所有的組合都找不到樣本,決策樹不可能分裂到這種組合!而神經經網路藉助 embedding 能夠學到低維表達,解決了這個問題,事實上fm就可以看做一種特殊的使用了embedding技巧的神經網路。對於後者,就是圖像序列數據了,決策樹識別這種局部關聯過於簡單粗暴,效果差是自然的,也只有在小數據集上欺負一下沒有預訓練的神經網路了!節點替換為淺層網路?
工業界中可解釋性有至關重要的作用。對各種 badcase 要有合理的解釋,同時也需要能從badcase 中找到特徵設計、模型結構中存在的問題,逐漸迭代改進。從這個角度來看,目前神經網路等模型還不好取代樹模型的地位。
推薦閱讀: