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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

一天1个机器学习知识点(四)

發(fā)布時(shí)間:2025/3/20 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一天1个机器学习知识点(四) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

陸陸續(xù)續(xù)整理的機(jī)器學(xué)習(xí)的知識(shí)點(diǎn),資料大多數(shù)來(lái)自網(wǎng)上,不做盈利目的,如果侵權(quán)請(qǐng)告知即刪!如果文章中有錯(cuò)誤的地方還請(qǐng)各位同學(xué)指正,,一起學(xué)習(xí),一起進(jìn)步!
每天都在更新中,記得收藏,每天進(jìn)步一點(diǎn)點(diǎn)!!

一天1個(gè)機(jī)器學(xué)習(xí)知識(shí)點(diǎn)(一)(決策樹(shù),有無(wú)監(jiān)督學(xué)習(xí),SVM,梯度下降法,邏輯回歸,NB)
一天1個(gè)機(jī)器學(xué)習(xí)知識(shí)點(diǎn)(二)(KNN,Kmeans,偏差方差,參數(shù)非參數(shù)模型,生成模型判別模型,正則化,概率,牛頓法,熵)
一天1個(gè)機(jī)器學(xué)習(xí)知識(shí)點(diǎn)(三)(損失函數(shù),生成模型和判別模型,DBSCAN,OPTICS)
一天1個(gè)機(jī)器學(xué)習(xí)知識(shí)點(diǎn)(四)這部分主要更新集成學(xué)習(xí)的內(nèi)容(RF,adaboost,GBDT,XGBoost等)
一天1個(gè)機(jī)器學(xué)習(xí)知識(shí)點(diǎn)(五)(特征工程相關(guān),PCA,LDA等)

穿越---->深度學(xué)習(xí)知識(shí)點(diǎn)!!

目錄

  • 1.bagging和boosting
    • 1.1 bagging(套袋法)
    • 1.2boosting
    • 1.3 區(qū)別
    • 1.4為什么說(shuō)bagging是減少variance,而boosting是減少bias?
  • 1.隨機(jī)森林(RF)
    • 1.1原理
    • 1.2 優(yōu)缺點(diǎn)
    • 1.3其他面試點(diǎn)
  • 2.Adaboost
    • 2.1加法模型和指數(shù)損失函數(shù)
    • 2.2原理
    • 2.3算法流程
    • 2.4弱分類(lèi)器權(quán)重公式推導(dǎo)
    • 2.5優(yōu)缺點(diǎn)
    • 2.6其他面試點(diǎn)
  • 3.GBDT(梯度提升決策樹(shù))
    • 3.1 原理
    • 3.2GBDT 算法的流程?
    • 3.3GBDT 如何選擇特征 ?
    • 3.4GBDT如何構(gòu)建特征 (GBDT+LR)
    • 3.5GBDT 如何用于分類(lèi)?
    • 3.6GBDT的優(yōu)點(diǎn)和局限性
    • 3.7梯度提升和梯度下降的區(qū)別和聯(lián)系
    • 3.8RF、GBDT的區(qū)別
    • 3.9GBDT怎樣設(shè)置單棵樹(shù)的停止生長(zhǎng)條件?
    • 3.10GBDT如何評(píng)估特征的權(quán)重大小?
    • 3.11GBDT中哪些部分可以并行?
    • 3.12如何防止過(guò)擬合?
    • 3.13GBDT當(dāng)增加樣本數(shù)量時(shí),訓(xùn)練時(shí)長(zhǎng)是線性增加嗎?
    • 3.14當(dāng)增加樹(shù)的顆數(shù)時(shí),訓(xùn)練時(shí)長(zhǎng)是線性增加嗎?
    • 3.15當(dāng)增加一個(gè)棵樹(shù)葉子節(jié)點(diǎn)數(shù)目時(shí),訓(xùn)練時(shí)長(zhǎng)是線性增加嗎?
    • 3.16每個(gè)節(jié)點(diǎn)上都保存什么信息?
  • 4.XgBoost
    • 4.1XgBoost有哪些特點(diǎn)
    • 4.2對(duì)于連續(xù)值如何進(jìn)行分割?
    • 4.3對(duì)于特征缺失值如何分類(lèi)?
    • 4.4XGBoost怎么做到并行化
    • 4.5XgBoost和GBDT的區(qū)別和聯(lián)系
    • 4.6.XGBoost和深度學(xué)習(xí)的區(qū)別?
    • 4.7.xgboost為什么使用二階泰勒展開(kāi)
  • 5.lightGBM
    • 5.1LGB原理
    • 5.2.XGboost的不足之處
    • 5.3.XGBoost和LGBM樹(shù)的生長(zhǎng)方式
    • 5.4.XGBoost和LGBM樹(shù)的劃分方式
    • 5.5.支持類(lèi)別特征
    • 5.6.支持并行學(xué)習(xí)
    • 5.7lightGBM與XGboost對(duì)比
    • 5.8直方圖算法

1.bagging和boosting

1.1 bagging(套袋法)

其算法過(guò)程如下:

  • 從原始樣本集中抽取訓(xùn)練集。每輪從原始樣本集中使用Bootstraping的方法抽取n個(gè)訓(xùn)練樣本(在訓(xùn)練集中,有些樣本可能被多次抽取到,而有些樣本可能一次都沒(méi)有被抽中)。共進(jìn)行k輪抽取,得到k個(gè)訓(xùn)練集。(k個(gè)訓(xùn)練集之間是相互獨(dú)立的)
  • 每次使用一個(gè)訓(xùn)練集得到一個(gè)模型,k個(gè)訓(xùn)練集共得到k個(gè)模型。(注:這里并沒(méi)有具體的分類(lèi)算法或回歸方法,我們可以根據(jù)具體問(wèn)題采用不同的分類(lèi)或回歸方法,如決策樹(shù)、感知器等)
  • 對(duì)分類(lèi)問(wèn)題:將上步得到的k個(gè)模型采用投票的方式得到分類(lèi)結(jié)果;對(duì)回歸問(wèn)題,計(jì)算上述模型的均值作為最后的結(jié)果。(所有模型的重要性相同)
  • 1.2boosting

    AdaBoosting方式每次使用的是全部的樣本,每輪訓(xùn)練改變樣本的權(quán)重。下一輪訓(xùn)練的目標(biāo)是找到一個(gè)函數(shù)f 來(lái)擬合上一輪的殘差。當(dāng)殘差足夠小或者達(dá)到設(shè)置的最大迭代次數(shù)則停止。Boosting會(huì)減小在上一輪訓(xùn)練正確的樣本的權(quán)重,增大錯(cuò)誤樣本的權(quán)重。(對(duì)的殘差小,錯(cuò)的殘差大)
    梯度提升的Boosting方式是使用代價(jià)函數(shù)對(duì)上一輪訓(xùn)練出的模型函數(shù)f的偏導(dǎo)來(lái)擬合殘差。

    1.3 區(qū)別

    1)樣本選擇上
    Bagging:訓(xùn)練集是在原始集中有放回選取的,從原始集中選出的各輪訓(xùn)練集之間是獨(dú)立的。
    Boosting:每一輪的訓(xùn)練集不變,只是訓(xùn)練集中每個(gè)樣例在分類(lèi)器中的權(quán)重發(fā)生變化。而權(quán)值是根據(jù)上一輪的分類(lèi)結(jié)果進(jìn)行調(diào)整。

    2)樣例權(quán)重
    Bagging:使用均勻取樣,每個(gè)樣例的權(quán)重相等
    Boosting:根據(jù)錯(cuò)誤率不斷調(diào)整樣例的權(quán)值,錯(cuò)誤率越大則權(quán)重越大

    3)預(yù)測(cè)函數(shù)權(quán)重
    Bagging:所有預(yù)測(cè)函數(shù)的權(quán)重相等
    Boosting:每個(gè)弱分類(lèi)器都有相應(yīng)的權(quán)重,對(duì)于分類(lèi)誤差小的分類(lèi)器會(huì)有更大的權(quán)重

    4)并行計(jì)算
    Bagging:各個(gè)預(yù)測(cè)函數(shù)可以并行生成
    Boosting:各個(gè)預(yù)測(cè)函數(shù)只能順序生成,因?yàn)楹笠粋€(gè)模型參數(shù)需要前一輪模型的結(jié)果。

    1.4為什么說(shuō)bagging是減少variance,而boosting是減少bias?

    關(guān)于偏差和方差在機(jī)器學(xué)習(xí)系列第二篇。

    • bagging的方法主要是隨機(jī)取樣,每個(gè)模型的目標(biāo)函數(shù)跟單模型并沒(méi)有很大的區(qū)別,所以bias變化不大,而多個(gè)模型的集成降低異常點(diǎn)的影響,這兩個(gè)方法都可以降低variance。
    • boosting的方法通過(guò)殘差學(xué)習(xí),最后得預(yù)測(cè)值發(fā)生了改變,是由多個(gè)模型預(yù)測(cè)值與每個(gè)模型權(quán)重重新表示,糾錯(cuò)之后的boosting預(yù)測(cè)值自然是更接近真實(shí)值,因此bais偏離真實(shí)值的誤差會(huì)降低。(我覺(jué)得根據(jù)這個(gè)可以用在stacking的模型選擇上)

    1.隨機(jī)森林(RF)

    1.1原理

    Random Forest(隨機(jī)森林)是Bagging的擴(kuò)展變體,它在以決策樹(shù)為基學(xué)習(xí)器構(gòu)建Bagging集成的基礎(chǔ)上,進(jìn)一步在決策樹(shù)的訓(xùn)練過(guò)程中引入了隨機(jī)特征選擇,因此可以概括RF包括四個(gè)部分:1、隨機(jī)選擇樣本(放回抽樣);2、隨機(jī)選擇特征;3、構(gòu)建決策樹(shù);4、隨機(jī)森林投票(平均)

    隨機(jī)選擇樣本和Bagging相同,隨機(jī)選擇特征是指在樹(shù)的構(gòu)建中,會(huì)從樣本集的特征集合中隨機(jī)選擇部分特征,然后再?gòu)倪@個(gè)子集中選擇最優(yōu)的屬性用于劃分,這種隨機(jī)性導(dǎo)致隨機(jī)森林的偏差會(huì)有稍微的增加(相比于單棵不隨機(jī)樹(shù)),但是由于隨機(jī)森林的‘平均’特性,會(huì)使得它的方差減小,而且方差的減小補(bǔ)償了偏差的增大,因此總體而言是更好的模型。

    在構(gòu)建決策樹(shù)的時(shí)候,RF的每棵決策樹(shù)都最大可能的進(jìn)行生長(zhǎng)而不進(jìn)行剪枝;在對(duì)預(yù)測(cè)輸出進(jìn)行結(jié)合時(shí),RF通常對(duì)分類(lèi)問(wèn)題使用簡(jiǎn)單投票法,回歸任務(wù)使用簡(jiǎn)單平均法。
    小細(xì)節(jié):每個(gè)袋外數(shù)據(jù)會(huì)對(duì)相應(yīng)的樹(shù)作預(yù)測(cè),評(píng)估其誤差(稱(chēng)為袋外誤差);隨機(jī)森林中的絕大多數(shù)樹(shù)為Cart樹(shù)

    1.2 優(yōu)缺點(diǎn)

    隨機(jī)森林的優(yōu)點(diǎn):

  • 在數(shù)據(jù)集上表現(xiàn)良好,相對(duì)于其他算法有較大的優(yōu)勢(shì)(訓(xùn)練速度、預(yù)測(cè)準(zhǔn)確度);
  • 能夠處理很高維的數(shù)據(jù),并且不用特征選擇,而且在訓(xùn)練完后,給出特征的重要性。因此可做特征選擇;
  • 容易做成并行化方法
  • 噪聲小的時(shí)候不容易過(guò)擬合,因?yàn)楦鷅agging一樣減小variance
  • 隨機(jī)性的引入,增加了多樣性,泛化能力非常強(qiáng),抗噪聲能力強(qiáng)
  • RF的缺點(diǎn):

  • 噪聲較大的分類(lèi)或者回歸問(wèn)題上會(huì)過(guò)擬合
  • 隨機(jī)森林在解決回歸問(wèn)題時(shí),表現(xiàn)較差,這是因?yàn)樗⒉荒芙o出一個(gè)連續(xù)的輸出。
  • 對(duì)于小數(shù)據(jù)或者低維數(shù)據(jù)(特征較少的數(shù)據(jù)),可能不能產(chǎn)生很好的分類(lèi)。
  • 隨機(jī)森林給人的感覺(jué)就像一個(gè)黑盒子,無(wú)法控制模型內(nèi)部運(yùn)行(可控性差)。
  • 1.3其他面試點(diǎn)

  • 為什么隨機(jī)抽樣?
    保證基分類(lèi)器的多樣性,若每棵樹(shù)的樣本集都一樣,那訓(xùn)練的每棵決策樹(shù)都是一樣

  • 為什么要有放回的抽樣?
    保證樣本集間有重疊,若不放回,每個(gè)訓(xùn)練樣本集及其分布都不一樣,可能導(dǎo)致訓(xùn)練的各決策樹(shù)差異性很大,最終多數(shù)表決無(wú)法 “求同”,即最終多數(shù)表決相當(dāng)于“求同”過(guò)程。

  • 為什么不用全樣本訓(xùn)練?
    全樣本忽視了局部樣本的規(guī)律,不利于模型泛化能力

  • 為什么要隨機(jī)特征?
    隨機(jī)特征保證基分類(lèi)器的多樣性(差異性),最終集成的泛化性能可通過(guò)個(gè)體學(xué)習(xí)器之間的差異度而進(jìn)一步提升,從而提高泛化能力和抗噪能力

  • 需要剪枝嗎?
    不需要

  • RF與決策樹(shù)的區(qū)別?
    (1)RF是決策樹(shù)的集成;
    (2)RF中是“隨機(jī)屬性型”決策樹(shù)

  • RF為什么比bagging效率高?
    bagging無(wú)隨機(jī)特征,使得訓(xùn)練決策樹(shù)時(shí)效率更低

  • 2.Adaboost

    AdaBoost就是損失函數(shù)為指數(shù)損失的Boosting算法。

    2.1加法模型和指數(shù)損失函數(shù)

    2.2原理


    分類(lèi)器權(quán)值根據(jù)分類(lèi)的誤差或者正確率來(lái)計(jì)算。再根據(jù)分類(lèi)器權(quán)重求樣本權(quán)重。

    2.3算法流程

    弱分類(lèi)器–>計(jì)算誤差–>弱分類(lèi)器權(quán)重–>樣本權(quán)重–>強(qiáng)分類(lèi)器

    2.4弱分類(lèi)器權(quán)重公式推導(dǎo)

    看這里

    2.5優(yōu)缺點(diǎn)

    優(yōu)點(diǎn):
    1.可使用不同分類(lèi)器(LR,DT…)作為基分類(lèi)器
    2.精度高

    缺點(diǎn):
    1.對(duì)異常值敏感
    2.基分類(lèi)器數(shù)目(迭代次數(shù))不好設(shè)定
    3.對(duì)樣本不平衡敏感

    2.6其他面試點(diǎn)

    3.GBDT(梯度提升決策樹(shù))

    梯度提升樹(shù)(GBDT)原理小結(jié)

    3.1 原理

    GBDT 通過(guò)不斷減小訓(xùn)練過(guò)程產(chǎn)生的殘差,以及采用加法模型來(lái)達(dá)到將數(shù)據(jù)分類(lèi)或者回歸的算法。GBDT 通過(guò)多輪迭代,每輪迭代產(chǎn)生一個(gè)弱分類(lèi)器,每個(gè)分類(lèi)器在上一輪分類(lèi)器的殘差基礎(chǔ)上進(jìn)行訓(xùn)練,每個(gè)弱分類(lèi)器通過(guò)線性疊加成一個(gè)強(qiáng)分類(lèi)器。對(duì)弱分類(lèi)器的要求一般是足夠簡(jiǎn)單,并且是低方差和高偏差的。因?yàn)橛?xùn)練的過(guò)程是通過(guò)降低偏差來(lái)不斷提高最終分類(lèi)器的精度。

    GBDT與傳統(tǒng)的Boosting區(qū)別較大,它的每一次計(jì)算都是為了減少上一次的殘差,而為了消除殘差,我們可以在殘差減小的梯度方向上建立模型,所以說(shuō),在GradientBoost中,每個(gè)新的模型的建立是為了使得之前的模型的殘差往梯度下降的方法,與傳統(tǒng)的Boosting中關(guān)注正確錯(cuò)誤的樣本加權(quán)有著很大的區(qū)別。

    在GradientBoosting算法中,關(guān)鍵就是利用損失函數(shù)的負(fù)梯度方向在當(dāng)前模型的值作為殘差的近似值,進(jìn)而擬合一棵CART回歸樹(shù)。

    GBDT的會(huì)累加所有樹(shù)的結(jié)果,而這種累加是無(wú)法通過(guò)分類(lèi)完成的,因此GBDT的樹(shù)都是CART回歸樹(shù),而不是分類(lèi)樹(shù)(盡管GBDT調(diào)整后也可以用于分類(lèi)但不代表GBDT的樹(shù)為分類(lèi)樹(shù))。

    3.2GBDT 算法的流程?

    3.3GBDT 如何選擇特征 ?

    GBDT選擇特征的細(xì)節(jié)其實(shí)是想問(wèn)你CART Tree(最小基尼指數(shù))生成的過(guò)程。這里有一個(gè)前提,gbdt的弱分類(lèi)器默認(rèn)選擇的是CART TREE。其實(shí)也可以選擇其他弱分類(lèi)器的,選擇的前提是低方差和高偏差。框架服從boosting 框架即可。

    3.4GBDT如何構(gòu)建特征 (GBDT+LR)

    參考

    邏輯回歸本身是適合處理線性可分的數(shù)據(jù),如果我們想讓邏輯回歸處理非線性的數(shù)據(jù),其中一種方式便是組合不同特征,增強(qiáng)邏輯回歸對(duì)非線性分布的擬合能力。利用gbdt去產(chǎn)生有效的特征組合,以便用于邏輯回歸的訓(xùn)練,提升模型最終的效果。

    其實(shí)說(shuō)GBDT 能夠構(gòu)建特征并非很準(zhǔn)確,GBDT 本身是不能產(chǎn)生特征的,但是我們可以利用GBDT去產(chǎn)生特征的組合。
    我們使用 GBDT 生成了兩棵樹(shù),兩顆樹(shù)一共有五個(gè)葉子節(jié)點(diǎn)。我們將樣本 X 輸入到兩顆樹(shù)當(dāng)中去,樣本X 落在了第一棵樹(shù)的第二個(gè)葉子節(jié)點(diǎn),第二顆樹(shù)的第一個(gè)葉子節(jié)點(diǎn),于是我們便可以依次構(gòu)建一個(gè)五緯的特征向量,每一個(gè)緯度代表了一個(gè)葉子節(jié)點(diǎn),樣本落在這個(gè)葉子節(jié)點(diǎn)上面的話那么值為1,沒(méi)有落在該葉子節(jié)點(diǎn)的話,那么值為 0.
    于是對(duì)于該樣本,我們可以得到一個(gè)向量[0,1,0,1,0] 作為該樣本的組合特征,和原來(lái)的特征一起輸入到邏輯回歸當(dāng)中進(jìn)行訓(xùn)練。實(shí)驗(yàn)證明這樣會(huì)得到比較顯著的效果提升。

    3.5GBDT 如何用于分類(lèi)?

    看這里
    一些注意點(diǎn):

    • GBDT 無(wú)論用于分類(lèi)還是回歸一直都是使用的CART 回歸樹(shù)。不會(huì)因?yàn)槲覀兯x擇的任務(wù)是分類(lèi)任務(wù)就選用分類(lèi)樹(shù),這里面的核心是因?yàn)镚BDT每輪的訓(xùn)練是在上一輪的訓(xùn)練的殘差基礎(chǔ)之上進(jìn)行訓(xùn)練的。這里的殘差就是當(dāng)前模型的負(fù)梯度值 。這個(gè)要求每輪迭代的時(shí)候,弱分類(lèi)器的輸出的結(jié)果相減是有意義的。殘差相減是有意義的。
    • 如果選用的弱分類(lèi)器是分類(lèi)樹(shù),類(lèi)別相減是沒(méi)有意義的。上一輪輸出的是樣本 x 屬于 A類(lèi),本一輪訓(xùn)練輸出的是樣本 x 屬于 B類(lèi)。 A 和 B 很多時(shí)候甚至都沒(méi)有比較的意義,A 類(lèi)- B類(lèi)是沒(méi)有意義的。
    • GBDT 的多分類(lèi)是針對(duì)每個(gè)類(lèi)都獨(dú)立訓(xùn)練一個(gè) CART Tree。

    3.6GBDT的優(yōu)點(diǎn)和局限性

    查看《百面機(jī)器學(xué)習(xí)》
    優(yōu)點(diǎn):

  • 預(yù)測(cè)階段的計(jì)算速度快,樹(shù)與樹(shù)之間可并行化計(jì)算
  • 在分布稠密的數(shù)據(jù)集上,泛化能力和表達(dá)能力都很好
  • 采用決策樹(shù)作為弱分類(lèi)器使得GBDT具有較好的解釋性和魯棒性,能夠自動(dòng)發(fā)現(xiàn)特征間的高階關(guān)系,并且不需要對(duì)數(shù)據(jù)進(jìn)行特殊的數(shù)據(jù)處理和歸一化等
  • 局限性:

  • GBDT在高維稀疏的數(shù)據(jù)集上表現(xiàn)不如支持向量機(jī)或者神經(jīng)網(wǎng)絡(luò)
  • 在處理文本分類(lèi)特征問(wèn)題上,相對(duì)其他模型的優(yōu)勢(shì)不如它在處理數(shù)值特征時(shí)明顯
  • 訓(xùn)練過(guò)程現(xiàn)需要串行訓(xùn)練,只能在決策樹(shù)內(nèi)部采用一些局部并行的手段提高訓(xùn)練速度
  • 3.7梯度提升和梯度下降的區(qū)別和聯(lián)系

    兩者都是在每一輪迭代中,利用損失函數(shù)相對(duì)于模型的負(fù)梯度方向的信息來(lái)對(duì)當(dāng)前模型進(jìn)行更新,只不過(guò)在梯度下降中,模型是以參數(shù)化形式表示,從而模型的更新等價(jià)于參數(shù)的更新,而在梯度提升中,模型并不需要進(jìn)行參數(shù)化表示,而是直接定義在損失函數(shù)空間中,從而大大擴(kuò)展了可以使用的模型種類(lèi)。(見(jiàn)百面機(jī)器學(xué)習(xí))

    3.8RF、GBDT的區(qū)別

    • 組成隨機(jī)森林的數(shù)可是分類(lèi)樹(shù)也可以是回歸樹(shù),而GBDT只由回歸樹(shù)組成
    • 組成隨機(jī)森林的數(shù)可是并行生成,而GBDT只能是串行生成
    • 隨機(jī)森林的結(jié)果是多棵樹(shù)表決決定,而GBDT則是多棵樹(shù)累加之和
    • 隨機(jī)森林對(duì)異常值不敏感,而GBDT對(duì)異常值比較敏感
    • 隨機(jī)森林是通過(guò)減少模型的方差來(lái)提高性能,而GBDT是減少模型的偏差來(lái)提高性能

    3.9GBDT怎樣設(shè)置單棵樹(shù)的停止生長(zhǎng)條件?

    • 節(jié)點(diǎn)分裂時(shí)的最小樣本數(shù)
    • 樹(shù)的最大深度
    • 最多葉子結(jié)點(diǎn)數(shù)
    • Loss滿足約束條件

    3.10GBDT如何評(píng)估特征的權(quán)重大小?

    • 計(jì)算每個(gè)特征在訓(xùn)練集下的信息增益,最后計(jì)算每個(gè)特征信息增益與所有特征信息增益之和的比為權(quán)重值。
    • 借鑒投票機(jī)制。用相同的GBDT參數(shù)對(duì)w每個(gè)特征訓(xùn)練出一個(gè)模型,然后在該模型下計(jì)算每個(gè)特征正確分類(lèi)的個(gè)數(shù),最后計(jì)算每個(gè)特征正確分類(lèi)的個(gè)數(shù)與所有正確分類(lèi)個(gè)數(shù)之和的比例為權(quán)重值。

    3.11GBDT中哪些部分可以并行?

    • 計(jì)算每個(gè)樣本的負(fù)梯度時(shí)
    • 分裂挑選最佳特征及其分割點(diǎn)時(shí),對(duì)特征計(jì)算相應(yīng)的誤差及均值時(shí)
    • 更新每個(gè)樣本的負(fù)梯度時(shí)
    • 最后預(yù)測(cè)的過(guò)程當(dāng)中,每個(gè)樣本將之前的所有樹(shù)的結(jié)果累加的時(shí)候

    3.12如何防止過(guò)擬合?

    • 增加樣本,移除噪聲
    • 減少特征,保留一些重要的特征
    • 對(duì)樣本進(jìn)行采樣,就是在構(gòu)建樹(shù)的時(shí)候,不是把所有的樣本都作為輸入,而是選擇一部分?jǐn)?shù)據(jù)作為子集
    • 對(duì)特征進(jìn)行采樣,和對(duì)樣本采樣基本一致,就是在每次建樹(shù)的時(shí)候只對(duì)部分的特征進(jìn)行切分(XgBoost)

    3.13GBDT當(dāng)增加樣本數(shù)量時(shí),訓(xùn)練時(shí)長(zhǎng)是線性增加嗎?

    NO,因?yàn)樯蓡晤w決策樹(shù)時(shí),對(duì)于 損失函數(shù)極小值與樣本數(shù)量N不是線性相關(guān)

    3.14當(dāng)增加樹(shù)的顆數(shù)時(shí),訓(xùn)練時(shí)長(zhǎng)是線性增加嗎?

    NO,因?yàn)槊款w樹(shù)的生成時(shí)間復(fù)雜度O(N)不同

    3.15當(dāng)增加一個(gè)棵樹(shù)葉子節(jié)點(diǎn)數(shù)目時(shí),訓(xùn)練時(shí)長(zhǎng)是線性增加嗎?

    NO,葉子節(jié)點(diǎn)數(shù)和每棵樹(shù)的生成的時(shí)間復(fù)雜度O(N)不成正比

    3.16每個(gè)節(jié)點(diǎn)上都保存什么信息?

    中間節(jié)點(diǎn)保存某個(gè)特征的分割值,葉節(jié)點(diǎn)保存預(yù)測(cè)是某個(gè)類(lèi)別的概率

    4.XgBoost

    這個(gè)寫(xiě)得超詳細(xì)。
    還有這個(gè)
    原始的GBDT算法基于經(jīng)驗(yàn)損失函數(shù)的負(fù)梯度來(lái)構(gòu)建新的決策樹(shù),只是在局測(cè)試構(gòu)建完成后再進(jìn)行剪枝。而XGboost在決策樹(shù)構(gòu)建階段就加入正則項(xiàng),起到一定預(yù)剪枝的作用。正則項(xiàng)包括兩部分,T表示葉子結(jié)點(diǎn)的個(gè)數(shù),w表示葉子節(jié)點(diǎn)的分?jǐn)?shù)。γ可以控制葉子結(jié)點(diǎn)的個(gè)數(shù),λ可以控制葉子節(jié)點(diǎn)的分?jǐn)?shù)不會(huì)過(guò)大,防止過(guò)擬合。
    損失函數(shù)為:

    正則項(xiàng)為:

    4.1XgBoost有哪些特點(diǎn)

  • 每個(gè)葉子節(jié)點(diǎn)的值w是最優(yōu)化求出來(lái)的,不是啥平均值或規(guī)則指定的,這個(gè)算是一個(gè)思路上的新穎吧;
  • 正則化防止過(guò)擬合的技術(shù),上述看到了,直接loss function里面就有;
  • 支持自定義loss function,只要能泰勒展開(kāi)(能求一階導(dǎo)和二階導(dǎo))就行;
  • 實(shí)現(xiàn)后剪枝
  • xgboost還支持設(shè)置樣本權(quán)重,這個(gè)權(quán)重體現(xiàn)在梯度g和二階梯度h上,是不是有點(diǎn)adaboost的意思,重點(diǎn)關(guān)注某些樣本
  • Shrinkage,你可以是幾個(gè)回歸樹(shù)的葉子節(jié)點(diǎn)之和為預(yù)測(cè)值,也可以是加權(quán),比如第一棵樹(shù)預(yù)測(cè)值為3.3,label為4.0,第二棵樹(shù)才學(xué)0.7,….再后面的樹(shù)還學(xué)個(gè)鬼,所以給他打個(gè)折扣,比如3折,那么第二棵樹(shù)訓(xùn)練的殘差為4.0-3.3*0.3=3.01,這就可以發(fā)揮了啦,以此類(lèi)推,作用是啥,防止過(guò)擬合,如果對(duì)于“偽殘差”學(xué)習(xí),那更像梯度下降里面的學(xué)習(xí)率;
    (以下4.2,4.3,4.4也是XgBoost的特點(diǎn))
  • 4.2對(duì)于連續(xù)值如何進(jìn)行分割?

    方法名字:Weighted Quantile Sketch
    以收入為例:每個(gè)樣本在節(jié)點(diǎn)(將要分裂的節(jié)點(diǎn))處的loss function一階導(dǎo)數(shù)gi和二階導(dǎo)數(shù)hi,衡量預(yù)測(cè)值變化帶來(lái)的loss function變化,舉例來(lái)說(shuō),將樣本“月收入”進(jìn)行升序排列,5k、5.2k、5.3k、…、52k,分割線為“收入1”、“收入2”、…、“收入j”,滿足(每個(gè)間隔的樣本的hi之和/總樣本的hi之和)為某個(gè)百分比?(我這個(gè)是近似的說(shuō)法),那么可以一共分成大約1/?個(gè)分裂點(diǎn)。

    4.3對(duì)于特征缺失值如何分類(lèi)?

    假設(shè)樣本的第i個(gè)特征缺失時(shí),無(wú)法利用該特征對(duì)樣本進(jìn)行劃分,這里的做法是將該樣本默認(rèn)地分到指定的子節(jié)點(diǎn),至于具體地分到哪個(gè)節(jié)點(diǎn)還需要某算法來(lái)計(jì)算,算法的主要思想是,分別假設(shè)特征缺失的樣本屬于右子樹(shù)和左子樹(shù),而且只在不缺失的樣本上迭代,分別計(jì)算缺失樣本屬于右子樹(shù)和左子樹(shù)的增益,選擇增益最大的方向?yàn)槿笔?shù)據(jù)的默認(rèn)方向,論文中“枚舉”指的不是枚舉每個(gè)缺失樣本在左邊還是在右邊,而是枚舉缺失樣本整體在左邊,還是在右邊兩種情況。 分裂點(diǎn)還是只評(píng)估特征不缺失的樣本。

    4.4XGBoost怎么做到并行化

    這個(gè)地方有必要說(shuō)明下,因?yàn)檫@是xgboost的閃光點(diǎn),直接的效果是訓(xùn)練速度快,boosting技術(shù)中下一棵樹(shù)依賴(lài)上述樹(shù)的訓(xùn)練和預(yù)測(cè),所以樹(shù)與樹(shù)之間應(yīng)該是只能串行!但在在選擇最佳分裂點(diǎn),進(jìn)行枚舉的時(shí)候并行!(據(jù)說(shuō)恰好這個(gè)也是樹(shù)形成最耗時(shí)的階段)。XGBoost的并行是在特征粒度上的。我們知道,決策樹(shù)的學(xué)習(xí)最耗時(shí)的一個(gè)步驟就是對(duì)特征的值進(jìn)行排序(因?yàn)橐_定最佳分割點(diǎn)),XGBoost在訓(xùn)練之前,預(yù)先對(duì)數(shù)據(jù)進(jìn)行了排序,然后保存為block結(jié)構(gòu),后面的迭代中重復(fù)地使用這個(gè)結(jié)構(gòu),大大減小計(jì)算量。這個(gè)block結(jié)構(gòu)也使得并行成為了可能,在進(jìn)行節(jié)點(diǎn)的分裂時(shí),需要計(jì)算每個(gè)特征的增益,最終選增益最大的那個(gè)特征去做分裂,那么各個(gè)特征的增益計(jì)算就可以開(kāi)多線程進(jìn)行

    4.5XgBoost和GBDT的區(qū)別和聯(lián)系

    (2二階導(dǎo)數(shù)+3基分類(lèi)器+4缺失值)(防止過(guò)擬合:1正則項(xiàng)+5特征采樣+6縮減)

  • 在使用CART作為基分類(lèi)器的時(shí)候,XGBoost加入正則項(xiàng)來(lái)控制模型的復(fù)雜度,從權(quán)衡方差偏差來(lái)看,它降低了模型的方差,有利于防止過(guò)擬合,提高模型泛化能力
  • GBDT在模型訓(xùn)練的時(shí)候只使用代價(jià)函數(shù)的一階導(dǎo)數(shù)信息,XGBoost對(duì)代價(jià)函數(shù)進(jìn)行二階泰勒展開(kāi),可以同時(shí)使用一階和二階導(dǎo)數(shù)
  • 傳統(tǒng)的GBDT采用CART作為基分類(lèi)器,XGBoost支持多種類(lèi)型的基分類(lèi)器,比如線性分類(lèi)器,這個(gè)時(shí)候XGBoost相當(dāng)于L1和L2正則化的邏輯斯蒂回歸(分類(lèi))或者線性回歸(回歸)
  • GBDT沒(méi)有設(shè)計(jì)對(duì)缺失值的處理,XGBoost能夠自動(dòng)學(xué)習(xí)出缺失值的處理策略
  • GBDT在每輪迭代時(shí)使用全部的數(shù)據(jù),XGBoost采用與隨機(jī)森林相似的策略,支持對(duì)數(shù)據(jù)進(jìn)行列采樣(列抽樣即隨機(jī)特征采樣),不僅防止過(guò)擬合,還能減少計(jì)算
  • shrinkage(縮減),相當(dāng)于學(xué)習(xí)速率(XGBoost中的eta)。XGBoost在進(jìn)行完一次迭代時(shí),會(huì)將葉子節(jié)點(diǎn)的權(quán)值乘上該系數(shù),主要是為了削弱每棵樹(shù)的影響,讓后面有更大的學(xué)習(xí)空間。(GBDT也有學(xué)習(xí)速率)
  • 4.6.XGBoost和深度學(xué)習(xí)的區(qū)別?

    Xgboost第一感覺(jué)就是防止過(guò)擬合+各種支持分布式/并行,所以一般傳言這種大殺器效果好(集成學(xué)習(xí)的高配)+訓(xùn)練效率高(分布式),與深度學(xué)習(xí)相比,對(duì)樣本量和特征數(shù)據(jù)類(lèi)型要求沒(méi)那么苛刻,適用范圍廣。
    不同的機(jī)器學(xué)習(xí)模型適用于不同類(lèi)型的任務(wù)。深度神經(jīng)網(wǎng)絡(luò)通過(guò)對(duì)時(shí)空位置建模,能夠很好地捕獲圖像、語(yǔ)音、文本等高維數(shù)據(jù)。而基于樹(shù)模型的XGBoost則能很好地處理表格數(shù)據(jù),同時(shí)還擁有一些深度神經(jīng)網(wǎng)絡(luò)所沒(méi)有的特性(如:模型的可解釋性、輸入數(shù)據(jù)的不變性、更易于調(diào)參等)。

    4.7.xgboost為什么使用二階泰勒展開(kāi)

    關(guān)于Xgboost用泰勒二階展開(kāi)的原因,主要有兩點(diǎn):

    • Xgboost官網(wǎng)上有說(shuō),當(dāng)目標(biāo)函數(shù)是MSE時(shí),展開(kāi)是一階項(xiàng)(殘差)+二階項(xiàng)的形式(官網(wǎng)說(shuō)這是一個(gè)nice form),而其他目標(biāo)函數(shù),如logloss的展開(kāi)式就沒(méi)有這樣的形式。為了能有個(gè)統(tǒng)一的形式,所以采用泰勒展開(kāi)來(lái)得到二階項(xiàng),這樣就能把MSE推導(dǎo)的那套直接復(fù)用到其他自定義損失函數(shù)上。簡(jiǎn)短來(lái)說(shuō),就是為了統(tǒng)一損失函數(shù)求導(dǎo)的形式以支持自定義損失函數(shù)。這是從為什么會(huì)想到引入泰勒二階的角度來(lái)說(shuō)的。
    • 二階信息本身就能讓梯度收斂更快更準(zhǔn)確。這一點(diǎn)在優(yōu)化算法里的牛頓法里已經(jīng)證實(shí)了。可以簡(jiǎn)單認(rèn)為一階導(dǎo)指引梯度方向,二階導(dǎo)指引梯度方向如何變化。這是從二階導(dǎo)本身的性質(zhì),也就是為什么要用泰勒二階展開(kāi)的角度來(lái)說(shuō)的。

    P.S.為什么要在形式上與MSE統(tǒng)一?因?yàn)镸SE是最普遍且常用的損失函數(shù),而且求導(dǎo)最容易,求導(dǎo)后的形式也十分簡(jiǎn)單。所以理論上只要損失函數(shù)形式與MSE統(tǒng)一了,那就只用推導(dǎo)MSE就好啦

    5.lightGBM

    5.1LGB原理

    參考
    XGB采用了直方圖加速,只需要遍歷幾個(gè)可能的分裂節(jié)點(diǎn)就好了!它也不需要計(jì)算所有樣本吖!

    這里的意思是,XGB雖然每次只需要遍歷幾個(gè)可能的分裂節(jié)點(diǎn),然后比較每個(gè)分裂節(jié)點(diǎn)的信息增益,選擇最大的那個(gè)進(jìn)行分割,但比較時(shí)需要考慮所有樣本帶來(lái)的信息增益。而LGB只需采用少量的樣本計(jì)算信息增益,所以速度會(huì)快很多。

    那么問(wèn)題就來(lái)了,XGB如果選少量的樣本算信息增益,該如何保證把信息損失降到最低呢?
    LGB選擇梯度大的樣本來(lái)計(jì)算信息增益。如果一個(gè)樣本的梯度較小,證明這個(gè)樣本訓(xùn)練的誤差已經(jīng)很小了,所以不需要計(jì)算了。我們?cè)赬GB的那篇文章中說(shuō)過(guò),GBDT的梯度算出來(lái)實(shí)際上就是殘差,梯度小殘差就小,所以該樣本擬合較好,不需要去擬合他們了。

    這聽(tīng)起來(lái)仿佛很有道理,但問(wèn)題是丟掉他們會(huì)改變數(shù)據(jù)的分布,還是無(wú)法避免信息損失,進(jìn)而導(dǎo)致精度下降,所以LGB提出了一個(gè)很樸實(shí)無(wú)華且枯燥的方法進(jìn)行優(yōu)化。
    LGB的優(yōu)化方法是,在保留大梯度樣本的同時(shí),隨機(jī)地保留一些小梯度樣本,同時(shí)放大了小梯度樣本帶來(lái)的信息增益。

    除了通過(guò)部分樣本計(jì)算信息增益以外,LGB還內(nèi)置了特征降維技術(shù),思想就是合并那些沖突小的稀疏特征。
    舉個(gè)例子,對(duì)于一列特征[1,nan,1,nan,1]和一列特征[nan,1,nan,1,nan],他們正好可以合并成一列特征[1,2,1,2,1]。LGB的目標(biāo)就是在于找到這樣的特征并且將他們合并在一起。

    至于LGB為什么比XGB的精度高這一點(diǎn),我的理解是選擇梯度大(殘差大)樣本來(lái)進(jìn)行特征分裂生成的樹(shù),借鑒了Adaboost的更改樣本權(quán)重的思想。每棵樹(shù)針對(duì)某些特定訓(xùn)練樣本有著較好的劃分能力,導(dǎo)致每棵樹(shù)之間的異質(zhì)性較大,對(duì)于效果近似但異質(zhì)性大的模型加權(quán)往往會(huì)帶來(lái)更大的提升。

    5.2.XGboost的不足之處

    1)每輪迭代時(shí),都需要遍歷整個(gè)訓(xùn)練數(shù)據(jù)多次。如果把整個(gè)訓(xùn)練數(shù)據(jù)裝進(jìn)內(nèi)存則會(huì)限制訓(xùn)練數(shù)據(jù)的大小;如果不裝進(jìn)內(nèi)存,反復(fù)地讀寫(xiě)訓(xùn)練數(shù)據(jù)又會(huì)消耗非常大的時(shí)間。
    2)預(yù)排序方法的時(shí)間和空間的消耗都很大

    LGBM最大的優(yōu)勢(shì)就是快。

    5.3.XGBoost和LGBM樹(shù)的生長(zhǎng)方式

    • XGBoost按層生長(zhǎng)的方式,有利于工程優(yōu)化,但對(duì)學(xué)習(xí)模型效率不高
    • LightGBM是直接去選擇獲得最大收益的結(jié)點(diǎn)來(lái)展開(kāi),這樣呢LightGBM能夠在更小的計(jì)算代價(jià)上建立我們需要的決策樹(shù)。當(dāng)然在這樣的算法中我們也需要控制樹(shù)的深度和每個(gè)葉子結(jié)點(diǎn)的最小數(shù)據(jù)量,從而減少過(guò)擬合。

    5.4.XGBoost和LGBM樹(shù)的劃分方式

    • XGBoost中采用預(yù)排序的方法,計(jì)算過(guò)程當(dāng)中是按照value的排序,逐個(gè)數(shù)據(jù)樣本來(lái)計(jì)算劃分收益,這樣的算法能夠精確的找到最佳劃分值,但是代價(jià)比較大同時(shí)也沒(méi)有較好的推廣性。
    • LightGBM直方圖算法:將這些精確的連續(xù)的每一個(gè)value劃分到一系列離散的域中,也就是筒子里。以浮點(diǎn)型數(shù)據(jù)來(lái)舉例,一個(gè)區(qū)間的值會(huì)被作為一個(gè)筒,然后以這些筒為精度單位的直方圖來(lái)做。這樣一來(lái),數(shù)據(jù)的表達(dá)變得更加簡(jiǎn)化,減少了內(nèi)存的使用,而且直方圖帶來(lái)了一定的正則化的效果,能夠使我們做出來(lái)的模型避免過(guò)擬合且具有更好的推廣性。另外數(shù)據(jù)結(jié)構(gòu)的變化使得在細(xì)節(jié)處的變化理上效率會(huì)不同.
      按照bin來(lái)索引“直方圖”,所以不用按照每個(gè)“特征”來(lái)排序,也不用一一去對(duì)比不同“特征”的值,大大的減少了運(yùn)算量。

    5.5.支持類(lèi)別特征

    傳統(tǒng)的機(jī)器學(xué)習(xí)一般不能支持直接輸入類(lèi)別特征,需要先轉(zhuǎn)化成多維的0-1特征,這樣無(wú)論在空間上還是時(shí)間上效率都不高。LightGBM通過(guò)更改決策樹(shù)算法的決策規(guī)則,直接原生支持類(lèi)別特征,不需要轉(zhuǎn)化,提高了近8倍的速度

    5.6.支持并行學(xué)習(xí)

    參考
    LightGBM原生支持并行學(xué)習(xí),目前支持特征并行(Featrue Parallelization)和數(shù)據(jù)并行(Data Parallelization)兩種,還有一種是基于投票的數(shù)據(jù)并行(Voting Parallelization)

    • 特征并行的主要思想是在不同機(jī)器、在不同的特征集合上分別尋找最優(yōu)的分割點(diǎn),然后在機(jī)器間同步最優(yōu)的分割點(diǎn)。
    • 數(shù)據(jù)并行則是讓不同的機(jī)器先在本地構(gòu)造直方圖,然后進(jìn)行全局的合并,最后在合并的直方圖上面尋找最優(yōu)分割點(diǎn)。

    LightGBM針對(duì)這兩種并行方法都做了優(yōu)化。

    • 特征并行算法中,通過(guò)在本地保存全部數(shù)據(jù)避免對(duì)數(shù)據(jù)切分結(jié)果的通信。
    • 數(shù)據(jù)并行中使用分散規(guī)約 (Reduce scatter) 把直方圖合并的任務(wù)分?jǐn)偟讲煌臋C(jī)器,降低通信和計(jì)算,并利用直方圖做差,進(jìn)一步減少了一半的通信量。
    • 基于投票的數(shù)據(jù)并行(Voting Parallelization)則進(jìn)一步優(yōu)化數(shù)據(jù)并行中的通信代價(jià),使通信代價(jià)變成常數(shù)級(jí)別。在數(shù)據(jù)量很大的時(shí)候,使用投票并行可以得到非常好的加速效果。

    5.7lightGBM與XGboost對(duì)比

    1、xgboost采用的是level-wise的分裂策略,而lightGBM采用了leaf-wise的策略,區(qū)別是xgboost對(duì)每一層所有節(jié)點(diǎn)做無(wú)差別分裂,可能有些節(jié)點(diǎn)的增益非常小,對(duì)結(jié)果影響不大,但是xgboost也進(jìn)行了分裂,帶來(lái)了不必要的開(kāi)銷(xiāo)。 leaft-wise的做法是在當(dāng)前所有葉子節(jié)點(diǎn)中選擇分裂收益最大的節(jié)點(diǎn)進(jìn)行分裂,如此遞歸進(jìn)行,很明顯leaf-wise這種做法容易過(guò)擬合,因?yàn)槿菀紫萑氡容^高的深度中,因此需要對(duì)最大深度做限制,從而避免過(guò)擬合。
      
    2、lightgbm使用了基于histogram直方圖的決策樹(shù)算法,這一點(diǎn)不同于xgboost中的 exact預(yù)排序算法,histogram算法在內(nèi)存和計(jì)算代價(jià)上都有不小優(yōu)勢(shì)。

    • 內(nèi)存上優(yōu)勢(shì):很明顯,直方圖算法的內(nèi)存消耗為(#data* #features * 1Bytes)(因?yàn)閷?duì)特征分桶后只需保存特征離散化之后的值),而xgboost的預(yù)排序算法內(nèi)存消耗為:(2 * #data * #features* 4Bytes),因?yàn)?strong>xgboost既要保存原始feature的值,也要保存這個(gè)值的順序索引,這些值需要32位的浮點(diǎn)數(shù)來(lái)保存。
    • 計(jì)算上的優(yōu)勢(shì),預(yù)排序算法在選擇好分裂特征計(jì)算分裂收益時(shí)需要遍歷所有樣本,時(shí)間為(#data),而直方圖算法只需要遍歷桶就行了,時(shí)間為(#bin)

    5.8直方圖算法

    總結(jié)

    以上是生活随笔為你收集整理的一天1个机器学习知识点(四)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。