由于本文是基于面試整理,因此不會過多的關(guān)注公式和推導(dǎo)敬拓,如果希望詳細(xì)了解算法內(nèi)容邻薯,敬請期待后文。
RF乘凸、GBDT和XGBoost都屬于集成學(xué)習(xí)(Ensemble Learning)厕诡,集成學(xué)習(xí)的目的是通過結(jié)合多個基學(xué)習(xí)器的預(yù)測結(jié)果來改善單個學(xué)習(xí)器的泛化能力和魯棒性营勤。
根據(jù)個體學(xué)習(xí)器的生成方式灵嫌,目前的集成學(xué)習(xí)方法大致分為兩大類:即個體學(xué)習(xí)器之間存在強依賴關(guān)系、必須串行生成的序列化方法葛作,以及個體學(xué)習(xí)器間不存在強依賴關(guān)系寿羞、可同時生成的并行化方法;前者的代表就是Boosting赂蠢,后者的代表是Bagging和“隨機森林”(Random Forest)稠曼。
1、RF
1.1 原理
提到隨機森林客年,就不得不提Bagging,Bagging可以簡單的理解為:放回抽樣漠吻,多數(shù)表決(分類)或簡單平均(回歸),同時Bagging的基學(xué)習(xí)器之間屬于并列生成量瓜,不存在強依賴關(guān)系。
Random Forest(隨機森林)是Bagging的擴展變體途乃,它在以決策樹? 為基學(xué)習(xí)器構(gòu)建Bagging集成的基礎(chǔ)上绍傲,進(jìn)一步在決策樹的訓(xùn)練過程中引入了隨機特征選擇,因此可以概括RF包括四個部分:1耍共、隨機選擇樣本(放回抽樣)烫饼;2、隨機選擇特征试读;3杠纵、構(gòu)建決策樹;4钩骇、隨機森林投票(平均)比藻。
隨機選擇樣本和Bagging相同铝量,隨機選擇特征是指在樹的構(gòu)建中,會從樣本集的特征集合中隨機選擇部分特征银亲,然后再從這個子集中選擇最優(yōu)的屬? 性用于劃分慢叨,這種隨機性導(dǎo)致隨機森林的偏差會有稍微的增加(相比于單棵不隨機樹),但是由于隨機森林的‘平均’特性务蝠,會使得它的方差減小拍谐,而且方差的減小補償了偏差的增大,因此總體而言是更好的模型馏段。
(As a result of this randomness, the bias of the forest usually slightly increases (with respect to the bias of a single non-random tree) but, due to averaging, its variance also decreases, usually more than compensating for the increase in bias, hence yielding an overall better model.)
在構(gòu)建決策樹的時候轩拨,RF的每棵決策樹都最大可能的進(jìn)行生長而不進(jìn)行剪枝;在對預(yù)測輸出進(jìn)行結(jié)合時毅弧,RF通常對分類問題使用簡單投票法气嫁,回歸任務(wù)使用簡單平均法。
RF的重要特性是不用對其進(jìn)行交叉驗證或者使用一個獨立的測試集獲得無偏估計够坐,它可以在內(nèi)部進(jìn)行評估寸宵,也就是說在生成的過程中可以對誤差進(jìn)行無偏估計,由于每個基學(xué)習(xí)器只使用了訓(xùn)練集中約63.2%的樣本元咙,剩下約36.8%的樣本可用做驗證集來對其泛化性能進(jìn)行“包外估計”梯影。
RF和Bagging對比:RF的起始性能較差,特別當(dāng)只有一個基學(xué)習(xí)器時庶香,隨著學(xué)習(xí)器數(shù)目增多甲棍,隨機森林通常會收斂到更低的泛化誤差。隨機森林的訓(xùn)練效率也會高于Bagging赶掖,因為在單個決策樹的構(gòu)建中感猛,Bagging使用的是‘確定性’決策樹,在選擇特征劃分結(jié)點時奢赂,要對所有的特征進(jìn)行考慮陪白,而隨機森林使用的是‘隨機性’特征數(shù),只需考慮特征的子集膳灶。
1.2 優(yōu)缺點
隨機森林的優(yōu)點較多咱士,簡單總結(jié):1、在數(shù)據(jù)集上表現(xiàn)良好轧钓,相對于其他算法有較大的優(yōu)勢(訓(xùn)練速度序厉、預(yù)測準(zhǔn)確度);2毕箍、能夠處理很高維的數(shù)據(jù)弛房,并且不用特征選擇,而且在訓(xùn)練完后霉晕,給出特征的重要性庭再;3捞奕、容易做成并行化方法。
RF的缺點:在噪聲較大的分類或者回歸問題上回過擬合拄轻。
2颅围、GBDT
提GBDT之前,談一下Boosting恨搓,Boosting是一種與Bagging很類似的技術(shù)院促。不論是Boosting還是Bagging,所使用的多個分類器類型都是一致的斧抱。但是在前者當(dāng)中常拓,不同的分類器是通過串行訓(xùn)練而獲得的,每個新分類器都根據(jù)已訓(xùn)練的分類器的性能來進(jìn)行訓(xùn)練辉浦。Boosting是通過關(guān)注被已有分類器錯分的那些數(shù)據(jù)來獲得新的分類器弄抬。
由于Boosting分類的結(jié)果是基于所有分類器的加權(quán)求和結(jié)果的,因此Boosting與Bagging不太一樣宪郊,Bagging中的分類器權(quán)值是一樣的掂恕,而Boosting中的分類器權(quán)重并不相等,每個權(quán)重代表對應(yīng)的分類器在上一輪迭代中的成功度。
2.1 原理
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的樹為分類樹)缀棍。
2.2 優(yōu)缺點
GBDT的性能在RF的基礎(chǔ)上又有一步提升宅此,因此其優(yōu)點也很明顯,1爬范、它能靈活的處理各種類型的數(shù)據(jù)父腕;2、在相對較少的調(diào)參時間下青瀑,預(yù)測的準(zhǔn)確度較高璧亮。
當(dāng)然由于它是Boosting萧诫,因此基學(xué)習(xí)器之前存在串行關(guān)系,難以并行訓(xùn)練數(shù)據(jù)枝嘶。
3帘饶、XGBoost
3.1 原理
XGBoost的性能在GBDT上又有一步提升,而其性能也能通過各種比賽管窺一二群扶。坊間對XGBoost最大的認(rèn)知在于其能夠自動地運用CPU的多線程進(jìn)行并行計算及刻,同時在算法精度上也進(jìn)行了精度的提高。
由于GBDT在合理的參數(shù)設(shè)置下竞阐,往往要生成一定數(shù)量的樹才能達(dá)到令人滿意的準(zhǔn)確率缴饭,在數(shù)據(jù)集較復(fù)雜時,模型可能需要幾千次迭代運算骆莹。但是XGBoost利用并行的CPU更好的解決了這個問題颗搂。
其實XGBoost和GBDT的差別也較大,這一點也同樣體現(xiàn)在其性能表現(xiàn)上幕垦,詳見XGBoost與GBDT的區(qū)別丢氢。
4、區(qū)別
4.1 GBDT和XGBoost區(qū)別
傳統(tǒng)的GBDT以CART樹作為基學(xué)習(xí)器智嚷,XGBoost還支持線性分類器卖丸,這個時候XGBoost相當(dāng)于L1和L2正則化的邏輯斯蒂回歸(分類)或者線性回歸(回歸);
傳統(tǒng)的GBDT在優(yōu)化的時候只用到一階導(dǎo)數(shù)信息盏道,XGBoost則對代價函數(shù)進(jìn)行了二階泰勒展開稍浆,得到一階和二階導(dǎo)數(shù);
XGBoost在代價函數(shù)中加入了正則項猜嘱,用于控制模型的復(fù)雜度衅枫。從權(quán)衡方差偏差來看,它降低了模型的方差朗伶,使學(xué)習(xí)出來的模型更加簡單弦撩,放置過擬合,這也是XGBoost優(yōu)于傳統(tǒng)GBDT的一個特性论皆;
shrinkage(縮減)益楼,相當(dāng)于學(xué)習(xí)速率(XGBoost中的eta)。XGBoost在進(jìn)行完一次迭代時点晴,會將葉子節(jié)點的權(quán)值乘上該系數(shù)感凤,主要是為了削弱每棵樹的影響,讓后面有更大的學(xué)習(xí)空間粒督。(GBDT也有學(xué)習(xí)速率)陪竿;
列抽樣。XGBoost借鑒了隨機森林的做法屠橄,支持列抽樣族跛,不僅防止過? 擬合闰挡,還能減少計算;
對缺失值的處理礁哄。對于特征的值有缺失的樣本长酗,XGBoost還可以自動? 學(xué)習(xí)出它的分裂方向;
XGBoost工具支持并行姐仅。Boosting不是一種串行的結(jié)構(gòu)嗎?怎么并行?
的花枫?注意XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能進(jìn)行下一次迭代的(第t次迭代的代價函數(shù)里包含了前面t-1次迭代的預(yù)測值)掏膏。XGBoost的并行是在特征粒度上的劳翰。我們知道,決策樹的學(xué)習(xí)最耗時的一個步驟就是對特征的值進(jìn)行排序(因為要確定最佳分割點)馒疹,XGBoost在訓(xùn)練之前佳簸,預(yù)先對數(shù)據(jù)進(jìn)行了排序,然后保存為block結(jié)構(gòu)颖变,后面的迭代
中重復(fù)地使用這個結(jié)構(gòu)生均,大大減小計算量。這個block結(jié)構(gòu)也使得并行成為了可能腥刹,在進(jìn)行節(jié)點的分裂時马胧,需要計算每個特征的增益,最終選增益最大的那個特征去做分裂衔峰,那么各個特征的增益計算就可以開多線程進(jìn)行佩脊。
5、參考資料
周志華機器學(xué)習(xí)
scikit-learn官方文檔
機器學(xué)習(xí)實戰(zhàn)
李航統(tǒng)計學(xué)習(xí)方法
wepon大神bloghttp://wepon.me/