一天1个机器学习知识点(四)
陸陸續(xù)續(xù)整理的機(jī)器學(xué)習(xí)的知識點(diǎn),資料大多數(shù)來自網(wǎng)上,不做盈利目的,如果侵權(quán)請告知即刪!如果文章中有錯誤的地方還請各位同學(xué)指正,,一起學(xué)習(xí),一起進(jìn)步!
每天都在更新中,記得收藏,每天進(jìn)步一點(diǎn)點(diǎn)!!
一天1個機(jī)器學(xué)習(xí)知識點(diǎn)(一)(決策樹,有無監(jiān)督學(xué)習(xí),SVM,梯度下降法,邏輯回歸,NB)
一天1個機(jī)器學(xué)習(xí)知識點(diǎn)(二)(KNN,Kmeans,偏差方差,參數(shù)非參數(shù)模型,生成模型判別模型,正則化,概率,牛頓法,熵)
一天1個機(jī)器學(xué)習(xí)知識點(diǎn)(三)(損失函數(shù),生成模型和判別模型,DBSCAN,OPTICS)
一天1個機(jī)器學(xué)習(xí)知識點(diǎn)(四)這部分主要更新集成學(xué)習(xí)的內(nèi)容(RF,adaboost,GBDT,XGBoost等)
一天1個機(jī)器學(xué)習(xí)知識點(diǎn)(五)(特征工程相關(guān),PCA,LDA等)
穿越---->深度學(xué)習(xí)知識點(diǎn)!!
目錄
- 1.bagging和boosting
- 1.1 bagging(套袋法)
- 1.2boosting
- 1.3 區(qū)別
- 1.4為什么說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弱分類器權(quán)重公式推導(dǎo)
- 2.5優(yōu)缺點(diǎn)
- 2.6其他面試點(diǎn)
- 3.GBDT(梯度提升決策樹)
- 3.1 原理
- 3.2GBDT 算法的流程?
- 3.3GBDT 如何選擇特征 ?
- 3.4GBDT如何構(gòu)建特征 (GBDT+LR)
- 3.5GBDT 如何用于分類?
- 3.6GBDT的優(yōu)點(diǎn)和局限性
- 3.7梯度提升和梯度下降的區(qū)別和聯(lián)系
- 3.8RF、GBDT的區(qū)別
- 3.9GBDT怎樣設(shè)置單棵樹的停止生長條件?
- 3.10GBDT如何評估特征的權(quán)重大小?
- 3.11GBDT中哪些部分可以并行?
- 3.12如何防止過擬合?
- 3.13GBDT當(dāng)增加樣本數(shù)量時,訓(xùn)練時長是線性增加嗎?
- 3.14當(dāng)增加樹的顆數(shù)時,訓(xùn)練時長是線性增加嗎?
- 3.15當(dāng)增加一個棵樹葉子節(jié)點(diǎn)數(shù)目時,訓(xùn)練時長是線性增加嗎?
- 3.16每個節(jié)點(diǎn)上都保存什么信息?
- 4.XgBoost
- 4.1XgBoost有哪些特點(diǎn)
- 4.2對于連續(xù)值如何進(jìn)行分割?
- 4.3對于特征缺失值如何分類?
- 4.4XGBoost怎么做到并行化
- 4.5XgBoost和GBDT的區(qū)別和聯(lián)系
- 4.6.XGBoost和深度學(xué)習(xí)的區(qū)別?
- 4.7.xgboost為什么使用二階泰勒展開
- 5.lightGBM
- 5.1LGB原理
- 5.2.XGboost的不足之處
- 5.3.XGBoost和LGBM樹的生長方式
- 5.4.XGBoost和LGBM樹的劃分方式
- 5.5.支持類別特征
- 5.6.支持并行學(xué)習(xí)
- 5.7lightGBM與XGboost對比
- 5.8直方圖算法
1.bagging和boosting
1.1 bagging(套袋法)
其算法過程如下:
1.2boosting
AdaBoosting方式每次使用的是全部的樣本,每輪訓(xùn)練改變樣本的權(quán)重。下一輪訓(xùn)練的目標(biāo)是找到一個函數(shù)f 來擬合上一輪的殘差。當(dāng)殘差足夠小或者達(dá)到設(shè)置的最大迭代次數(shù)則停止。Boosting會減小在上一輪訓(xùn)練正確的樣本的權(quán)重,增大錯誤樣本的權(quán)重。(對的殘差小,錯的殘差大)
梯度提升的Boosting方式是使用代價函數(shù)對上一輪訓(xùn)練出的模型函數(shù)f的偏導(dǎo)來擬合殘差。
1.3 區(qū)別
1)樣本選擇上:
Bagging:訓(xùn)練集是在原始集中有放回選取的,從原始集中選出的各輪訓(xùn)練集之間是獨(dú)立的。
Boosting:每一輪的訓(xùn)練集不變,只是訓(xùn)練集中每個樣例在分類器中的權(quán)重發(fā)生變化。而權(quán)值是根據(jù)上一輪的分類結(jié)果進(jìn)行調(diào)整。
2)樣例權(quán)重:
Bagging:使用均勻取樣,每個樣例的權(quán)重相等。
Boosting:根據(jù)錯誤率不斷調(diào)整樣例的權(quán)值,錯誤率越大則權(quán)重越大。
3)預(yù)測函數(shù)權(quán)重:
Bagging:所有預(yù)測函數(shù)的權(quán)重相等。
Boosting:每個弱分類器都有相應(yīng)的權(quán)重,對于分類誤差小的分類器會有更大的權(quán)重。
4)并行計算:
Bagging:各個預(yù)測函數(shù)可以并行生成
Boosting:各個預(yù)測函數(shù)只能順序生成,因?yàn)楹笠粋€模型參數(shù)需要前一輪模型的結(jié)果。
1.4為什么說bagging是減少variance,而boosting是減少bias?
關(guān)于偏差和方差在機(jī)器學(xué)習(xí)系列第二篇。
- bagging的方法主要是隨機(jī)取樣,每個模型的目標(biāo)函數(shù)跟單模型并沒有很大的區(qū)別,所以bias變化不大,而多個模型的集成降低異常點(diǎn)的影響,這兩個方法都可以降低variance。
- boosting的方法通過殘差學(xué)習(xí),最后得預(yù)測值發(fā)生了改變,是由多個模型預(yù)測值與每個模型權(quán)重重新表示,糾錯之后的boosting預(yù)測值自然是更接近真實(shí)值,因此bais偏離真實(shí)值的誤差會降低。(我覺得根據(jù)這個可以用在stacking的模型選擇上)
1.隨機(jī)森林(RF)
1.1原理
Random Forest(隨機(jī)森林)是Bagging的擴(kuò)展變體,它在以決策樹為基學(xué)習(xí)器構(gòu)建Bagging集成的基礎(chǔ)上,進(jìn)一步在決策樹的訓(xùn)練過程中引入了隨機(jī)特征選擇,因此可以概括RF包括四個部分:1、隨機(jī)選擇樣本(放回抽樣);2、隨機(jī)選擇特征;3、構(gòu)建決策樹;4、隨機(jī)森林投票(平均)。
隨機(jī)選擇樣本和Bagging相同,隨機(jī)選擇特征是指在樹的構(gòu)建中,會從樣本集的特征集合中隨機(jī)選擇部分特征,然后再從這個子集中選擇最優(yōu)的屬性用于劃分,這種隨機(jī)性導(dǎo)致隨機(jī)森林的偏差會有稍微的增加(相比于單棵不隨機(jī)樹),但是由于隨機(jī)森林的‘平均’特性,會使得它的方差減小,而且方差的減小補(bǔ)償了偏差的增大,因此總體而言是更好的模型。
在構(gòu)建決策樹的時候,RF的每棵決策樹都最大可能的進(jìn)行生長而不進(jìn)行剪枝;在對預(yù)測輸出進(jìn)行結(jié)合時,RF通常對分類問題使用簡單投票法,回歸任務(wù)使用簡單平均法。
小細(xì)節(jié):每個袋外數(shù)據(jù)會對相應(yīng)的樹作預(yù)測,評估其誤差(稱為袋外誤差);隨機(jī)森林中的絕大多數(shù)樹為Cart樹
1.2 優(yōu)缺點(diǎn)
隨機(jī)森林的優(yōu)點(diǎn):
RF的缺點(diǎn):
1.3其他面試點(diǎn)
為什么隨機(jī)抽樣?
保證基分類器的多樣性,若每棵樹的樣本集都一樣,那訓(xùn)練的每棵決策樹都是一樣
為什么要有放回的抽樣?
保證樣本集間有重疊,若不放回,每個訓(xùn)練樣本集及其分布都不一樣,可能導(dǎo)致訓(xùn)練的各決策樹差異性很大,最終多數(shù)表決無法 “求同”,即最終多數(shù)表決相當(dāng)于“求同”過程。
為什么不用全樣本訓(xùn)練?
全樣本忽視了局部樣本的規(guī)律,不利于模型泛化能力
為什么要隨機(jī)特征?
隨機(jī)特征保證基分類器的多樣性(差異性),最終集成的泛化性能可通過個體學(xué)習(xí)器之間的差異度而進(jìn)一步提升,從而提高泛化能力和抗噪能力
需要剪枝嗎?
不需要
RF與決策樹的區(qū)別?
(1)RF是決策樹的集成;
(2)RF中是“隨機(jī)屬性型”決策樹
RF為什么比bagging效率高?
bagging無隨機(jī)特征,使得訓(xùn)練決策樹時效率更低
2.Adaboost
AdaBoost就是損失函數(shù)為指數(shù)損失的Boosting算法。
2.1加法模型和指數(shù)損失函數(shù)
2.2原理
分類器權(quán)值根據(jù)分類的誤差或者正確率來計算。再根據(jù)分類器權(quán)重求樣本權(quán)重。
2.3算法流程
(弱分類器–>計算誤差–>弱分類器權(quán)重–>樣本權(quán)重–>強(qiáng)分類器)
2.4弱分類器權(quán)重公式推導(dǎo)
看這里
2.5優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1.可使用不同分類器(LR,DT…)作為基分類器
2.精度高
缺點(diǎn):
1.對異常值敏感
2.基分類器數(shù)目(迭代次數(shù))不好設(shè)定
3.對樣本不平衡敏感
2.6其他面試點(diǎn)
3.GBDT(梯度提升決策樹)
梯度提升樹(GBDT)原理小結(jié)
3.1 原理
GBDT 通過不斷減小訓(xùn)練過程產(chǎn)生的殘差,以及采用加法模型來達(dá)到將數(shù)據(jù)分類或者回歸的算法。GBDT 通過多輪迭代,每輪迭代產(chǎn)生一個弱分類器,每個分類器在上一輪分類器的殘差基礎(chǔ)上進(jìn)行訓(xùn)練,每個弱分類器通過線性疊加成一個強(qiáng)分類器。對弱分類器的要求一般是足夠簡單,并且是低方差和高偏差的。因?yàn)橛?xùn)練的過程是通過降低偏差來不斷提高最終分類器的精度。
GBDT與傳統(tǒng)的Boosting區(qū)別較大,它的每一次計算都是為了減少上一次的殘差,而為了消除殘差,我們可以在殘差減小的梯度方向上建立模型,所以說,在GradientBoost中,每個新的模型的建立是為了使得之前的模型的殘差往梯度下降的方法,與傳統(tǒng)的Boosting中關(guān)注正確錯誤的樣本加權(quán)有著很大的區(qū)別。
在GradientBoosting算法中,關(guān)鍵就是利用損失函數(shù)的負(fù)梯度方向在當(dāng)前模型的值作為殘差的近似值,進(jìn)而擬合一棵CART回歸樹。
GBDT的會累加所有樹的結(jié)果,而這種累加是無法通過分類完成的,因此GBDT的樹都是CART回歸樹,而不是分類樹(盡管GBDT調(diào)整后也可以用于分類但不代表GBDT的樹為分類樹)。
3.2GBDT 算法的流程?
3.3GBDT 如何選擇特征 ?
GBDT選擇特征的細(xì)節(jié)其實(shí)是想問你CART Tree(最小基尼指數(shù))生成的過程。這里有一個前提,gbdt的弱分類器默認(rèn)選擇的是CART TREE。其實(shí)也可以選擇其他弱分類器的,選擇的前提是低方差和高偏差??蚣芊腷oosting 框架即可。
3.4GBDT如何構(gòu)建特征 (GBDT+LR)
參考
邏輯回歸本身是適合處理線性可分的數(shù)據(jù),如果我們想讓邏輯回歸處理非線性的數(shù)據(jù),其中一種方式便是組合不同特征,增強(qiáng)邏輯回歸對非線性分布的擬合能力。利用gbdt去產(chǎn)生有效的特征組合,以便用于邏輯回歸的訓(xùn)練,提升模型最終的效果。
其實(shí)說GBDT 能夠構(gòu)建特征并非很準(zhǔn)確,GBDT 本身是不能產(chǎn)生特征的,但是我們可以利用GBDT去產(chǎn)生特征的組合。
我們使用 GBDT 生成了兩棵樹,兩顆樹一共有五個葉子節(jié)點(diǎn)。我們將樣本 X 輸入到兩顆樹當(dāng)中去,樣本X 落在了第一棵樹的第二個葉子節(jié)點(diǎn),第二顆樹的第一個葉子節(jié)點(diǎn),于是我們便可以依次構(gòu)建一個五緯的特征向量,每一個緯度代表了一個葉子節(jié)點(diǎn),樣本落在這個葉子節(jié)點(diǎn)上面的話那么值為1,沒有落在該葉子節(jié)點(diǎn)的話,那么值為 0.
于是對于該樣本,我們可以得到一個向量[0,1,0,1,0] 作為該樣本的組合特征,和原來的特征一起輸入到邏輯回歸當(dāng)中進(jìn)行訓(xùn)練。實(shí)驗(yàn)證明這樣會得到比較顯著的效果提升。
3.5GBDT 如何用于分類?
看這里
一些注意點(diǎn):
- GBDT 無論用于分類還是回歸一直都是使用的CART 回歸樹。不會因?yàn)槲覀兯x擇的任務(wù)是分類任務(wù)就選用分類樹,這里面的核心是因?yàn)镚BDT每輪的訓(xùn)練是在上一輪的訓(xùn)練的殘差基礎(chǔ)之上進(jìn)行訓(xùn)練的。這里的殘差就是當(dāng)前模型的負(fù)梯度值 。這個要求每輪迭代的時候,弱分類器的輸出的結(jié)果相減是有意義的。殘差相減是有意義的。
- 如果選用的弱分類器是分類樹,類別相減是沒有意義的。上一輪輸出的是樣本 x 屬于 A類,本一輪訓(xùn)練輸出的是樣本 x 屬于 B類。 A 和 B 很多時候甚至都沒有比較的意義,A 類- B類是沒有意義的。
- GBDT 的多分類是針對每個類都獨(dú)立訓(xùn)練一個 CART Tree。
3.6GBDT的優(yōu)點(diǎn)和局限性
查看《百面機(jī)器學(xué)習(xí)》
優(yōu)點(diǎn):
局限性:
3.7梯度提升和梯度下降的區(qū)別和聯(lián)系
兩者都是在每一輪迭代中,利用損失函數(shù)相對于模型的負(fù)梯度方向的信息來對當(dāng)前模型進(jìn)行更新,只不過在梯度下降中,模型是以參數(shù)化形式表示,從而模型的更新等價于參數(shù)的更新,而在梯度提升中,模型并不需要進(jìn)行參數(shù)化表示,而是直接定義在損失函數(shù)空間中,從而大大擴(kuò)展了可以使用的模型種類。(見百面機(jī)器學(xué)習(xí))
3.8RF、GBDT的區(qū)別
- 組成隨機(jī)森林的數(shù)可是分類樹也可以是回歸樹,而GBDT只由回歸樹組成
- 組成隨機(jī)森林的數(shù)可是并行生成,而GBDT只能是串行生成
- 隨機(jī)森林的結(jié)果是多棵樹表決決定,而GBDT則是多棵樹累加之和
- 隨機(jī)森林對異常值不敏感,而GBDT對異常值比較敏感
- 隨機(jī)森林是通過減少模型的方差來提高性能,而GBDT是減少模型的偏差來提高性能
3.9GBDT怎樣設(shè)置單棵樹的停止生長條件?
- 節(jié)點(diǎn)分裂時的最小樣本數(shù)
- 樹的最大深度
- 最多葉子結(jié)點(diǎn)數(shù)
- Loss滿足約束條件
3.10GBDT如何評估特征的權(quán)重大小?
- 計算每個特征在訓(xùn)練集下的信息增益,最后計算每個特征信息增益與所有特征信息增益之和的比為權(quán)重值。
- 借鑒投票機(jī)制。用相同的GBDT參數(shù)對w每個特征訓(xùn)練出一個模型,然后在該模型下計算每個特征正確分類的個數(shù),最后計算每個特征正確分類的個數(shù)與所有正確分類個數(shù)之和的比例為權(quán)重值。
3.11GBDT中哪些部分可以并行?
- 計算每個樣本的負(fù)梯度時
- 分裂挑選最佳特征及其分割點(diǎn)時,對特征計算相應(yīng)的誤差及均值時
- 更新每個樣本的負(fù)梯度時
- 最后預(yù)測的過程當(dāng)中,每個樣本將之前的所有樹的結(jié)果累加的時候
3.12如何防止過擬合?
- 增加樣本,移除噪聲
- 減少特征,保留一些重要的特征
- 對樣本進(jìn)行采樣,就是在構(gòu)建樹的時候,不是把所有的樣本都作為輸入,而是選擇一部分?jǐn)?shù)據(jù)作為子集
- 對特征進(jìn)行采樣,和對樣本采樣基本一致,就是在每次建樹的時候只對部分的特征進(jìn)行切分(XgBoost)
3.13GBDT當(dāng)增加樣本數(shù)量時,訓(xùn)練時長是線性增加嗎?
NO,因?yàn)樯蓡晤w決策樹時,對于 損失函數(shù)極小值與樣本數(shù)量N不是線性相關(guān)
3.14當(dāng)增加樹的顆數(shù)時,訓(xùn)練時長是線性增加嗎?
NO,因?yàn)槊款w樹的生成時間復(fù)雜度O(N)不同
3.15當(dāng)增加一個棵樹葉子節(jié)點(diǎn)數(shù)目時,訓(xùn)練時長是線性增加嗎?
NO,葉子節(jié)點(diǎn)數(shù)和每棵樹的生成的時間復(fù)雜度O(N)不成正比
3.16每個節(jié)點(diǎn)上都保存什么信息?
中間節(jié)點(diǎn)保存某個特征的分割值,葉節(jié)點(diǎn)保存預(yù)測是某個類別的概率
4.XgBoost
這個寫得超詳細(xì)。
還有這個
原始的GBDT算法基于經(jīng)驗(yàn)損失函數(shù)的負(fù)梯度來構(gòu)建新的決策樹,只是在局測試構(gòu)建完成后再進(jìn)行剪枝。而XGboost在決策樹構(gòu)建階段就加入正則項,起到一定預(yù)剪枝的作用。正則項包括兩部分,T表示葉子結(jié)點(diǎn)的個數(shù),w表示葉子節(jié)點(diǎn)的分?jǐn)?shù)。γ可以控制葉子結(jié)點(diǎn)的個數(shù),λ可以控制葉子節(jié)點(diǎn)的分?jǐn)?shù)不會過大,防止過擬合。
損失函數(shù)為:
正則項為:
4.1XgBoost有哪些特點(diǎn)
(以下4.2,4.3,4.4也是XgBoost的特點(diǎn))
4.2對于連續(xù)值如何進(jìn)行分割?
方法名字:Weighted Quantile Sketch
以收入為例:每個樣本在節(jié)點(diǎn)(將要分裂的節(jié)點(diǎn))處的loss function一階導(dǎo)數(shù)gi和二階導(dǎo)數(shù)hi,衡量預(yù)測值變化帶來的loss function變化,舉例來說,將樣本“月收入”進(jìn)行升序排列,5k、5.2k、5.3k、…、52k,分割線為“收入1”、“收入2”、…、“收入j”,滿足(每個間隔的樣本的hi之和/總樣本的hi之和)為某個百分比?(我這個是近似的說法),那么可以一共分成大約1/?個分裂點(diǎn)。
4.3對于特征缺失值如何分類?
假設(shè)樣本的第i個特征缺失時,無法利用該特征對樣本進(jìn)行劃分,這里的做法是將該樣本默認(rèn)地分到指定的子節(jié)點(diǎn),至于具體地分到哪個節(jié)點(diǎn)還需要某算法來計算,算法的主要思想是,分別假設(shè)特征缺失的樣本屬于右子樹和左子樹,而且只在不缺失的樣本上迭代,分別計算缺失樣本屬于右子樹和左子樹的增益,選擇增益最大的方向?yàn)槿笔?shù)據(jù)的默認(rèn)方向,論文中“枚舉”指的不是枚舉每個缺失樣本在左邊還是在右邊,而是枚舉缺失樣本整體在左邊,還是在右邊兩種情況。 分裂點(diǎn)還是只評估特征不缺失的樣本。
4.4XGBoost怎么做到并行化
這個地方有必要說明下,因?yàn)檫@是xgboost的閃光點(diǎn),直接的效果是訓(xùn)練速度快,boosting技術(shù)中下一棵樹依賴上述樹的訓(xùn)練和預(yù)測,所以樹與樹之間應(yīng)該是只能串行!但在在選擇最佳分裂點(diǎn),進(jìn)行枚舉的時候并行!(據(jù)說恰好這個也是樹形成最耗時的階段)。XGBoost的并行是在特征粒度上的。我們知道,決策樹的學(xué)習(xí)最耗時的一個步驟就是對特征的值進(jìn)行排序(因?yàn)橐_定最佳分割點(diǎn)),XGBoost在訓(xùn)練之前,預(yù)先對數(shù)據(jù)進(jìn)行了排序,然后保存為block結(jié)構(gòu),后面的迭代中重復(fù)地使用這個結(jié)構(gòu),大大減小計算量。這個block結(jié)構(gòu)也使得并行成為了可能,在進(jìn)行節(jié)點(diǎn)的分裂時,需要計算每個特征的增益,最終選增益最大的那個特征去做分裂,那么各個特征的增益計算就可以開多線程進(jìn)行。
4.5XgBoost和GBDT的區(qū)別和聯(lián)系
(2二階導(dǎo)數(shù)+3基分類器+4缺失值)(防止過擬合:1正則項+5特征采樣+6縮減)
4.6.XGBoost和深度學(xué)習(xí)的區(qū)別?
Xgboost第一感覺就是防止過擬合+各種支持分布式/并行,所以一般傳言這種大殺器效果好(集成學(xué)習(xí)的高配)+訓(xùn)練效率高(分布式),與深度學(xué)習(xí)相比,對樣本量和特征數(shù)據(jù)類型要求沒那么苛刻,適用范圍廣。
不同的機(jī)器學(xué)習(xí)模型適用于不同類型的任務(wù)。深度神經(jīng)網(wǎng)絡(luò)通過對時空位置建模,能夠很好地捕獲圖像、語音、文本等高維數(shù)據(jù)。而基于樹模型的XGBoost則能很好地處理表格數(shù)據(jù),同時還擁有一些深度神經(jīng)網(wǎng)絡(luò)所沒有的特性(如:模型的可解釋性、輸入數(shù)據(jù)的不變性、更易于調(diào)參等)。
4.7.xgboost為什么使用二階泰勒展開
關(guān)于Xgboost用泰勒二階展開的原因,主要有兩點(diǎn):
- Xgboost官網(wǎng)上有說,當(dāng)目標(biāo)函數(shù)是MSE時,展開是一階項(殘差)+二階項的形式(官網(wǎng)說這是一個nice form),而其他目標(biāo)函數(shù),如logloss的展開式就沒有這樣的形式。為了能有個統(tǒng)一的形式,所以采用泰勒展開來得到二階項,這樣就能把MSE推導(dǎo)的那套直接復(fù)用到其他自定義損失函數(shù)上。簡短來說,就是為了統(tǒng)一損失函數(shù)求導(dǎo)的形式以支持自定義損失函數(shù)。這是從為什么會想到引入泰勒二階的角度來說的。
- 二階信息本身就能讓梯度收斂更快更準(zhǔn)確。這一點(diǎn)在優(yōu)化算法里的牛頓法里已經(jīng)證實(shí)了??梢院唵握J(rèn)為一階導(dǎo)指引梯度方向,二階導(dǎo)指引梯度方向如何變化。這是從二階導(dǎo)本身的性質(zhì),也就是為什么要用泰勒二階展開的角度來說的。
P.S.為什么要在形式上與MSE統(tǒng)一?因?yàn)镸SE是最普遍且常用的損失函數(shù),而且求導(dǎo)最容易,求導(dǎo)后的形式也十分簡單。所以理論上只要損失函數(shù)形式與MSE統(tǒng)一了,那就只用推導(dǎo)MSE就好啦
5.lightGBM
5.1LGB原理
參考
XGB采用了直方圖加速,只需要遍歷幾個可能的分裂節(jié)點(diǎn)就好了!它也不需要計算所有樣本吖!
這里的意思是,XGB雖然每次只需要遍歷幾個可能的分裂節(jié)點(diǎn),然后比較每個分裂節(jié)點(diǎn)的信息增益,選擇最大的那個進(jìn)行分割,但比較時需要考慮所有樣本帶來的信息增益。而LGB只需采用少量的樣本計算信息增益,所以速度會快很多。
那么問題就來了,XGB如果選少量的樣本算信息增益,該如何保證把信息損失降到最低呢?
LGB選擇梯度大的樣本來計算信息增益。如果一個樣本的梯度較小,證明這個樣本訓(xùn)練的誤差已經(jīng)很小了,所以不需要計算了。我們在XGB的那篇文章中說過,GBDT的梯度算出來實(shí)際上就是殘差,梯度小殘差就小,所以該樣本擬合較好,不需要去擬合他們了。
這聽起來仿佛很有道理,但問題是丟掉他們會改變數(shù)據(jù)的分布,還是無法避免信息損失,進(jìn)而導(dǎo)致精度下降,所以LGB提出了一個很樸實(shí)無華且枯燥的方法進(jìn)行優(yōu)化。
LGB的優(yōu)化方法是,在保留大梯度樣本的同時,隨機(jī)地保留一些小梯度樣本,同時放大了小梯度樣本帶來的信息增益。
除了通過部分樣本計算信息增益以外,LGB還內(nèi)置了特征降維技術(shù),思想就是合并那些沖突小的稀疏特征。
舉個例子,對于一列特征[1,nan,1,nan,1]和一列特征[nan,1,nan,1,nan],他們正好可以合并成一列特征[1,2,1,2,1]。LGB的目標(biāo)就是在于找到這樣的特征并且將他們合并在一起。
至于LGB為什么比XGB的精度高這一點(diǎn),我的理解是選擇梯度大(殘差大)樣本來進(jìn)行特征分裂生成的樹,借鑒了Adaboost的更改樣本權(quán)重的思想。每棵樹針對某些特定訓(xùn)練樣本有著較好的劃分能力,導(dǎo)致每棵樹之間的異質(zhì)性較大,對于效果近似但異質(zhì)性大的模型加權(quán)往往會帶來更大的提升。
5.2.XGboost的不足之處
1)每輪迭代時,都需要遍歷整個訓(xùn)練數(shù)據(jù)多次。如果把整個訓(xùn)練數(shù)據(jù)裝進(jìn)內(nèi)存則會限制訓(xùn)練數(shù)據(jù)的大小;如果不裝進(jìn)內(nèi)存,反復(fù)地讀寫訓(xùn)練數(shù)據(jù)又會消耗非常大的時間。
2)預(yù)排序方法的時間和空間的消耗都很大
LGBM最大的優(yōu)勢就是快。
5.3.XGBoost和LGBM樹的生長方式
- XGBoost按層生長的方式,有利于工程優(yōu)化,但對學(xué)習(xí)模型效率不高
- LightGBM是直接去選擇獲得最大收益的結(jié)點(diǎn)來展開,這樣呢LightGBM能夠在更小的計算代價上建立我們需要的決策樹。當(dāng)然在這樣的算法中我們也需要控制樹的深度和每個葉子結(jié)點(diǎn)的最小數(shù)據(jù)量,從而減少過擬合。
5.4.XGBoost和LGBM樹的劃分方式
- XGBoost中采用預(yù)排序的方法,計算過程當(dāng)中是按照value的排序,逐個數(shù)據(jù)樣本來計算劃分收益,這樣的算法能夠精確的找到最佳劃分值,但是代價比較大同時也沒有較好的推廣性。
- LightGBM直方圖算法:將這些精確的連續(xù)的每一個value劃分到一系列離散的域中,也就是筒子里。以浮點(diǎn)型數(shù)據(jù)來舉例,一個區(qū)間的值會被作為一個筒,然后以這些筒為精度單位的直方圖來做。這樣一來,數(shù)據(jù)的表達(dá)變得更加簡化,減少了內(nèi)存的使用,而且直方圖帶來了一定的正則化的效果,能夠使我們做出來的模型避免過擬合且具有更好的推廣性。另外數(shù)據(jù)結(jié)構(gòu)的變化使得在細(xì)節(jié)處的變化理上效率會不同.
按照bin來索引“直方圖”,所以不用按照每個“特征”來排序,也不用一一去對比不同“特征”的值,大大的減少了運(yùn)算量。
5.5.支持類別特征
傳統(tǒng)的機(jī)器學(xué)習(xí)一般不能支持直接輸入類別特征,需要先轉(zhuǎn)化成多維的0-1特征,這樣無論在空間上還是時間上效率都不高。LightGBM通過更改決策樹算法的決策規(guī)則,直接原生支持類別特征,不需要轉(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針對這兩種并行方法都做了優(yōu)化。
- 特征并行算法中,通過在本地保存全部數(shù)據(jù)避免對數(shù)據(jù)切分結(jié)果的通信。
- 數(shù)據(jù)并行中使用分散規(guī)約 (Reduce scatter) 把直方圖合并的任務(wù)分?jǐn)偟讲煌臋C(jī)器,降低通信和計算,并利用直方圖做差,進(jìn)一步減少了一半的通信量。
- 基于投票的數(shù)據(jù)并行(Voting Parallelization)則進(jìn)一步優(yōu)化數(shù)據(jù)并行中的通信代價,使通信代價變成常數(shù)級別。在數(shù)據(jù)量很大的時候,使用投票并行可以得到非常好的加速效果。
5.7lightGBM與XGboost對比
1、xgboost采用的是level-wise的分裂策略,而lightGBM采用了leaf-wise的策略,區(qū)別是xgboost對每一層所有節(jié)點(diǎn)做無差別分裂,可能有些節(jié)點(diǎn)的增益非常小,對結(jié)果影響不大,但是xgboost也進(jìn)行了分裂,帶來了不必要的開銷。 leaft-wise的做法是在當(dāng)前所有葉子節(jié)點(diǎn)中選擇分裂收益最大的節(jié)點(diǎn)進(jìn)行分裂,如此遞歸進(jìn)行,很明顯leaf-wise這種做法容易過擬合,因?yàn)槿菀紫萑氡容^高的深度中,因此需要對最大深度做限制,從而避免過擬合。
2、lightgbm使用了基于histogram直方圖的決策樹算法,這一點(diǎn)不同于xgboost中的 exact預(yù)排序算法,histogram算法在內(nèi)存和計算代價上都有不小優(yōu)勢。
- 內(nèi)存上優(yōu)勢:很明顯,直方圖算法的內(nèi)存消耗為(#data* #features * 1Bytes)(因?yàn)閷μ卣鞣滞昂笾恍璞4嫣卣麟x散化之后的值),而xgboost的預(yù)排序算法內(nèi)存消耗為:(2 * #data * #features* 4Bytes),因?yàn)?strong>xgboost既要保存原始feature的值,也要保存這個值的順序索引,這些值需要32位的浮點(diǎn)數(shù)來保存。
- 計算上的優(yōu)勢,預(yù)排序算法在選擇好分裂特征計算分裂收益時需要遍歷所有樣本,時間為(#data),而直方圖算法只需要遍歷桶就行了,時間為(#bin)
5.8直方圖算法
總結(jié)
以上是生活随笔為你收集整理的一天1个机器学习知识点(四)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一天1个机器学习知识点(三)
- 下一篇: 安装pyqt和pycharm配置