集成学习-Bagging集成学习算法随机森林(Random Forest)
?
隨機(jī)森林算法屬性
隨機(jī)森林顧名思義,是用隨機(jī)的方式建立一個(gè)森林,森林里面有很多的決策樹(shù)組成,隨機(jī)森林的每一棵決策樹(shù)之間是沒(méi)有關(guān)聯(lián)的。在得到森林之后,當(dāng)有一個(gè)新的輸入樣本進(jìn)入的時(shí)候,就讓森林中的每一棵決策樹(shù)分別進(jìn)行一下判斷,看看這個(gè)樣本應(yīng)該屬于哪一類(對(duì)于分類算法),然后看看哪一類被選擇最多,就預(yù)測(cè)這個(gè)樣本為那一類。
隨機(jī)森林和使用決策樹(shù)作為基本分類器的(bagging)有些類似。以決策樹(shù)為基本模型的bagging在每次bootstrap放回抽樣之后,產(chǎn)生一棵決策樹(shù),抽多少樣本就生成多少棵樹(shù),在生成這些樹(shù)的時(shí)候沒(méi)有進(jìn)行更多的干預(yù)。而隨機(jī)森林也是進(jìn)行bootstrap抽樣,但它與bagging的區(qū)別是:在生成每棵樹(shù)的時(shí)候,每個(gè)節(jié)點(diǎn)變量都僅僅在隨機(jī)選出的少數(shù)變量中產(chǎn)生。因此,不但樣本是隨機(jī)的,連每個(gè)節(jié)點(diǎn)變量(Features)的產(chǎn)生都是隨機(jī)的。
許多研究表明, 組合分類器比單一分類器的分類效果好,隨機(jī)森林(random forest)是一種利用多個(gè)分類樹(shù)對(duì)數(shù)據(jù)進(jìn)行判別與分類的方法,它在對(duì)數(shù)據(jù)進(jìn)行分類的同時(shí),還可以給出各個(gè)變量(基因)的重要性評(píng)分,評(píng)估各個(gè)變量在分類中所起的作用。
隨機(jī)森林在以決策樹(shù)為基學(xué)習(xí)器構(gòu)建Bagging的基礎(chǔ)上,進(jìn)一步在訓(xùn)練過(guò)程中引入了隨機(jī)屬性選擇。傳統(tǒng)決策樹(shù)在選擇劃分屬性時(shí),是在當(dāng)前結(jié)點(diǎn)的屬性集合中選擇一個(gè)最優(yōu)屬性;在隨機(jī)森林中,對(duì)基決策樹(shù)的每個(gè)結(jié)點(diǎn),先從該結(jié)點(diǎn)的屬性集合d中隨機(jī)選擇一個(gè)包含k個(gè)屬性的子集,然后再?gòu)倪@個(gè)子集中選擇一個(gè)最優(yōu)屬性用于劃分,參數(shù)k控制了隨機(jī)性的引入程度,一般推薦k=log2d
一開(kāi)始我們提到的隨機(jī)森林中的“隨機(jī)”就是指的這里的兩個(gè)隨機(jī)性。兩個(gè)隨機(jī)性的引入對(duì)隨機(jī)森林的分類性能至關(guān)重要。由于它們的引入,使得隨機(jī)森林不容易陷入過(guò)擬合,并且具有很好得抗噪能力(比如:對(duì)缺省值不敏感)。由于Bagging每次訓(xùn)練都進(jìn)行采樣來(lái)訓(xùn)練模型,所以模型的泛化能力很強(qiáng),對(duì)于降低模型的方差很有作用。當(dāng)然對(duì)于訓(xùn)練基地額擬合誤差就會(huì)大一點(diǎn),也就輸模型偏倚會(huì)大一些。
注意到這和GBDT的子采樣是不同的,GBDT的子采樣是無(wú)放回采樣,而B(niǎo)agging的子采樣是有有放回采樣。
對(duì)于一個(gè)樣本,它在某一次含m個(gè)樣本的訓(xùn)練集的隨機(jī)采樣中,每次被采集到的概率是1/m。不被采集到的概率為1?1/m。如果m次采樣都沒(méi)有被采集中的概率是(1?1/m)m。當(dāng)m→∞時(shí),(1?1/m)m→1/e?0.368。也就是說(shuō),在bagging的每輪隨機(jī)采樣中,訓(xùn)練集中大約有36.8%的數(shù)據(jù)沒(méi)有被采樣集采集中。對(duì)于這36.8%的沒(méi)有被采集到的數(shù)據(jù),我們稱之為袋外數(shù)據(jù)(Out of bag,簡(jiǎn)稱oog)。這些數(shù)據(jù)沒(méi)有參與訓(xùn)練模型的擬合,因此可以檢驗(yàn)?zāi)P头夯芰?
隨機(jī)決策樹(shù)的構(gòu)造
建立每棵決策樹(shù)的過(guò)程中,有2點(diǎn):采樣與完全分裂。首先是兩個(gè)隨機(jī)采樣的過(guò)程,RF要對(duì)輸入數(shù)據(jù)進(jìn)行一下行(樣本)、列(特征)采樣,對(duì)于行采樣(樣本)采用有放回的方式,也就是在采樣得到的樣本中可以有重復(fù)。從M個(gè)特征中(列采樣)出m特征。之后就是用完全分裂的方式建立出決策樹(shù)。這樣決策樹(shù)的某一個(gè)葉子節(jié)點(diǎn)要么是無(wú)法繼續(xù)分裂的,要么里面的所有樣本的都是指向的同一個(gè)分類。一般很多的決策樹(shù)算法都一個(gè)重要的步驟 - 剪枝,但是這里不這樣干,由于之前的兩個(gè)隨機(jī)采樣的過(guò)程保證了隨機(jī)性,所以就算不剪枝,也不會(huì)出現(xiàn)over-fitting。
分裂的辦法是:采用上面說(shuō)的列采樣的過(guò)程從這m個(gè)屬性中采用某種策略(比如說(shuō)信息增益)來(lái)選擇1個(gè)屬性作為該節(jié)點(diǎn)的分裂屬性。決策樹(shù)形成過(guò)程中每個(gè)節(jié)點(diǎn)都要按完全分裂的方式來(lái)分裂,一直到不能夠再分裂為止(如果下一次該節(jié)點(diǎn)選出來(lái)的那一個(gè)屬性是剛剛其父節(jié)點(diǎn)分裂時(shí)用過(guò)的屬性,則該節(jié)點(diǎn)已經(jīng)達(dá)到了葉子節(jié)點(diǎn),無(wú)須繼續(xù)分裂了)。
每棵樹(shù)的按照如下規(guī)則生成:
總的來(lái)說(shuō)就是隨機(jī)選擇樣本數(shù),隨機(jī)選取特征,隨機(jī)選擇分類器,建立多顆這樣的決策樹(shù),然后通過(guò)這幾課決策樹(shù)來(lái)投票,決定數(shù)據(jù)屬于哪一類(投票機(jī)制有一票否決制、少數(shù)服從多數(shù)、加權(quán)多數(shù))
?
隨機(jī)森林算法優(yōu)缺點(diǎn)
主要優(yōu)點(diǎn)是:
訓(xùn)練可以高度并行化,對(duì)于大數(shù)據(jù)大樣本(千萬(wàn)級(jí)樣本,多變量)訓(xùn)練速度有優(yōu)勢(shì)。
它能夠處理很高維度(feature很多)的數(shù)據(jù),并且不用做特征選擇,對(duì)數(shù)據(jù)集的適應(yīng)能力強(qiáng):既能處理離散型數(shù)據(jù),也能處理連續(xù)型數(shù)據(jù),數(shù)據(jù)集無(wú)需規(guī)范化,且不需要降維。
可以得到變量重要性排序(兩種方式:基于OOB誤分率的增加量和基于分裂時(shí)的GINI下降量)。
由于采取了隨機(jī)采樣,模型的泛化能力強(qiáng),方差小,不容易過(guò)擬合(兩個(gè)隨機(jī),隨機(jī)抽取特征,隨機(jī)抽取樣本)。
對(duì)于不平衡數(shù)據(jù)集來(lái)說(shuō),RF提供平衡誤差的有效方法(可以通過(guò)采樣)。
如果有很大一部分的特征遺失(缺失值),仍可以維持準(zhǔn)確度。
相比于Boosting系列的GBDT和Adaboost,RF實(shí)現(xiàn)比較簡(jiǎn)單。
主要缺點(diǎn)是:
隨機(jī)森林已經(jīng)被證明在某些噪音較大的分類或回歸問(wèn)題上會(huì)過(guò)擬合。
對(duì)于有不同取值的屬性的數(shù)據(jù),取值劃分較多的屬性會(huì)對(duì)隨機(jī)森林產(chǎn)生更大的影響,所以隨機(jī)森林在這種數(shù)據(jù)上產(chǎn)出的屬性權(quán)值是不可信的。
RF在解決回歸問(wèn)題時(shí),并不如分類表現(xiàn)那么好,因?yàn)樗荒芙o出一個(gè)連續(xù)的輸出(決策樹(shù)本身限定)。
處理小數(shù)據(jù)或低維數(shù)據(jù),可能不能產(chǎn)生很好的分類。
?
隨機(jī)森林如何處理缺失值?
根據(jù)隨機(jī)森林創(chuàng)建和訓(xùn)練的特點(diǎn),隨機(jī)森林對(duì)缺失值的處理還是比較特殊的。
- 首先,給缺失值預(yù)設(shè)一些估計(jì)值,比如數(shù)值型特征,選擇其余數(shù)據(jù)的中位數(shù)或眾數(shù)作為當(dāng)前的估計(jì)值
- 然后,根據(jù)估計(jì)的數(shù)值,建立隨機(jī)森林,把所有的數(shù)據(jù)放進(jìn)隨機(jī)森林里面跑一遍。記錄每一組數(shù)據(jù)在決策樹(shù)中一步一步分類的路徑.
- 判斷哪組數(shù)據(jù)和缺失數(shù)據(jù)路徑最相似,引入一個(gè)相似度矩陣,來(lái)記錄數(shù)據(jù)之間的相似度,比如有N組數(shù)據(jù),相似度矩陣大小就是N*N
- 如果缺失值是類別變量,通過(guò)權(quán)重投票得到新估計(jì)值,如果是數(shù)值型變量,通過(guò)加權(quán)平均得到新的估計(jì)值,如此迭代,直到得到穩(wěn)定的估計(jì)值。
其實(shí),該缺失值填補(bǔ)過(guò)程類似于推薦系統(tǒng)中采用協(xié)同過(guò)濾進(jìn)行評(píng)分預(yù)測(cè),先計(jì)算缺失特征與其他特征的相似度,再加權(quán)得到缺失值的估計(jì),而隨機(jī)森林中計(jì)算相似度的方法(數(shù)據(jù)在決策樹(shù)中一步一步分類的路徑)乃其獨(dú)特之處。
什么是OOB?隨機(jī)森林中OOB是如何計(jì)算的,它有什么優(yōu)缺點(diǎn)?
上面我們提到,構(gòu)建隨機(jī)森林的關(guān)鍵問(wèn)題就是如何選擇最優(yōu)的m,要解決這個(gè)問(wèn)題主要依據(jù)計(jì)算袋外錯(cuò)誤率oob error(out-of-bag error)。
bagging方法中Bootstrap每次約有1/3的樣本不會(huì)出現(xiàn)在Bootstrap所采集的樣本集合中,當(dāng)然也就沒(méi)有參加決策樹(shù)的建立,把這1/3的數(shù)據(jù)稱為袋外數(shù)據(jù)oob(out of bag),它可以用于取代測(cè)試集誤差估計(jì)方法。
袋外數(shù)據(jù)(oob)誤差的計(jì)算方法如下:
- 對(duì)于已經(jīng)生成的隨機(jī)森林,用袋外數(shù)據(jù)測(cè)試其性能,假設(shè)袋外數(shù)據(jù)總數(shù)為O,用這O個(gè)袋外數(shù)據(jù)作為輸入,帶進(jìn)之前已經(jīng)生成的隨機(jī)森林分類器,分類器會(huì)給出O個(gè)數(shù)據(jù)相應(yīng)的分類
- 因?yàn)檫@O條數(shù)據(jù)的類型是已知的,則用正確的分類與隨機(jī)森林分類器的結(jié)果進(jìn)行比較,統(tǒng)計(jì)隨機(jī)森林分類器分類錯(cuò)誤的數(shù)目,設(shè)為X,則袋外數(shù)據(jù)誤差大小=X/O
優(yōu)缺點(diǎn):這已經(jīng)經(jīng)過(guò)證明是無(wú)偏估計(jì)的,所以在隨機(jī)森林算法中不需要再進(jìn)行交叉驗(yàn)證或者單獨(dú)的測(cè)試集來(lái)獲取測(cè)試集誤差的無(wú)偏估計(jì)。
為什么要進(jìn)行隨機(jī)抽樣?
如果不進(jìn)行隨機(jī)抽樣,每棵樹(shù)的訓(xùn)練集都一樣,那么最終訓(xùn)練出的樹(shù)分類結(jié)果也是完全一樣的,依然沒(méi)有解決決策樹(shù)過(guò)擬合問(wèn)題。隨機(jī)抽樣是為了保證不同決策樹(shù)之間的多樣性,從而提高模型的泛化能力。使得隨機(jī)森林不容易陷入過(guò)擬合,并且具有較好的抗噪能力(比如:對(duì)缺省值不敏感)。
為什么要有放回地抽樣?
而隨機(jī)森林最后分類取決于多棵樹(shù)(弱分類器)的投票表決,這種表決應(yīng)該是"求同"。如果是無(wú)放回的抽樣,那么每棵樹(shù)的訓(xùn)練樣本都是不同的,都是沒(méi)有交集的,這樣每棵樹(shù)都是"有偏的",從而影響最終的投票結(jié)果。為了保證最終結(jié)果的可靠性,同時(shí)又要保證模型的泛化能力,需要每一顆樹(shù)既要“求同“ 又要 ”存異”
?
模型參數(shù)方法
控制bagging框架的參數(shù)
- estimators:隨機(jī)森林中樹(shù)的棵樹(shù),即要生成多少個(gè)基學(xué)習(xí)器(決策樹(shù))。
- boostrap:是否采用自助式采樣生成采樣集。
- obb_score:是否使用袋外數(shù)據(jù)來(lái)估計(jì)模型的有效性。
控制決策樹(shù)的參數(shù)
- criterion:選擇最優(yōu)劃分屬性的準(zhǔn)則,默認(rèn)是"gini",可選"entropy"。
- max_depth:決策樹(shù)的最大深度
- max_features:隨機(jī)抽取的候選劃分屬性集的最大特征數(shù)(屬性采樣)
- min_samples_split:內(nèi)部節(jié)點(diǎn)再劃分所需最小樣本數(shù)。默認(rèn)是2,可設(shè)置為整數(shù)或浮點(diǎn)型小數(shù)。
- min_samples_leaf:葉子節(jié)點(diǎn)最少樣本數(shù)。默認(rèn)是1,可設(shè)置為整數(shù)或浮點(diǎn)型小數(shù)。
- max_leaf_nodes:最大葉子結(jié)點(diǎn)數(shù)。默認(rèn)是不限制。
- min_weight_fraction_leaf:葉子節(jié)點(diǎn)最小的樣本權(quán)重和。默認(rèn)是0。
- min_impurity_split:節(jié)點(diǎn)劃分最小不純度。
其他參數(shù):
- n_jobs:并行job的個(gè)數(shù)
- verbose:是否顯示任務(wù)進(jìn)程
對(duì)象屬性:
- estimators_:打印輸出隨機(jī)森林中所有的樹(shù)。
- classes_:輸出樣本集的類別。
- n_classes_:輸出類別數(shù)量。
- n_features_:特征數(shù)量。
- n_outputs_:當(dāng)模型被fit時(shí)的輸出維度。看看下圖來(lái)感受一些這個(gè)屬性。
- feature_importances_:特征重要性。
- oob_score_:袋外估計(jì)準(zhǔn)確率得分,必須是oob_score參數(shù)選擇True的時(shí)候才可用。
- oob_decision_function_:袋外估計(jì)對(duì)應(yīng)的決策函數(shù)。
方法:
- apply(X):將訓(xùn)練好的模型應(yīng)用在數(shù)據(jù)集X上,并返回?cái)?shù)據(jù)集X對(duì)應(yīng)的葉指數(shù)。
- decision_function(X):返回決策函數(shù)值(比如svm中的決策距離)。
- fit(X,Y):在數(shù)據(jù)集(X,Y)上訓(xùn)練模型。
- get_parms():獲取模型參數(shù)。
- predict(X):預(yù)測(cè)數(shù)據(jù)集X的結(jié)果。
- predict_log_proba(X):預(yù)測(cè)數(shù)據(jù)集X的對(duì)數(shù)概率。
- predict_proba(X):預(yù)測(cè)數(shù)據(jù)集X的概率值。
- score(X,Y):輸出數(shù)據(jù)集(X,Y)在模型上的準(zhǔn)確率。
?
?
https://cloud.tencent.com/developer/article/1170422
https://cloud.tencent.com/developer/article/1541702
https://www.cnblogs.com/pinard/p/6156009.html
?
?
總結(jié)
以上是生活随笔為你收集整理的集成学习-Bagging集成学习算法随机森林(Random Forest)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 逻辑回归模型详解(Logistic Re
- 下一篇: 蓝桥杯_算法训练_矩阵乘法