為什么在實(shí)際的?kaggle 比賽中?gbdt 和?random forest 效果非常好?

2016-10-24 馬超Terminal SOTON數(shù)據(jù)分析
轉(zhuǎn)載:https://www.zhihu.com/question/51818176/answer/127637712

為什么在實(shí)際的 kaggle 比賽中 gbdt 和 random forest 效果非常好?
** 從這個(gè)調(diào)查中我們發(fā)現(xiàn),除了類似于圖像識(shí)別這種基于 deep learning 的比賽,絕大多數(shù)的 winning solution 都用的是 gbdt (xgboost)或者 random forest. 為什么傳統(tǒng)機(jī)器學(xué)習(xí)教課書(shū)里 svm, LR 好像并沒(méi)有很好的表現(xiàn)?**


作者:馬超鏈接:https://www.zhihu.com/question/51818176/answer/127637712來(lái)源:知乎著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)。作者:@馬超Terminal這是一個(gè)非常好,也非常值得思考的問(wèn)題。換一個(gè)方式來(lái)問(wèn)這個(gè)問(wèn)題:為什么基于 tree-ensemble 的機(jī)器學(xué)習(xí)方法,在實(shí)際的 kaggle 比賽中效果非常好?通常,解釋一個(gè)機(jī)器學(xué)習(xí)模型的表現(xiàn)是一件很復(fù)雜事情,而這篇文章盡可能用最直觀的方式來(lái)解釋這一問(wèn)題。我主要從三個(gè)方面來(lái)回答樓主這個(gè)問(wèn)題。1. 理論模型 (站在 vc-dimension 的角度)2. 實(shí)際數(shù)據(jù)3. 系統(tǒng)的實(shí)現(xiàn) (主要基于 xgboost)通常決定一個(gè)機(jī)器學(xué)習(xí)模型能不能取得好的效果,以上三個(gè)方面的因素缺一不可。(1)站在理論模型的角度統(tǒng)計(jì)機(jī)器學(xué)習(xí)里經(jīng)典的 vc-dimension 理論告訴我們:一個(gè)機(jī)器學(xué)習(xí)模型想要取得好的效果,這個(gè)模型需要滿足以下兩個(gè)條件:1. 模型在我們的訓(xùn)練數(shù)據(jù)上的表現(xiàn)要不錯(cuò),也就是 trainning error 要足夠小。2. 模型的 vc-dimension 要低。換句話說(shuō),就是模型的自由度不能太大,以防overfit.當(dāng)然,這是我用大白話描述出來(lái)的,真正的 vc-dimension 理論需要經(jīng)過(guò)復(fù)雜的數(shù)學(xué)推導(dǎo),推出 vc-bound.vc-dimension 理論其實(shí)是從另一個(gè)角度刻畫(huà)了一個(gè)我們所熟知的概念,那就是 bias variance trade-off.好,現(xiàn)在開(kāi)始讓我們想象一個(gè)機(jī)器學(xué)習(xí)任務(wù)。對(duì)于這個(gè)任務(wù),一定會(huì)有一個(gè) “上帝函數(shù)” 可以完美的擬合所有數(shù)據(jù)(包括訓(xùn)練數(shù)據(jù),以及未知的測(cè)試數(shù)據(jù))。很可惜,這個(gè)函數(shù)我們肯定是不知道的 (不然就不需要機(jī)器學(xué)習(xí)了)。我們只可能選擇一個(gè) “假想函數(shù)” 來(lái) 逼近 這個(gè) “上帝函數(shù)”,我們通常把這個(gè) “假想函數(shù)” 叫做 hypothesis.在這些 hypothesis 里,我們可以選擇 svm, 也可以選擇 logistic regression. 可以選擇單棵決策樹(shù),也可以選擇 tree-ensemble (gbdt, random forest). 現(xiàn)在的問(wèn)題就是,為什么 tree-ensemble 在實(shí)際中的效果很好呢?區(qū)別就在于 “模型的可控性”?!澳P偷目煽匦浴?這個(gè)詞是我自己發(fā)明的,因?yàn)槲覜](méi)有從其它的機(jī)器學(xué)習(xí)的教科書(shū)或者課程中找到類似的術(shù)語(yǔ)。先說(shuō)結(jié)論,tree-ensemble 這樣的模型的可控性是好的,而像 LR 這樣的模型的可控性是不夠好的(或者說(shuō),可控性是沒(méi)有 tree-ensemble 好的)。為什么會(huì)這樣?別急,聽(tīng)我慢慢道來(lái)。我們之前說(shuō),當(dāng)我們選擇一個(gè) hypothsis 后,就需要在訓(xùn)練數(shù)據(jù)上進(jìn)行訓(xùn)練,從而逼近我們的 “上帝函數(shù)”。我們都知道,對(duì)于 LR 這樣的模型。如果 underfit,我們可以通過(guò)加 feature,或者通過(guò)高次的特征轉(zhuǎn)換來(lái)使得我們的模型在訓(xùn)練數(shù)據(jù)上取得足夠高的正確率。而對(duì)于 tree-enseble 來(lái)說(shuō),我們解決這一問(wèn)題的方法是通過(guò)訓(xùn)練更多的 “弱弱” 的 tree. 所以,這兩類模型都可以把 training error 做的足夠低,也就是說(shuō)模型的表達(dá)能力都是足夠的。但是這樣就完事了嗎?沒(méi)有,我們還需要讓我們的模型的 vc-dimension 低一些。而這里,重點(diǎn)來(lái)了。在 tree-ensemble 模型中,通過(guò)加 tree 的方式,對(duì)于模型的 vc-dimension 的改變是比較小的。而在 LR 中,初始的維數(shù)設(shè)定,或者說(shuō)特征的高次轉(zhuǎn)換對(duì)于 vc-dimension 的影響都是更大的。換句話說(shuō),tree-ensemble 總是用一些 “弱弱” 的樹(shù)聯(lián)合起來(lái)去逼近 “上帝函數(shù)”,一次一小步,總能擬合的比較好。而對(duì)于 LR 這樣的模型,我們很難去猜到這個(gè)“上帝函數(shù)”到底長(zhǎng)什么樣子(到底是2次函數(shù)還是3次函數(shù)?上帝函數(shù)如果是介于2次和3次之間怎么辦呢?)。所以,一不小心我們?cè)O(shè)定的多項(xiàng)式維數(shù)高了,模型就 “剎不住車了”。俗話說(shuō)的好,步子大了,總會(huì)扯著蛋。這也就是我們之前說(shuō)的,tree-ensemble 模型的可控性更好,也即更不容易 overfit.(2)站在數(shù)據(jù)的角度除了理論模型之外, 實(shí)際的數(shù)據(jù)也對(duì)我們的算法最終能取得好的效果息息相關(guān)。kaggle 比賽選擇的都是真實(shí)世界中的問(wèn)題。所以數(shù)據(jù)多多少少都是有噪音的。而基于樹(shù)的算法通常抗噪能力更強(qiáng)。比如在樹(shù)模型中,我們很容易對(duì)缺失值進(jìn)行處理。除此之外,基于樹(shù)的模型對(duì)于 categorical feature 也更加友好。除了數(shù)據(jù)噪音之外,feature 的多樣性也是 tree-ensemble 模型能夠取得更好效果的原因之一。通常在一個(gè)kaggle任務(wù)中,我們可能有年齡特征,收入特征,性別特征等等從不同 channel 獲得的特征。而特征的多樣性也正是為什么工業(yè)界很少去使用 svm 的一個(gè)重要原因之一,因?yàn)?svm 本質(zhì)上是屬于一個(gè)幾何模型,這個(gè)模型需要去定義 instance 之間的 kernel 或者 similarity (對(duì)于linear svm 來(lái)說(shuō),這個(gè)similarity 就是內(nèi)積)。這其實(shí)和我們?cè)谥罢f(shuō)過(guò)的問(wèn)題是相似的,我們無(wú)法預(yù)先設(shè)定一個(gè)很好的similarity。這樣的數(shù)學(xué)模型使得 svm 更適合去處理 “同性質(zhì)”的特征,例如圖像特征提取中的 lbp 。而從不同 channel 中來(lái)的 feature 則更適合 tree-based model, 這些模型對(duì)數(shù)據(jù)的 distributation 通常并不敏感。(3)站在系統(tǒng)實(shí)現(xiàn)的角度**除了有合適的模型和數(shù)據(jù),一個(gè)良好的機(jī)器學(xué)習(xí)系統(tǒng)實(shí)現(xiàn)往往也是算法最終能否取得好的效果的關(guān)鍵。一個(gè)好的機(jī)器學(xué)習(xí)系統(tǒng)實(shí)現(xiàn)應(yīng)該具備以下特征:1. 正確高效的實(shí)現(xiàn)某種模型。我真的見(jiàn)過(guò)有些機(jī)器學(xué)習(xí)的庫(kù)實(shí)現(xiàn)某種算法是錯(cuò)誤的。而高效的實(shí)現(xiàn)意味著可以快速驗(yàn)證不同的模型和參數(shù)。2. 系統(tǒng)具有靈活、深度的定制功能。3. 系統(tǒng)簡(jiǎn)單易用。4. 系統(tǒng)具有可擴(kuò)展性, 可以從容處理更大的數(shù)據(jù)。到目前為止,xgboost 是我發(fā)現(xiàn)的唯一一個(gè)能夠很好的滿足上述所有要求的 machine learning package. 在此感謝青年才俊 陳天奇。在效率方面,xgboost 高效的 c++ 實(shí)現(xiàn)能夠通常能夠比其它機(jī)器學(xué)習(xí)庫(kù)更快的完成訓(xùn)練任務(wù)。在靈活性方面,xgboost 可以深度定制每一個(gè)子分類器,并且可以靈活的選擇 loss function(logistic,linear,softmax 等等)。除此之外,xgboost還提供了一系列在機(jī)器學(xué)習(xí)比賽中十分有用的功能,例如 early-stop, cv 等等在易用性方面,xgboost 提供了各種語(yǔ)言的封裝,使得不同語(yǔ)言的用戶都可以使用這個(gè)優(yōu)秀的系統(tǒng)。最后,在可擴(kuò)展性方面,xgboost 提供了分布式訓(xùn)練(底層采用 rabit 接口),并且其分布式版本可以跑在各種平臺(tái)之上,例如 mpi, yarn, spark 等等。有了這么多優(yōu)秀的特性,自然這個(gè)系統(tǒng)會(huì)吸引更多的人去使用它來(lái)參加 kaggle 比賽。綜上所述,理論模型,實(shí)際的數(shù)據(jù),良好的系統(tǒng)實(shí)現(xiàn),都是使得 tree-ensemble 在實(shí)際的 kaggle 比賽中“屢戰(zhàn)屢勝”的原因。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容