日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GBRT(GBDT)(MART)(Tree Net)(Tree link)

發布時間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GBRT(GBDT)(MART)(Tree Net)(Tree link) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

源于博客

GBRT(梯度提升回歸樹)有好多名字,標題全是它的別名。
它是一種迭代的回歸樹算法,由多棵回歸樹組成,所有樹的結論累加起來得到最終結果。在被提出之初與SVM一起被認為是泛化能力較強的算法。
主要由三個概念組成:回歸決策樹Regression Decistion Tree(即DT),梯度提升Gradient Boosting(即GB),Shrinkage 。搞定這三個概念后就能明白GBDT是如何工作的,要繼續理解它如何用于搜索排序則需要額外理解RankNet概念,之后便功德圓滿。下文將逐個碎片介紹,最終把整張圖拼出來。

1. DT:回歸樹Regression Decistion Tree

決策樹分為兩大類:回歸樹和分類樹,前者用于預測實數值,如明天的溫度,用戶年齡,網頁相關程度等,后者用于分類標簽值,如用戶性別、晴天/陰天/雨、網頁是否是垃圾頁面等。注意到前者的結果的加減是有意義的,后者則無意義。GBRT的核心在于累加所有樹的結果作為最終結果,對于分類樹的結果是無法累加的,從而,GBDT中的樹都是回歸樹,不是分類樹。下面以性別判別/年齡預測(每個例子都是已知性別/年齡的人,而特征包括這個人上網的時長、上網的時間段、網購所花金額等)來說明回歸樹如何工作:

先說一下分類樹,分類樹在每次分枝時,是窮舉每一個特征的每一個閾值,找到使得(閾值<特征)(特征<=閾值)分成的兩個分枝的熵最大的特征和閾值(熵最大的概念可理解成盡可能每個分枝的男女比例都遠離1:1),按照該標準分枝得到兩個新節點,用同樣的方法繼續分枝直到所有人都被分入性別唯一的葉子節點,或達到預設的終止條件,若最終葉子結點中的性別不唯一,則已多數人的性別作為該葉子節點的性別。
回歸樹總體流程也是類似,不過在每個節點(不一定是葉子節點)都會得一個預測值,以年齡為例,該預測值等于屬于這個節點的所有人年齡的平均值。分枝時,是窮舉每一個特征的每一個閾值找到最好的分割點,衡量的標準改為最小化均方差(而不是最大熵),即(每個人的年齡-預測年齡)平方和除以n。分枝直到每個葉子節點上人的年齡都唯一(這太難了)或者達到預設的終止條件(如葉子個數上限)。若最終葉子結點上年齡不唯一,則以該節點上所有人平均年齡作為預測年齡。

2. GB:梯度提升Gradient Boosting

Boosting,迭代,即通過迭代多棵樹來共同決策,每棵樹的結論并不是年齡本身,而是年齡的一個累加量。GBRT的核心就在于,每一棵樹學的是之前所有樹的結論和的殘差,這個殘差就是一個加上預測值后能得真實值的累加量。比如,一個人的真實年齡是18歲,但是第一棵樹預測年齡是12歲,差了6歲,殘差為6;那么第二棵樹我們把其年齡設為6歲去學習,如果第二棵樹真的能把其分到6歲的葉子節點,那么累加兩棵樹的年齡就是真實值,如果第二棵樹的結論是5歲,仍剩余1歲的殘差,需要繼續學習。

3. Boost與Gradient boost:提升與梯度提升

原始的Boost算法是在算法開始的時候,為每一個樣本賦上一個權重值,初始的時候,大家都是一樣重要的。在每一步訓練中得到的模型,會使得數據點的估計有對有錯,我們就在每一步結束后,增加分錯的點的權重,減少分對的點的權重,這樣使得某些點如果老是被分錯,那么就會被“嚴重關注”,也就被賦上一個很高的權重。然后等進行了N次迭代(由用戶指定),將會得到N個簡單的分類器(basic learner),然后我們將它們組合起來(比如說可以對它們進行加權、或者讓它們進行投票等),得到一個最終的模型。而Gradient Boost與傳統的Boost的區別是,每一次的計算是為了減少上一次的殘差(residual),而為了消除殘差,我們可以在殘差減少的梯度(Gradient)方向上建立一個新的模型。所以說,在Gradient Boost中,每個新的模型的簡歷是為了使得之前模型的殘差往梯度方向減少,與傳統Boost對正確、錯誤的樣本進行加權有著很大的區別

4. GBDT工作實例

還是年齡預測,簡單起見訓練集只有4個人A/B/C/D,他們的年齡分別是14,16,24,26。其中A和B分別是高一、高三學生;C和D分別是應屆畢業生和工作兩年的員工,如果用一棵傳統的回歸決策樹來訓練,會得到如下圖1所示的結果:


現在使用GBDT來做這件事,由于數據過少,限定的葉子結點最多有兩個,即每棵樹都只有一個分枝,并且限定只學兩棵樹,我們會得到以下結果:

在第一棵樹分枝和圖1一樣,由于A,B年齡較為相近,C,D年齡較為相近,他們被分為兩撥,每撥用平均年齡作為預測值。此時計算殘差(殘差的意思就是: A的預測值 + A的殘差 = A的實際值),所以A的殘差就是16-15=1(注意,A的預測值是指前面所有樹累加的和,這里前面只有一棵樹所以直接是15,如果還有樹則需要都累加起來作為A的預測值)。進而得到A,B,C,D的殘差分別為-1,1,-1,1。然后我們拿殘差替代A,B,C,D的原值,到第二棵樹去學習,如果我們的預測值和它們的殘差相等,則只需把第二棵樹的結論累加到第一棵樹上就能得到真實年齡了。這里的數據顯然是我可以做的,第二棵樹只有兩個值1和-1,直接分成兩個節點。此時所有人的殘差都是0,即每個人都得到了真實的預測值。

很容易發現幾個問題:
1)既然上面兩個方法最終效果相同,為何還需要GBDT呢?
過擬合。過擬合是指為了讓訓練集精度更高,學到了很多“僅在訓練集上成立的規律”,導致換一個數據集當前規律就不適應了。其實只要允許一棵樹的葉子結點足夠多,訓練集總是能夠訓練到100%準確率的。
我們發現方法1為了達到100%精度使用了3個feature(上網時長、時段、網購金額),其中分枝“上網時長>1.1h” 很顯然已經過擬合了,這個數據集上A,B也許恰好A每天上網1.09h, B上網1.05小時,但用上網時間是不是>1.1小時來判斷所有人的年齡很顯然是有悖常識的;
相對來說方法2的boosting雖然用了兩棵樹 ,但其實只用了2個feature就搞定了,后一個feature是問答比例,顯然圖2的依據更靠譜。Boosting的最大好處在于,每一步的殘差計算其實變相地增大了分錯instance的權重,而已經分對的instance則都趨向于0。這樣后面的樹就能越來越專注那些前面被分錯的instance。

2)這個不是boosting吧,Adaboost不是這么定義的
這是boosting不是Adaboost。Adaboost是另一種提升方法,它按分類對錯,分配不同的權重,使用這些權重計算cost function,從而讓錯分的樣本權重越來越大,使他們更被重視。Bootstrap也有類似思想,它在每一步迭代時不改變模型本身,也不計算殘差,而是從n個例子訓練集中按照一定的概率重新抽取n個例子出來,對這n個新的例子再訓練一輪。GBDT也可以在使用殘差的同時引入Bootstrap re-sampling,GBDT多數實現版本中也增加的這個選項,但是否一定使用則有不同看法。re-sampling一個缺點是它的隨機性,即同樣的數據集合訓練兩遍結果是不一樣的,也就是模型不可穩定復現,這對評估是很大挑戰,比如很難說一個模型變好是因為你選用了更好的feature,還是由于這次sample的隨機因素。

轉載于:https://www.cnblogs.com/sanmenyi/p/7152903.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的GBRT(GBDT)(MART)(Tree Net)(Tree link)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。