1.1概述
? ? 隨機(jī)森林非常具有代表性的Bagging集成算法导而,是一個(gè)包含多棵決策樹(shù)的評(píng)估器辕录,分類(lèi)數(shù)組成的森林就叫隨機(jī)森林分類(lèi)器玫鸟,回歸樹(shù)所集成的森林就叫隨機(jī)森林回歸器。
1.2?RandomForestClassifier
class sklearn.ensemble.RandomForestClassifier (n_estimators=’10’, criterion=’gini’, max_depth=None,min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’,max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False,n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None)
1.3 n_estimators
? ? n_estimators是森林中樹(shù)木的數(shù)量移稳,即基評(píng)估器的數(shù)量蕴纳。這個(gè)參數(shù)對(duì)隨機(jī)森林模型的精確性影響是單調(diào)的,n_estimators越大模型的效果往往越好个粱,相應(yīng)的古毛,任何模型都有決策邊界,n_estimators到達(dá)一定的程度之后都许,隨機(jī)森林的精確性往往不在上升或是開(kāi)始波動(dòng)稻薇,并且,n_estimators越大需要的計(jì)算量和內(nèi)存就越大梭稚,訓(xùn)練的時(shí)間也越長(zhǎng)颖低,對(duì)于這個(gè)參數(shù),我們是渴望在訓(xùn)練難度和模型效果之間取得平衡弧烤。
????n_estimators的默認(rèn)值在現(xiàn)有版本的sklearn中是10忱屑,但是在即將更新的0.22版本中蹬敲,這個(gè)默認(rèn)值會(huì)被修正為100。這個(gè)修正顯示出了使用者的調(diào)參傾向:要更大的n_estimators莺戒。
? ? 1.4 random_state
? ? ? ? 隨機(jī)森林的本質(zhì)是一種裝袋集成算法伴嗡,裝袋集成算法是對(duì)基評(píng)估器的預(yù)測(cè)結(jié)果進(jìn)行或是平均或是用多表決原則來(lái)決定集成評(píng)估器的結(jié)果,在剛才的紅酒例子中从铲,我們建立了25棵樹(shù)瘪校,對(duì)任何一個(gè)樣本而言,平均或多數(shù)表決原則下名段,當(dāng)且僅當(dāng)有13棵以上的樹(shù)判斷錯(cuò)誤的時(shí)候阱扬,隨機(jī)森林才會(huì)判斷錯(cuò)誤。單獨(dú)一棵決策樹(shù)對(duì)紅酒數(shù)據(jù)集的分類(lèi)準(zhǔn)確率在0.85上下浮動(dòng)伸辟,假設(shè)一棵樹(shù)判斷錯(cuò)誤的可能性為0.2(ε)麻惶,那20棵樹(shù)以上都判斷錯(cuò)誤的可能性是:
? ??????那現(xiàn)在就有一個(gè)問(wèn)題了:我們說(shuō)袋裝法服從多數(shù)表決原則或?qū)诸?lèi)器結(jié)果求平均振湾,這即是說(shuō)杀迹,我們默認(rèn)森林中的每棵樹(shù)應(yīng)該都是不一樣的,并且會(huì)返回不同的結(jié)果恰梢,如果隨機(jī)森林中所有的數(shù)的判斷結(jié)果都一致(全部判錯(cuò)或是全部判對(duì))佛南,那隨機(jī)森林無(wú)論應(yīng)用何種集成原則來(lái)求結(jié)果,都無(wú)法比單棵決策樹(shù)取得更好的效果才對(duì)嵌言,但是使用一樣的類(lèi)DecisionTreeClassifier,一樣的參數(shù)及穗,一樣的訓(xùn)練集和測(cè)試集摧茴,為什么隨機(jī)森林里的眾多樹(shù)會(huì)有不同的判斷結(jié)果?sklearn中的分類(lèi)樹(shù)DecisionTreeClassifier自帶隨機(jī)性埂陆,所以隨機(jī)森林中的樹(shù)天生就都是不一樣的苛白。我們?cè)谥v解分類(lèi)樹(shù)時(shí)曾提到,決策樹(shù)從最重要的特征中隨機(jī)選擇出一個(gè)特征來(lái)進(jìn)行分枝焚虱,因此每次生成的決策樹(shù)都不一樣购裙,這個(gè)功能由參數(shù)random_state控制。隨機(jī)森林中其實(shí)也有random_state鹃栽,用法和分類(lèi)樹(shù)中相似躏率,只不過(guò)在分類(lèi)樹(shù)中,一個(gè)random_state只控制生成一棵樹(shù),而隨機(jī)森林中的random_state控制的是生成森林的模式薇芝,而非讓一個(gè)森林中只有一棵樹(shù)蓬抄。
? ? 1.5 bootstrap & oob_score
? ? ? ? 要讓基分類(lèi)器盡量都不一樣,一種很容易理解的方法是使用不同的訓(xùn)練集進(jìn)行訓(xùn)練夯到,而袋裝法正是通過(guò)又放回的隨機(jī)抽樣技術(shù)來(lái)形成不同的訓(xùn)練數(shù)據(jù)嚷缭,bootstrap就是控制抽樣技術(shù)的參數(shù)。
? ? ? ? 在一個(gè)含有n個(gè)樣本的原始訓(xùn)練集中耍贾,我們進(jìn)行隨機(jī)抽樣阅爽,每次采用一個(gè)樣本,并在抽取下一個(gè)樣本之前將該樣本放回原始數(shù)據(jù)集中荐开,也就是下次采樣的時(shí)候這個(gè)樣本依然可能會(huì)被采集到优床,這樣采集n次,最終得到一個(gè)和原始訓(xùn)練集一樣大的n個(gè)樣本組成的自助集誓焦,由于是隨機(jī)采樣胆敞,這樣沒(méi)次的自助集和原始數(shù)據(jù)集不同,和其他的采樣集也是不同的杂伟。我們就可以自由創(chuàng)造取之不盡用之不竭移层,并且互不相同的自助集,用這些自助集來(lái)訓(xùn)練我們的基分類(lèi)器赫粥,我們的基分類(lèi)器自然也就各不相同了观话。bootstrap參數(shù)默認(rèn)True,代表采用這種有放回的隨機(jī)抽樣技術(shù)越平。通常频蛔,這個(gè)參數(shù)不會(huì)被我們?cè)O(shè)置為False。
? ??????然而有放回抽樣也會(huì)有自己的問(wèn)題秦叛。由于是有放回晦溪,一些樣本可能在同一個(gè)自助集中出現(xiàn)多次,而其他一些卻可能
被忽略挣跋,一般來(lái)說(shuō)三圆,自助集大約平均會(huì)包含63%的原始數(shù)據(jù)。因?yàn)槊恳粋€(gè)樣本被抽到某個(gè)自助集中的概率為
? ??????當(dāng)n足夠大時(shí)避咆,這個(gè)概率收斂于1-(1/e)舟肉,約等于0.632。因此查库,會(huì)有約37%的訓(xùn)練數(shù)據(jù)被浪費(fèi)掉路媚,沒(méi)有參與建模,這些數(shù)據(jù)被稱(chēng)為袋外數(shù)據(jù)(out of bag data樊销,簡(jiǎn)寫(xiě)為oob)整慎。除了我們最開(kāi)始就劃分好的測(cè)試集之外脏款,這些數(shù)據(jù)也可以被用來(lái)作為集成算法的測(cè)試集。也就是說(shuō)院领,在使用隨機(jī)森林時(shí)弛矛,我們可以不劃分測(cè)試集和訓(xùn)練集,只需要用袋外數(shù)據(jù)來(lái)測(cè)試我們的模型即可比然。當(dāng)然丈氓,這也不是絕對(duì)的,當(dāng)n和n_estimators都不夠大的時(shí)候强法,很可能就沒(méi)有數(shù)據(jù)掉落在袋外万俗,自然也就無(wú)法使用oob數(shù)據(jù)來(lái)測(cè)試模型了。如果希望用袋外數(shù)據(jù)來(lái)測(cè)試饮怯,則需要在實(shí)例化時(shí)就將oob_score這個(gè)參數(shù)調(diào)整為T(mén)rue闰歪,訓(xùn)練完畢之后,我們可以用隨機(jī)森林的另一個(gè)重要屬性:oob_score_來(lái)查看我們的在袋外數(shù)據(jù)上測(cè)試的結(jié)果:
? ??????隨機(jī)森林的接口與決策樹(shù)完全一致蓖墅,因此依然有四個(gè)常用接口:apply, fit, predict和score库倘。除此之外,還需要注意隨機(jī)森林的predict_proba接口论矾,這個(gè)接口返回每個(gè)測(cè)試樣本對(duì)應(yīng)的被分到每一類(lèi)標(biāo)簽的概率教翩,標(biāo)簽有幾個(gè)分類(lèi)就返回幾個(gè)概率。如果是二分類(lèi)問(wèn)題贪壳,則predict_proba返回的數(shù)值大于0.5的饱亿,被分為1,小于0.5的闰靴,被分為0彪笼。傳統(tǒng)的隨機(jī)森林是利用袋裝法中的規(guī)則,平均或少數(shù)服從多數(shù)來(lái)決定集成的結(jié)果蚂且,而sklearn中的隨機(jī)森林是平均每個(gè)樣本對(duì)應(yīng)的predict_proba返回的概率配猫,得到一個(gè)平均概率,從而決定測(cè)試樣本的分類(lèi)膘掰。
? ? 1.6?Bonus:Bagging的另一個(gè)必要條件
? ??????在使用袋裝法時(shí)要求基評(píng)估器要盡量獨(dú)立章姓。其實(shí),袋裝法還有另一個(gè)必要條件:基分類(lèi)器的判斷準(zhǔn)確率至少要超過(guò)隨機(jī)分類(lèi)器识埋,即時(shí)說(shuō),基分類(lèi)器的判斷準(zhǔn)確率至少要超過(guò)50%零渐。之前我們已經(jīng)展示過(guò)隨機(jī)森林的準(zhǔn)確率公式窒舟,基于這個(gè)公式,我們畫(huà)出了基分類(lèi)器的誤差率ε和隨機(jī)森林的誤差率之間的圖像诵盼。大家可以自己運(yùn)行一下這段代碼惠豺,看看圖像呈什么樣的分布银还。
????????可以從圖像上看出,當(dāng)基分類(lèi)器的誤差率小于0.5洁墙,即準(zhǔn)確率大于0.5時(shí)蛹疯,集成的效果是比基分類(lèi)器要好的。相反热监,當(dāng)基分類(lèi)器的誤差率大于0.5捺弦,袋裝的集成算法就失效了。所以在使用隨機(jī)森林之前孝扛,一定要檢查列吼,用來(lái)組成隨機(jī)森林的分類(lèi)樹(shù)們是否都有至少50%的預(yù)測(cè)正確率。
? ? 1.7?RandomForestRegressor
class sklearn.ensemble.RandomForestRegressor (n_estimators=’warn’, criterion=’mse’, max_depth=None,min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’,max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False,n_jobs=None, random_state=None, verbose=0, warm_start=False)
所有的參數(shù)苦始,屬性與接口寞钥,全部和隨機(jī)森林分類(lèi)器一致。僅有的不同就是回歸樹(shù)與分類(lèi)樹(shù)的不同陌选,不純度的指標(biāo)理郑,參數(shù)Criterion不一致。
? ? 1.8?重要參數(shù)咨油,屬性與接口
? ??????criterion 回歸樹(shù)衡量分枝質(zhì)量的指標(biāo)您炉,支持的標(biāo)準(zhǔn)有三種:
????????1)輸入"mse"使用均方誤差mean squared error(MSE),父節(jié)點(diǎn)和葉子節(jié)點(diǎn)之間的均方誤差的差額將被用來(lái)作為特征選擇的標(biāo)準(zhǔn)臼勉,這種方法通過(guò)使用葉子節(jié)點(diǎn)的均值來(lái)最小化L2損失
????????2)輸入“friedman_mse”使用費(fèi)爾德曼均方誤差邻吭,這種指標(biāo)使用弗里德曼針對(duì)潛在分枝中的問(wèn)題改進(jìn)后的均方誤差
????????3)輸入"mae"使用絕對(duì)平均誤差MAE(mean absolute error),這種指標(biāo)使用葉節(jié)點(diǎn)的中值來(lái)最小化L1損失
所以MSE的本質(zhì)瓢谢,其實(shí)是樣本真實(shí)數(shù)據(jù)與回歸結(jié)果的差異畸写。在回歸樹(shù)中,MSE不只是我們的分枝質(zhì)量衡量指標(biāo)氓扛,也是我們最常用的衡量回歸樹(shù)回歸質(zhì)量的指標(biāo)枯芬,當(dāng)我們?cè)谑褂媒徊骝?yàn)證,或者其他方式獲取回歸樹(shù)的結(jié)果時(shí)采郎,我們往往選擇均方誤差作為我們的評(píng)估(在分類(lèi)樹(shù)中這個(gè)指標(biāo)是score代表的預(yù)測(cè)準(zhǔn)確率)千所。在回歸中,我們追求的是蒜埋,MSE越小越好淫痰。然而,回歸樹(shù)的接口score返回的是R平方整份,并不是MSE待错。R平方被定義如下:
R平方可以為正為負(fù)(如果模型的殘差平方和遠(yuǎn)遠(yuǎn)大于模型的總平方和适瓦,模型非常糟糕,R平方就會(huì)為負(fù))忆家,而均方誤差永遠(yuǎn)為正犹菇。值得一提的是,雖然均方誤差永遠(yuǎn)為正芽卿,但是sklearn當(dāng)中使用均方誤差作為評(píng)判標(biāo)準(zhǔn)時(shí)揭芍,卻是計(jì)算”負(fù)均方誤差“ (neg_mean_ squared_error)。這是因?yàn)閟klearn在計(jì)算模型評(píng)估指標(biāo)的時(shí)候卸例,會(huì)考慮指標(biāo)本身的性質(zhì)称杨,均方誤差本身是一種誤差,所以被sklearn劃分為模型的一種損失(loss)筷转,因此在sklearn當(dāng)中姑原,都以負(fù)數(shù)表示。真正的均方誤差MSE的數(shù)值呜舒,其實(shí)就是neg_mean_ squared_error去掉負(fù)號(hào)的數(shù)字锭汛。