1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        100天搞定機(jī)器學(xué)習(xí)|Day60 遇事不決,XGBoost

        共 3815字,需瀏覽 8分鐘

         ·

        2021-02-21 03:01

        ↑↑↑點(diǎn)擊上方藍(lán)字,回復(fù)資料,10個(gè)G的驚喜

        100天搞定機(jī)器學(xué)習(xí)|Day59 主成分分析(PCA)原理及使用詳解

        XGBoost 是一種集大成的機(jī)器學(xué)習(xí)算法,可用于回歸,分類和排序等各種問題,在機(jī)器學(xué)習(xí)大賽及工業(yè)領(lǐng)域被廣泛應(yīng)用。成功案例包括:網(wǎng)頁文本分類、顧客行為預(yù)測(cè)、情感挖掘、廣告點(diǎn)擊率預(yù)測(cè)、惡意軟件分類、物品分類、風(fēng)險(xiǎn)評(píng)估、大規(guī)模在線課程退學(xué)率預(yù)測(cè)。

        XGBoost是初學(xué)者最值得深度理解的模型之一,它將決策樹、boosting、GBDT 等知識(shí)點(diǎn)串聯(lián)起來,強(qiáng)烈建議大家都手?jǐn)]一波。本文我將從XGBoost淵源及優(yōu)點(diǎn)、模型原理及優(yōu)化推導(dǎo)、XGBoost模型參數(shù)解析、調(diào)參實(shí)例,XGBoost可視化等方面介紹XGBoost。提醒一下,XGBoost 是在 GBDT 基礎(chǔ)上的改進(jìn),閱讀本文需對(duì) GBDT 有一定的了解,不熟悉的同學(xué)可以看一下前篇:100天搞定機(jī)器學(xué)習(xí)|Day58 機(jī)器學(xué)習(xí)入門:硬核拆解GBDT

        XGBoost淵源及優(yōu)勢(shì)

        在數(shù)據(jù)建模中,經(jīng)常采用Boosting方法,該方法將成百上千個(gè)分類準(zhǔn)確率較低的樹模型組合起來,成為一個(gè)準(zhǔn)確率很高的預(yù)測(cè)模型。這個(gè)模型會(huì)不斷地迭代,每次迭代就生成一顆新的樹。但在數(shù)據(jù)集較復(fù)雜的時(shí)候,可能需要幾千次迭代運(yùn)算,這將造成巨大的計(jì)算瓶頸。

        針對(duì)這個(gè)問題,華盛頓大學(xué)的陳天奇博士開發(fā)的XGBoost(eXtreme Gradient Boosting)基于C++通過多線程實(shí)現(xiàn)了回歸樹的并行構(gòu)建,并在原有Gradient Boosting算法基礎(chǔ)上加以改進(jìn),從而極大地提升了模型訓(xùn)練速度和預(yù)測(cè)精度。

        XGBoost 主要優(yōu)勢(shì)如下

        1、GBDT在優(yōu)化時(shí)只用到一階導(dǎo)數(shù)信息,XGBoost同時(shí)用到了一階和二階導(dǎo)數(shù),還支持自定義損失函數(shù),前提是損失函數(shù)可一階和二階求導(dǎo);

        2、加入了正則項(xiàng),用于控制模型的復(fù)雜度,防止過擬合;

        3、借鑒了隨機(jī)森林的做法,支持列抽樣(隨機(jī)選擇特征),不僅能降低過擬合,還能減少計(jì)算;

        4、尋找最佳分割點(diǎn)時(shí),實(shí)現(xiàn)了一種近似法,還考慮了稀疏數(shù)據(jù)集、缺失值的處理,大大提升算法的效率;

        5、支持并行;

        6、近似直方圖算法,用于高效地生成候選的分割點(diǎn);

        7、在算法實(shí)現(xiàn)時(shí)做了很多優(yōu)化,大大提升了算法的效率,內(nèi)存空間不夠時(shí),利用了分塊、預(yù)取、壓縮、多線程協(xié)作的思想。

        XGBoost模型原理及優(yōu)化推導(dǎo)

        XGBoost其實(shí)也是GBDT的一種,還是加性模型和前向優(yōu)化算法。

        加法模型就是說強(qiáng)分類器由一系列弱分類器線性相加而成。一般組合形式如下:

        其中,就是一個(gè)個(gè)的弱分類器,是弱分類器學(xué)習(xí)到的最優(yōu)參數(shù),就是弱學(xué)習(xí)在強(qiáng)分類器中所占比重,P是所有的組合。這些弱分類器線性相加組成強(qiáng)分類器。

        前向分步就是說在訓(xùn)練過程中,下一輪迭代產(chǎn)生的分類器是在上一輪的基礎(chǔ)上訓(xùn)練得來的。也就是可以寫成這樣的形式:

        XGBoost 的模型是什么樣子的呢?

        • 其中 K 是樹的棵數(shù)。
        • 是回歸樹,,滿足
        • q表示每棵樹的結(jié)構(gòu),它會(huì)將一個(gè)訓(xùn)練樣本實(shí)例映射到相對(duì)應(yīng)的葉子索引上。
        • T是樹中的葉子數(shù)。
        • 每個(gè)對(duì)應(yīng)于一個(gè)獨(dú)立的樹結(jié)構(gòu)q和葉子權(quán)重w。
        • 是所有回歸樹組成的函數(shù)空間。

        與決策樹不同的是,每棵回歸樹包含了在每個(gè)葉子上的一個(gè)連續(xù)分值,我們使用來表示第i個(gè)葉子上的分值。對(duì)于一個(gè)給定樣本實(shí)例,我們會(huì)使用樹上的決策規(guī)則(由q給定)來將它分類到葉子上,并通過將相應(yīng)葉子上的分值(由w給定)做求和,計(jì)算最終的預(yù)測(cè)值。

        XGBoost的學(xué)習(xí)

        為了在該模型中學(xué)到這些函數(shù)集合,我們會(huì)對(duì)下面的正則化目標(biāo)函數(shù)做最小化

        其中: 是損失函數(shù),常見的有 2 種:
        平方損失函數(shù):
        邏輯回歸損失函數(shù):

        : 正則化項(xiàng),用于懲罰復(fù)雜模型,避免模型過分?jǐn)M合訓(xùn)練數(shù)據(jù)。常用的正則有L1正則與L2正則:
        L1正則(lasso):
        L2正則:

        下一步就是對(duì)目標(biāo)函數(shù)進(jìn)行學(xué)習(xí),每一次保留原來的模型不變,加入一個(gè)新的函數(shù)到我們的模型中。

        其中,為第i個(gè)實(shí)例在第t次迭代時(shí)的預(yù)測(cè),我們需要添加樹 ,然后最小化下面的目標(biāo)函數(shù):

        假設(shè)損失函數(shù)使用的是平方損失 ,則上式進(jìn)一步寫為:

        現(xiàn)在,我們采用泰勒展開來定義一個(gè)近似的目標(biāo)函數(shù):

        其中:

        分別是loss function上的一階梯度和二階梯度。

        忘記基礎(chǔ)知識(shí)的同學(xué)順便重溫一下泰勒公式

        泰勒公式(Taylor’s Formula)是一個(gè)用函數(shù)在某點(diǎn)的信息描述其附近取值的公式。其初衷是用多項(xiàng)式來近似表示函數(shù)在某點(diǎn)周圍的情況。

        函數(shù)處的基本形式如下

        還有另外一種常見的寫法,,將處進(jìn)行泰勒展開,得:

        現(xiàn)在,我們?nèi)サ舫A?,然后重新認(rèn)識(shí)一下我們新的目標(biāo)函數(shù)

        定義是葉子 j 的實(shí)例集合。將正則項(xiàng)帶入,展開目標(biāo)函數(shù):

        看起來有點(diǎn)復(fù)雜,令:,,上式簡(jiǎn)化為:

        上式中是相互獨(dú)立的,是平方項(xiàng)。對(duì)于一個(gè)確定的結(jié)構(gòu),我們可以計(jì)算最優(yōu)的權(quán)重:

        帶入上式,計(jì)算得到的loss最優(yōu)解

        可以作為一個(gè)得分函數(shù)(scoring function)來衡量一棵樹結(jié)構(gòu)的質(zhì)量。

        我們有了一個(gè)方法來衡量一棵樹有多好,現(xiàn)在來看XGBoost優(yōu)化的第二個(gè)問題:如何選擇哪個(gè)特征和特征值進(jìn)行分裂,使最終我們的損失函數(shù)最小?

        XGBoost特征選擇和切分點(diǎn)選擇指標(biāo)定義為:

        具體如何分裂?

        XGBoost每一步選能使分裂后增益最大的分裂點(diǎn)進(jìn)行分裂。而分裂點(diǎn)的選取之前是枚舉所有分割點(diǎn),這稱為完全貪婪算法(exact greedy algorithm),在所有特征上,枚舉所有可能的劃分。

        • 基于當(dāng)前節(jié)點(diǎn)嘗試分裂決策樹,默認(rèn)分?jǐn)?shù)score=0,G和H為當(dāng)前需要分裂的節(jié)點(diǎn)的一階二階導(dǎo)數(shù)之和。
        • 對(duì)特征序號(hào) k=1,2...K:
        • 將樣本按特征k從小到大排列,依次取出第i個(gè)樣本,依次計(jì)算當(dāng)前樣本放入左子樹后,左右子樹一階和二階導(dǎo)數(shù)和:
        • 嘗試更新最大的分?jǐn)?shù):
        • 基于最大score對(duì)應(yīng)的劃分特征和特征值分裂子樹。
        • 如果最大score為0,則當(dāng)前決策樹建立完畢,計(jì)算所有葉子區(qū)域的, 得到弱學(xué)習(xí)器,更新強(qiáng)學(xué)習(xí)器,進(jìn)入下一輪弱學(xué)習(xí)器迭代.如果最大score不是0,則繼續(xù)嘗試分裂決策樹。

        當(dāng)數(shù)據(jù)量十分龐大時(shí),Exact Greedy 算法就會(huì)很慢,因此XGBoost引入了近似的算法,和Exact Greedy很類似,這里就不再展開講了。


        原理推導(dǎo)(精簡(jiǎn)版)

        下面是XGBoost原理推導(dǎo)的精簡(jiǎn)版,方便同學(xué)們復(fù)習(xí)使用。

        Xgboost@sklearn模型參數(shù)解析

        XGBoost的實(shí)現(xiàn)有原生版本,同時(shí)也有Scikit-learn版本,兩者在使用上有一些微差異,這里給出xgboost.sklearn 參數(shù)解釋。XGBoost使用key-value字典的方式存儲(chǔ)參數(shù):

        #部分重要參數(shù)
        params?=?{
        ????'booster':?'gbtree',
        ????'objective':?'multi:softmax',??#?多分類的問題
        ????'num_class':?10,???????????????#?類別數(shù),與?multisoftmax?并用
        ????'gamma':?0.1,??????????????????#?用于控制是否后剪枝的參數(shù),越大越保守,一般0.1、0.2這樣子。
        ????'max_depth':?12,???????????????#?構(gòu)建樹的深度,越大越容易過擬合
        ????'lambda':?2,???????????????????#?控制模型復(fù)雜度的權(quán)重值的L2正則化項(xiàng)參數(shù),參數(shù)越大,模型越不容易過擬合。
        ????'subsample':?0.7,??????????????#?隨機(jī)采樣訓(xùn)練樣本
        ????'colsample_bytree':?0.7,???????#?生成樹時(shí)進(jìn)行的列采樣
        ????'min_child_weight':?3,
        ????'silent':?1,???????????????????#?設(shè)置成1則沒有運(yùn)行信息輸出,最好是設(shè)置為0.
        ????'eta':?0.007,??????????????????#?如同學(xué)習(xí)率
        ????'seed':?1000,
        ????'nthread':?4,??????????????????#?cpu?線程數(shù)
        }
        xgboost完整參數(shù)解析

        篇幅原因,調(diào)參實(shí)例及XGBoost可視化且聽下回分解。
        如有收獲,還請(qǐng)不吝給個(gè)在看、收藏、轉(zhuǎn)發(fā)

        參考

        https://www.cnblogs.com/pinard/p/10979808.html
        https://www.biaodianfu.com/xgboost.html https://www.zybuluo.com/vivounicorn/note/446479 https://www.cnblogs.com/chenjieyouge/p/12026339.html

        也可以加一下老胡的微信
        圍觀朋友圈~~~


        推薦閱讀

        (點(diǎn)擊標(biāo)題可跳轉(zhuǎn)閱讀)

        麻省理工學(xué)院計(jì)算機(jī)課程【中文版】
        【清華大學(xué)王東老師】現(xiàn)代機(jī)器學(xué)習(xí)技術(shù)導(dǎo)論.pdf
        機(jī)器學(xué)習(xí)中令你事半功倍的pipeline處理機(jī)制
        機(jī)器學(xué)習(xí)避坑指南:訓(xùn)練集/測(cè)試集分布一致性檢查
        機(jī)器學(xué)習(xí)深度研究:特征選擇中幾個(gè)重要的統(tǒng)計(jì)學(xué)概念

        老鐵,三連支持一下,好嗎?↓↓↓

        瀏覽 37
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            十八岁女人毛片 | 蜜桃狠狠色伊人亚洲综合网站 | 三男一女摸吃奶 | 不许穿乳罩随时挨c调教h视频 | 女女百合舌伸湿润腿间视频 | 脱了她裙子摸进她的内裤亲吻 | 人妻精品| 一二三四日本高清社区5 | 国产性猛交XXXX免费看久久 | 日本大鸡巴视屏 |