<delect id="53lz1"></delect><cite id="53lz1"><sub id="53lz1"><del id="53lz1"></del></sub></cite>

    <em id="53lz1"><font id="53lz1"><address id="53lz1"></address></font></em>

    <sub id="53lz1"></sub>
    <mark id="53lz1"></mark>

    <font id="53lz1"></font>

    <sub id="53lz1"><menuitem id="53lz1"><mark id="53lz1"></mark></menuitem></sub>

          <thead id="53lz1"></thead>
          首頁>>技術前沿>>網站/軟件行業動態
          GBDT原理與Sklearn源碼分析
          作者:西安軟件公司 | 轉載 來源:西安軟件公司 | 時間:2018年10月12日| 點擊:0次 | 【評論】

          1.GB原理概述
          注意:對原理已經熟知或者不想太多了解者可直接跳過看實踐部分,另外在學習GBDT前非常建議讀者先看一下李航老師的《統計學習方法》中的8.4.1節。

          首先,先解釋一下所謂的boosting(提升)。提升方法就是從弱學習算法出發,反復學習,得到一系列的弱分類器(基分類器),然后組合這些弱分類器,構成一個強分類器。大多數的提升方法都是改變訓練數據的概率分布(訓練數據的權值分布)。

          所以,對于提升方法來說,需要解決兩個問題:一是每一輪學習中,如何改變訓練數據的權值或者概率分布;二是如何將弱分類器組合成一個強分類器。

          了解了所謂的boosting后,我們得到上面的兩個問題,對于第一個問題,在GBDT中,其實就是通過擬合損失函數的負梯度值在當前模型的值,這里需要注意的,在以前的機器學習算法中,我們都是通過直接擬合真實值,而在GBDT里,我們擬合的目標不再是真實值,而是一個梯度值,當然這個梯度值和真實值有關系,后面部分會說明。

          對于第二個問題,GBDT中的基分類器當然是決策樹。但是決策樹有很多比如C4.5、ID3、CART等等。那么用的是哪種樹?在GBDT里,用的是CART(分類與回歸樹),同時Sklearn里面實現GBDT時用的基分類器也是CART。

          為了前后連貫,這里簡單介紹一下CART。一般的CART是這樣的:用于分類任務時,樹的分裂準則采用基尼指數,用于回歸任務時,用MSE(均方誤差)。
          注意:當然在回歸任務中,分裂準則也不再局限于用MSE,也可以用MAE,還可以用Friedman_mse(改進型的mse)。

          上面提到,CART可以用于回歸和分類,那么到底用回歸還是分類呢?上面我們已經提到了,GBDT擬合的目標是一個梯度值,這個值當然是一個連續值或者說實值,所以在GBDT里,通通都是回歸樹。

          有了基分類器后,如何將這些基分類器組合起來?boosting方法一般是使用加法模型。
          即:fM(x)=∑Mm=1T(x,θm)fM(x)=∑m=1MT(x,θm)
          其實利用GB訓練強學習器的思路,總結下來就是下面這個過程:


          對于算法的第3步:yi~=?[?L(yi,F(xi))?F(xi)]F(x)=Fm?1(x)yi~=?[?L(yi,F(xi))?F(xi)]F(x)=Fm?1(x),就是我們上面說的損失函數的負梯度在當前模型的值。
          也就是說,我們每一個顆回歸樹擬合的目標是yi~yi~。

          這里這樣說可能比較抽象,我們舉幾個例子:
          比如說,損失函數選擇使用:
          L(yi,F(xi))=(12)?(yi?F(xi))2L(yi,F(xi))=(12)?(yi?F(xi))2,那么其負梯度值為:?[?L(yi,F(xi))?F(xi)]=(yi?F(xi))?[?L(yi,F(xi))?F(xi)]=(yi?F(xi)),再帶入當前模型的值F(x)=Fm?1(x)F(x)=Fm?1(x)。
          則有:
          yi~=?[?L(yi,F(xi))?F(xi)]F(x)=Fm?1(x)=(yi?Fm?1(xi))yi~=?[?L(yi,F(xi))?F(xi)]F(x)=Fm?1(x)=(yi?Fm?1(xi))
          所以我們能看到,當損失函數選用Least-square時,每一次擬合的值就是(真實值-當前模型的值)。

          比如說,損失函數選擇Least-absolute使用:
          L(yi,F(xi))=|yi?F(xi)|L(yi,F(xi))=|yi?F(xi)|,其梯度值為:
          yi~=?[?L(yi,F(xi))?F(xi)]F(x)=Fm?1(x)=sign(yi?Fm?1(xi))yi~=?[?L(yi,F(xi))?F(xi)]F(x)=Fm?1(x)=sign(yi?Fm?1(xi))
          其中signsign是符號函數。

          比如說,損失函數選擇使用logistic loss時:(二分類任務)
          L(yi,F(xi))=yilog(pi)+(1?yi)log(1?pi)L(yi,F(xi))=yilog(pi)+(1?yi)log(1?pi)。
          其中pi=11+e?F(xi)pi=11+e?F(xi)。
          其梯度值為:
          yi~=?[?L(yi,F(xi))?F(xi)]F(x)=Fm?1(x)=yi?11+e?Fm?1(xi)yi~=?[?L(yi,F(xi))?F(xi)]F(x)=Fm?1(x)=yi?11+e?Fm?1(xi)(這個簡單推導過程在下一篇文章有,以及多分類任務采用的loss-function)

          對于算法的第4步,在這里先簡單提一下,其目的就是為了求一個最優的基分類器。對于不同的基分類器有不同的尋找,比如,對于決策樹,尋找一個最優的樹的過程其實依靠的就是啟發式的分裂準則。

          對于算法的第5步,是一個Line search 的過程,具體可以參考Friedman的文章。在GBDT里,通常將這個過程作為Shrinkage,也就是把ρm做為學習率ρm做為學習率,后面實踐部分可以看到效果。

          對于算法的第6步,求得新的基分類器后,利用加法模型,更新出下一個模型Fm(x)Fm(x)
          大家可以發現,對于算法的第1步我沒有提到,這是因為,這個需要在講完第3步才能夠說明。算法的第1步是一個初始化的過程。為什么需要初始化?很簡單,因為每次在計算負梯度值時需要用到前一個模型Fm?1(xi)Fm?1(xi)預測的值。對于我們訓練的第一個模型m=1m=1而言需要有F0(xi)F0(xi)的存在。

          此內容DOC下載 此內容PDF下載

          【全文完】
          關鍵詞標簽: 人工智能 
          0 ([$-頂稿人數-$])
          0 ([$-踩稿人數-$])

          版權聲明:

          1、弈聰軟件網站內容中凡注明“來源:XXX(非陜西弈聰網站)”的作品,轉載自其它媒體,轉載目的在于傳遞更多信息,其中涉及的網站建設,網站優化,APP開發,微信小程序開發,大數據平臺開發,區塊鏈技術開發等軟件開發技術細節并不代表本站贊同支持其觀點,并不對其真實性負責。對于署名“陜西弈聰”的作品系本站版權所有,任何人轉載請署名來源,否則陜西弈聰將追究其相關法律責任。

          2、本站內容中未聲明為“原創”的內容可能源自其它網站,但并不代表本站支持其觀點,對此帶來的法律糾紛及其它責任與我方無關。如果此內容侵犯了您的權益,請聯系我方進行刪除。

          向日葵大人版视频app欧美日韩在线视频!_老子午夜不卡电影院_最新国产高清Av在线_综合亚洲日韩AV

          <delect id="53lz1"></delect><cite id="53lz1"><sub id="53lz1"><del id="53lz1"></del></sub></cite>

            <em id="53lz1"><font id="53lz1"><address id="53lz1"></address></font></em>

            <sub id="53lz1"></sub>
            <mark id="53lz1"></mark>

            <font id="53lz1"></font>

            <sub id="53lz1"><menuitem id="53lz1"><mark id="53lz1"></mark></menuitem></sub>

                  <thead id="53lz1"></thead>