RF模型(随机森林模型)详解
入門(mén)小菜鳥(niǎo),希望像做筆記記錄自己學(xué)的東西,也希望能幫助到同樣入門(mén)的人,更希望大佬們幫忙糾錯(cuò)啦~侵權(quán)立刪。
目錄
一、RF背景——集成學(xué)習(xí)中的bagging流派
1、集成學(xué)習(xí)簡(jiǎn)介
2、bagging流派算法簡(jiǎn)介
(1)算法結(jié)構(gòu)圖
(2)算法步驟
(3)OOB(袋外數(shù)據(jù))& 泛化能力
二、RF模型算法原理
1、RF Vs bagging
2、算法步驟
三、RF模型的優(yōu)缺點(diǎn)
1、優(yōu)點(diǎn)
2、缺點(diǎn)
四、RF的變式——extra trees?
五、代碼實(shí)現(xiàn)RF模型
一、RF背景——集成學(xué)習(xí)中的bagging流派
RF模型屬于集成學(xué)習(xí)中的bagging流派,可以說(shuō)是bagging的進(jìn)化版
1、集成學(xué)習(xí)簡(jiǎn)介
集成學(xué)習(xí)分為2派:
(1)boosting:它組合多個(gè)弱學(xué)習(xí)器形成一個(gè)強(qiáng)學(xué)習(xí)器,且各個(gè)弱學(xué)習(xí)器之間有依賴(lài)關(guān)系。
(2)bagging:同樣的,它也是組合多個(gè)弱學(xué)習(xí)器形成一個(gè)強(qiáng)學(xué)習(xí)器,但它各個(gè)弱學(xué)習(xí)器之間沒(méi)有依賴(lài)關(guān)系,而且可以并行擬合。
2、bagging流派算法簡(jiǎn)介
(1)算法結(jié)構(gòu)圖
(2)算法步驟
🌳從原始樣本集(包含M個(gè)樣本)中抽取k個(gè)采樣集
每個(gè)采樣集的生成是使用隨機(jī)采樣(bootsrap)的方法抽取M個(gè)訓(xùn)練樣本(有放回的抽樣:所以可能被重復(fù)抽取)
進(jìn)行k輪抽取,得到k個(gè)采樣集。(k個(gè)采樣集之間是相互獨(dú)立的)
🌳分別對(duì)這k個(gè)采樣集進(jìn)行訓(xùn)練形成對(duì)應(yīng)的k個(gè)弱學(xué)習(xí)器
🌳將這k個(gè)弱學(xué)習(xí)器模型輸出通過(guò)結(jié)合策略得到最終的模型輸出
結(jié)合策略:
對(duì)于分類(lèi)問(wèn)題:通常使用簡(jiǎn)單投票法,得到最多票數(shù)的類(lèi)別或者類(lèi)別之一為最終的模型輸出。
對(duì)于回歸問(wèn)題:通常使用簡(jiǎn)單平均法,對(duì)k個(gè)弱學(xué)習(xí)器得到的回歸結(jié)果進(jìn)行算術(shù)平均得到最終的模型輸出。
(3)OOB(袋外數(shù)據(jù))& 泛化能力
🌳OOB:即Out of Bag(袋外數(shù)據(jù))
上面我們提到“每個(gè)采樣集的生成是使用隨機(jī)采樣(bootsrap)的方法抽取M個(gè)訓(xùn)練樣本”。
那么原始數(shù)據(jù)集中任意一個(gè)樣本被抽取出來(lái)的概率是1/M,沒(méi)被抽取出來(lái)的概率為1-1/M。
那么M次采樣都沒(méi)抽中的概率就為
當(dāng)m→∞時(shí),p→1/e,約等于0.368
那么在每輪采樣集的生成中大約有36.8%的數(shù)據(jù)沒(méi)有被采樣集采集中,這部分?jǐn)?shù)據(jù)被稱(chēng)為袋外數(shù)據(jù)。
🌳OOB的作用
因?yàn)檫@些數(shù)據(jù)沒(méi)有參與采樣集模型的擬合,所以可以用來(lái)檢測(cè)模型的泛化能力
🌳泛化能力
由于Bagging算法每次都進(jìn)行采樣來(lái)訓(xùn)練模型,因此泛化能力很強(qiáng),對(duì)降低模型的方差很有效。當(dāng)然對(duì)于訓(xùn)練集(采樣集)的擬合程度就會(huì)差一些,也就是模型的偏差會(huì)大一些。
二、RF模型算法原理
1、RF Vs bagging
RF用了改進(jìn)的CART決策樹(shù)來(lái)作為弱學(xué)習(xí)器
(1)CART決策樹(shù)
CART決策樹(shù)是在給定輸入隨機(jī)變量X的條件下輸出隨機(jī)變量Y的條件概率分布的學(xué)習(xí)方法
CART假設(shè)決策樹(shù)全是二叉樹(shù)(即其結(jié)點(diǎn)只有兩種選擇:“是” or “否”):決策樹(shù)遞歸二分每個(gè)特征,最終得到?jīng)Q策樹(shù),通過(guò)不斷的劃分,將特征空間劃分為有限個(gè)單元,并在這些單元上確定預(yù)測(cè)的概率分布
因此CART就是遞歸構(gòu)建二叉樹(shù),但是對(duì)于分類(lèi)和回歸問(wèn)題使用的策略是不一樣的:
對(duì)于回歸樹(shù)使用的是平方誤差最小;而對(duì)于分類(lèi)樹(shù)使用的是基尼指數(shù)最小化準(zhǔn)則()
(2)RF中的CART決策樹(shù)
普通決策樹(shù):在節(jié)點(diǎn)上所有的n個(gè)樣本特征中選擇一個(gè)最優(yōu)特征來(lái)作為決策樹(shù)的左右子樹(shù)劃分
RF:隨機(jī)選擇節(jié)點(diǎn)上的一部分樣本特征,假設(shè)為t個(gè)特征(t<n),然后在這些隨機(jī)選擇樣本特征中,選擇一個(gè)最優(yōu)的特征來(lái)作為決策樹(shù)的左右子樹(shù)劃分,這樣進(jìn)一步增強(qiáng)了模型的泛化能力
t越小——模型越穩(wěn)定(模型方差變小),但對(duì)于訓(xùn)練集的擬合程度會(huì)變差(偏差變大)
所以在實(shí)際案例中,一般會(huì)通過(guò)交叉驗(yàn)證調(diào)參獲取一個(gè)合適的t
注:分類(lèi)問(wèn)題中,t默認(rèn)取;回歸問(wèn)題中,默認(rèn)取M/3
2、算法步驟
(1)從原始樣本集(包含M個(gè)樣本)中抽取k個(gè)采樣集
每個(gè)采樣集的生成是使用隨機(jī)采樣(bootsrap)的方法抽取M個(gè)訓(xùn)練樣本(有放回的抽樣:所以可能被重復(fù)抽取)
進(jìn)行k輪抽取,得到k個(gè)采樣集。(k個(gè)采樣集之間是相互獨(dú)立的)
(2)分別對(duì)這k個(gè)采樣集進(jìn)行訓(xùn)練形成對(duì)應(yīng)的k個(gè)弱學(xué)習(xí)器
在訓(xùn)練決策樹(shù)模型的節(jié)點(diǎn)的時(shí)候, 在節(jié)點(diǎn)上所有樣本特征中選擇一部分樣本特征(選中了就不放回了),在這部分樣本特征中選擇一個(gè)最優(yōu)的特征來(lái)作為決策樹(shù)的左右子樹(shù)劃分
判斷特征的重要性:
🎈對(duì)整個(gè)隨機(jī)森林,得到相應(yīng)OOB,然后計(jì)算OOB誤差,記為errOOB1
🎈隨機(jī)對(duì)OOB所有樣本的特征X加入噪聲干擾(即可以隨機(jī)改變樣本在特征X處的值),再次計(jì)算袋外數(shù)據(jù)誤差,記為errOOB2
🎈假設(shè)森林中有N棵樹(shù),則特征X的重要性 = (∑errOOB2?errOOB1)/N
(3)將這k個(gè)弱學(xué)習(xí)器模型輸出通過(guò)結(jié)合策略得到最終的模型輸出
結(jié)合策略:
對(duì)于分類(lèi)問(wèn)題:通常使用簡(jiǎn)單投票法,得到最多票數(shù)的類(lèi)別或者類(lèi)別之一為最終的模型輸出。(RF通常處理的是分類(lèi)問(wèn)題)
對(duì)于回歸問(wèn)題:通常使用簡(jiǎn)單平均法,對(duì)k個(gè)弱學(xué)習(xí)器得到的回歸結(jié)果進(jìn)行算術(shù)平均得到最終的模型輸出。
剛剛不是說(shuō)有OOB嘛~派上用場(chǎng)啦
🌳對(duì)OOB樣本中的每個(gè)樣本,計(jì)算對(duì)應(yīng)決策樹(shù)對(duì)它的分類(lèi)情況;
🌳然后以簡(jiǎn)單多數(shù)投票作為該樣本的分類(lèi)結(jié)果;
🌳最后用誤分個(gè)數(shù)占樣本總數(shù)的比率作為隨機(jī)森林的oob誤分率。
三、RF模型的優(yōu)缺點(diǎn)
1、優(yōu)點(diǎn)
RF善于處理高維數(shù)據(jù),特征遺失數(shù)據(jù),和不平衡數(shù)據(jù)
(1)訓(xùn)練可以并行化,速度快
(2)對(duì)高維數(shù)據(jù)集的處理能力強(qiáng),它可以處理成千上萬(wàn)的輸入變量,并確定最重要的變量,因此被認(rèn)為是一個(gè)不錯(cuò)的降維方法。
(3)在訓(xùn)練集缺失數(shù)據(jù)時(shí)依舊能保持較好的精度(原因:RF隨機(jī)選取樣本和特征;RF可以繼承決策樹(shù)對(duì)缺失數(shù)據(jù)的處理方式)
(4)泛化能力強(qiáng),因?yàn)殡S機(jī)
2、缺點(diǎn)
(1)在解決回歸問(wèn)題時(shí)效果不是很好
RF不能給出一個(gè)連續(xù)的輸出,而且RF不能做出超越訓(xùn)練集數(shù)據(jù)范圍的預(yù)測(cè),這可能會(huì)導(dǎo)致在訓(xùn)練含有某些特定噪聲的數(shù)據(jù)時(shí)出現(xiàn)過(guò)擬合
(2)對(duì)特征數(shù)比較少的數(shù)據(jù),它的隨機(jī)性不好發(fā)揮,效果不太好
四、RF的變式——extra trees?
改進(jìn)點(diǎn):
1、extra trees的每個(gè)決策樹(shù)采用原始訓(xùn)練集
2、extra trees隨機(jī)選擇一個(gè)特征值來(lái)劃分決策樹(shù)
五、代碼實(shí)現(xiàn)RF模型
我們可以調(diào)用sklearn里面現(xiàn)成的RF模型來(lái)實(shí)現(xiàn)
🌳首先導(dǎo)入所需要的庫(kù)
import numpy as np import pandas as pd from sklearn.ensemble import RandomForestClassifier #導(dǎo)入隨機(jī)森林模型 from sklearn.datasets import load_boston #讓我們利用sklearn里現(xiàn)有的boston數(shù)據(jù) from sklearn.model_selection import train_test_split#用來(lái)進(jìn)行訓(xùn)練集和測(cè)試集的自動(dòng)分配🌳我們這里使用sklearn里的boston數(shù)據(jù)
boston = load_boston()#導(dǎo)入boston數(shù)據(jù)🌳我們把數(shù)據(jù)變成DataFrame類(lèi)型,這樣比較好處理,我們看起來(lái)也比較清晰
bos = pd.DataFrame(boston.data, columns = boston.feature_names) bos['MEDV'] = boston.target print(bos) print(bos.columns)數(shù)據(jù)變成這樣
🌳讓我們把數(shù)據(jù)變?yōu)閚umpy類(lèi)型再送進(jìn)train_test_split進(jìn)行訓(xùn)練集和測(cè)試集的分配
y = np.array(bos['MEDV']) #目標(biāo) x = bos.drop(['MEDV'], axis=1)#去除目標(biāo)后的所有數(shù)據(jù)作為輸入 x = np.array(x) x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2)#分成80%訓(xùn)練,20%測(cè)試?🌳模型配置并訓(xùn)練
rf = RandomForestClassifier(n_estimators=10000, random_state=0, n_jobs=-1)#RF模型設(shè)置 rf.fit(x_train, y_train.astype('int'))#把數(shù)據(jù)送進(jìn)去訓(xùn)練🎈RandomForestClassifier函數(shù)
n_estimators?:森林里決策樹(shù)的數(shù)目,默認(rèn)是10
random_state:隨機(jī)數(shù)生成器使用的種子
n_jobs:用于擬合和預(yù)測(cè)的并行運(yùn)行的工作數(shù)量。如果值為-1,那么工作數(shù)量被設(shè)置為核的數(shù)量
🌳輸出預(yù)測(cè)后的每個(gè)特征對(duì)于MEDV的重要性
a = rf.feature_importances_ print(boston.feature_names) print("重要性:",a)預(yù)測(cè)結(jié)果
歡迎大家在評(píng)論區(qū)批評(píng)指正,謝謝大家~
總結(jié)
以上是生活随笔為你收集整理的RF模型(随机森林模型)详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Eclipse: select at l
- 下一篇: 截取图片生成头像插件