關(guān)于決策樹模型,你需要知道的|從ID3到XGBoost

引子:決策樹模型(Decision Trees敬鬓,DTs)是一種非參監(jiān)督式學習模型。它既可以應用于分類問題笙各,也可以應用于回歸問題钉答。它的目標是基于數(shù)據(jù)屬性找到?jīng)Q定性規(guī)則(decision rules),預測目標值杈抢。


概括

優(yōu)點:

- 模型解釋性好数尿;

- 訓練需要的數(shù)據(jù)量小惶楼;

- 既可以處理數(shù)值變量(numerical var)右蹦,也可以處理分類變量(categorical var);

- 可以解決多目標問題(multi-output)

如果說大部分機器學習都是黑盒子(black box)歼捐,那么決策樹絕對是少有的white box model何陆。

缺點:

在bias-variance tradeoff中,它偏向于低bias豹储,高variance贷盲,因此模型容易過度擬合(overfitting),并且不穩(wěn)定(unstable)颂翼。很大一部分原因晃洒,在于它的學習過程采用的幾乎都是貪婪算法(greedy algorithms)慨灭。然而這也是不得不的選擇朦乏。有證明,尋找最優(yōu)決策樹是一個NP-complete問題(用科普的話說氧骤,您的計算能力不足以解決這類問題~)呻疹,因而,我們找到的也只能是局部最優(yōu)而非全局最優(yōu)筹陵。(但我個人的理解刽锤,要是數(shù)據(jù)取樣好镊尺,good class balance,或者是big data并思,比如GB庐氮,TB級別,就不怕局部最優(yōu)算法的困擾)

不過宋彼,機器學習發(fā)展至今弄砍,過度擬合問題已經(jīng)可以得到很好的解決。比如與boosting 結(jié)合的boost tree(ada boost 等)和ensemble learning 模型 random forest输涕,都可以攻克以上的缺點音婶。因此,決策樹及其家族在工業(yè)界和學術(shù)界都廣受推崇莱坎,并且有很大的貢獻衣式。

下面介紹幾種在決策樹學習過程中廣泛采用的算法。

ID3


全稱Iterative Dichotomiser 3的ID3可謂最流行也最古老的算法檐什,其創(chuàng)始人Ross Quinlan在發(fā)明了ID3后又擴展出了C4.5碴卧,C5.0。深入了解ID3之前乃正,需要先引入一個定義:熵(Entropy)

給定一組數(shù)據(jù)集群set S螟深,并標記label,即它們可分組到class 1,class 2,......class n烫葬。定義pi為class i所占的比例界弧。定義entropy為:

在熱力學里,熵越大意味著混亂程度越大搭综;而在統(tǒng)計學里垢箕,entropy越大,意味著不確定性uncertainty越大兑巾。因此我們希望一個集群S的熵越小越好条获。而其原理也很簡單,看下圖fun(p): -p*log(p)就可以解釋

如果給定一個規(guī)則A蒋歌,在規(guī)則A下帅掘,數(shù)據(jù)點都集中在兩個極端,即p->0或者p->1堂油,那么我們就越確定A是一個可信任的規(guī)則修档,而如果數(shù)據(jù)是spread out evenly的,則我們這個規(guī)則很可能是錯誤的府框。

ID3的訓練原理也就如此順其自然的得到了:我們根據(jù)attributes依次尋找分割條件使得分割后的各個Partition set si的熵的總和是最小的吱窝,即最小化:

其中qi是si的權(quán)重(proportion weight)。下面是一棵已經(jīng)生成的樹:

之所以level這個attribute會被放在第一層layer 1,是因為基于level后將所有數(shù)據(jù)進行第一次分割后得到的熵是最小的院峡。緊接著基于上個分割后再進行分割兴使,但顯然這是一個貪婪算法,因為這樣的順序下照激,有一定可能錯過一些更優(yōu)的path发魄。

注:比較多的地方使用的不是minimize entropy而是maximize information gain。而這兩者是一回事俩垃,因為information gain = entropy_before _split - entropy_after_split欠母。而entropy_before_split是在沒有該attribute參與前的分類,對每個attribute而言都是一樣的吆寨。

C4.5/C5.0

C4.5是對ID3的一些改進赏淌,主要在于能處理連續(xù)數(shù)值和不完整數(shù)據(jù),并且通過引入pruning防止overfitting啄清。同時六水,它引入了一個information gain ratio的概念,是一種類似歸一化處理辣卒。

其中H(Y)就是上文的entropy before split掷贾,H(Y|X)就是上文的entropy after split based on attribute X。而H(X)是僅根據(jù)attribute X而不考慮label Y進行分割后的entropy荣茫。而其對連續(xù)變量的處理想帅,是按照連續(xù)變量的大小從小到大進行排序,假設(shè)一共有N個啡莉,那么總共有N-1個可能的候選分割閾值點港准,每個候選的分割閾值點的值為上述排序后的屬性值鏈表中兩兩前后連續(xù)元素的中點。這樣感覺有點暴力搜索咧欣。但是也可以做一些優(yōu)化浅缸,比如前后兩個值的lable如果是一樣的,就可以不再考慮他們的中點

而C5.0在內(nèi)存上做了一些優(yōu)化魄咕。

CART

CART采用的優(yōu)化方法略有不同衩椒。它計算的不是information entropy,而是gini impurity哮兰。

廣泛使用的python scikit-learn包采用的就是基于CART算法的決策樹毛萌。

Random Forest

在RF之前想提一下的是bagging(bootstrap aggregating的簡稱)。bootstrap是一種常用的方法喝滞,其原理也十分簡單阁将,就是有放回的隨機抽樣用于訓練。

所謂隨機森林囤躁,顧名思義冀痕,就是一群樹。大概有一段時間很流行ensemble learning或者majority voting狸演,從某種程度上可以解決overfitting的問題言蛇。隨機森林就是拿一群弱學習器(DTs)進行投票。之所以這里的DTs稱為弱學習器宵距,是因為往往我們只取部分attributes作為input進行學習腊尚。

關(guān)于隨機森林是不是一種容易過擬合的模型,眾說紛紜满哪;但是一致同意的是婿斥,從DT到RF,white box已經(jīng)被洗黑了(black box).

Boosting

boosting 可謂是決策樹家族發(fā)展最成功的一支哨鸭。同樣民宿,它也有ensemble learning和majority voting的理念。但是和隨機森林不同的是故慈,它的子樹存在“進化”(evolve)的思想顽照,而且在進化中適應訓練數(shù)據(jù)胁镐,這算是它的核心。

Adaboost是boosting類模型中最為有名的志群。它的訓練步驟如下:

假如有N個數(shù)據(jù)值observation,那么一開始蛔钙,他們用于評價模型error(步驟b)的weights都是1/N锌云,但是在訓練過程中,假如有的數(shù)據(jù)點(xi吁脱,yi)訓練不好桑涎,對應的wi就會變大(步驟d),那么它在下一個子樹Gm會得到更多重視兼贡。最后的投票也不是簡單的平均投票石洗,而是根據(jù)每個子樹的Alpha值權(quán)衡。

XGBoost

如果你混跡Kaggle紧显,那么你就不可能沒聽說過大名鼎鼎的XGBoost讲衫。它絕對是幫你上Kaggle排行榜的利器。XGBoost是一個模型孵班,也是一個工具包涉兽。它既是boosting算法中比較出類拔萃的,同時工具包提供分布并行計算篙程,可以幫助你加速訓練枷畏,所以備受歡迎。我在這里提的是該算法的一些核心思想虱饿。至于具體工具包的使用拥诡,請參照文末的參考鏈接触趴。

如上所述,boosting的訓練是樹的“進化”渴肉,那么進化的方向就可以有很多冗懦,xgboost是其中較為巧妙的。假如第一棵樹的訓練目標是原始的(x, y)仇祭,那么下一棵樹就可以用于對上一棵樹的修正(x, y-y')披蕉,其中y’是上一棵樹的預測值,依次類推乌奇,相當于每次都在修正“殘差”没讲。如果你關(guān)注deep learning領(lǐng)域的最新研究結(jié)果,也能看到一些類似訓練殘差的神經(jīng)網(wǎng)絡(luò)模型礁苗。

理想情況下爬凑,模型會收斂,即殘差會趨向于零试伙。將每棵樹的結(jié)果相加贰谣,就是對最原始的目標值y的預測。當然這只是基本的訓練參數(shù)迁霎。如果你調(diào)整一些參數(shù)吱抚,比如eta,可以給殘差一個權(quán)重考廉。同樣秘豹,類似于其他的決策樹,你可以選擇什么時候stop(子節(jié)點的數(shù)據(jù)量小于多少threshold)昌粤。


參考鏈接

http://scikit-learn.org/stable/

https://xgboost.readthedocs.io/en/latest/

“Data Science from Scratch”

“The Elements of Statistical Learning”

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末既绕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涮坐,更是在濱河造成了極大的恐慌凄贩,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袱讹,死亡現(xiàn)場離奇詭異疲扎,居然都是意外死亡,警方通過查閱死者的電腦和手機捷雕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門椒丧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人救巷,你說我怎么就攤上這事壶熏。” “怎么了浦译?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵棒假,是天一觀的道長溯职。 經(jīng)常有香客問我,道長帽哑,這世上最難降的妖魔是什么谜酒? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮祝拯,結(jié)果婚禮上甚带,老公的妹妹穿的比我還像新娘她肯。我一直安慰自己佳头,他們只是感情好,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布晴氨。 她就那樣靜靜地躺著康嘉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪籽前。 梳的紋絲不亂的頭發(fā)上亭珍,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音枝哄,去河邊找鬼肄梨。 笑死,一個胖子當著我的面吹牛挠锥,可吹牛的內(nèi)容都是我干的众羡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蓖租,長吁一口氣:“原來是場噩夢啊……” “哼粱侣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蓖宦,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤齐婴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后稠茂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柠偶,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年睬关,在試婚紗的時候發(fā)現(xiàn)自己被綠了嚣州。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡共螺,死狀恐怖该肴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情藐不,我是刑警寧澤匀哄,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布秦效,位于F島的核電站,受9級特大地震影響涎嚼,放射性物質(zhì)發(fā)生泄漏阱州。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一法梯、第九天 我趴在偏房一處隱蔽的房頂上張望苔货。 院中可真熱鬧,春花似錦立哑、人聲如沸夜惭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诈茧。三九已至,卻和暖如春捂掰,著一層夾襖步出監(jiān)牢的瞬間敢会,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工这嚣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鸥昏,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓姐帚,卻偏偏與公主長得像吏垮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子卧土,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容