最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

R語言實(shí)現(xiàn)隨機(jī)森林的方法示例

 更新時(shí)間:2021年08月11日 10:05:45   作者:bigdata老司機(jī)  
本文詳細(xì)的介紹了隨機(jī)森林的算法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

隨機(jī)森林算法介紹

算法介紹:

簡單的說,隨機(jī)森林就是用隨機(jī)的方式建立一個(gè)森林,森林里面有很多的決策樹,并且每棵樹之間是沒有關(guān)聯(lián)的。得到一個(gè)森林后,當(dāng)有一個(gè)新的樣本輸入,森林中的每一棵決策樹會(huì)分別進(jìn)行一下判斷,進(jìn)行類別歸類(針對(duì)分類算法),最后比較一下被判定哪一類最多,就預(yù)測該樣本為哪一類。
隨機(jī)森林算法有兩個(gè)主要環(huán)節(jié):決策樹的生長和投票過程。

決策樹生長步驟:

  • 從容量為N的原始訓(xùn)練樣本數(shù)據(jù)中采取放回抽樣方式(即bootstrap取樣)隨機(jī)抽取自助樣本集,重復(fù)k(樹的數(shù)目為k)次形成一個(gè)新的訓(xùn)練集N,以此生成一棵分類樹;
  • 每個(gè)自助樣本集生長為單棵分類樹,該自助樣本集是單棵分類樹的全部訓(xùn)練數(shù)據(jù)。設(shè)有M個(gè)輸入特征,則在樹的每個(gè)節(jié)點(diǎn)處從M個(gè)特征中隨機(jī)挑選m(m < M)個(gè)特征,按照節(jié)點(diǎn)不純度最小的原則從這m個(gè)特征中選出一個(gè)特征進(jìn)行分枝生長,然后再分別遞歸調(diào)用上述過程構(gòu)造各個(gè)分枝,直到這棵樹能準(zhǔn)確地分類訓(xùn)練集或所有屬性都已被使用過。在整個(gè)森林的生長過程中m將保持恒定;
  • 分類樹為了達(dá)到低偏差和高差異而要充分生長,使每個(gè)節(jié)點(diǎn)的不純度達(dá)到最小,不進(jìn)行通常的剪枝操作。

投票過程:

隨機(jī)森林采用Bagging方法生成多個(gè)決策樹分類器。

基本思想:

  • 給定一個(gè)弱學(xué)習(xí)算法和一個(gè)訓(xùn)練集,單個(gè)弱學(xué)習(xí)算法準(zhǔn)確率不高,可以視為一個(gè)窄領(lǐng)域?qū)<遥?/li>
  • 將該學(xué)習(xí)算法使用多次,得出預(yù)測函數(shù)序列,進(jìn)行投票,將多個(gè)窄領(lǐng)域?qū)<以u(píng)估結(jié)果匯總,最后結(jié)果準(zhǔn)確率將大幅提升。

隨機(jī)森林的優(yōu)點(diǎn):

  • 可以處理大量的輸入變量;
  • 對(duì)于很多種資料,可以產(chǎn)生高準(zhǔn)確度的分類器;
  • 可以在決定類別時(shí),評(píng)估變量的重要性;
  • 在建造森林時(shí),可以在內(nèi)部對(duì)于一般化后的誤差產(chǎn)生不偏差的估計(jì);
  • 包含一個(gè)好方法可以估計(jì)遺失的資料,并且,如果有很大一部分的資料遺失,仍可以維持準(zhǔn)確度;
  • 提供一個(gè)實(shí)驗(yàn)方法,可以去偵測 variable interactions;
  • 對(duì)于不平衡的分類資料集來說,可以平衡誤差;
  • 計(jì)算各例中的親近度,對(duì)于數(shù)據(jù)挖掘、偵測偏離者(outlier)和將資料視覺化非常有用;
  • 使用上述??杀谎由鞈?yīng)用在未標(biāo)記的資料上,這類資料通常是使用非監(jiān)督式聚類。也可偵測偏離者和觀看資料;
  • 學(xué)習(xí)過程很快速。

缺點(diǎn)

  • 隨機(jī)森林已經(jīng)被證明在某些噪音較大的分類或回歸問題上會(huì)過擬合;
  • 對(duì)于有不同級(jí)別的屬性的數(shù)據(jù),級(jí)別劃分較多的屬性會(huì)對(duì)隨機(jī)森林產(chǎn)生更大的影響,所以隨機(jī)森林在這種數(shù)據(jù)上產(chǎn)出的屬性權(quán)值是不可信的。

R語言實(shí)現(xiàn)

尋找最優(yōu)參數(shù)mtry,即指定節(jié)點(diǎn)中用于二叉樹的最佳變量個(gè)數(shù)

library("randomForest")
n<-length(names(train_data))     #計(jì)算數(shù)據(jù)集中自變量個(gè)數(shù),等同n=ncol(train_data)
rate=1     #設(shè)置模型誤判率向量初始值

for(i in 1:(n-1)){
  set.seed(1234)
  rf_train<-randomForest(as.factor(train_data$IS_LIUSHI)~.,data=train_data,mtry=i,ntree=1000)
  rate[i]<-mean(rf_train$err.rate)   #計(jì)算基于OOB數(shù)據(jù)的模型誤判率均值
  print(rf_train)    
}

rate     #展示所有模型誤判率的均值
plot(rate)

尋找最佳參數(shù)ntree,即指定隨機(jī)森林所包含的最佳決策樹數(shù)目

set.seed(100)
rf_train<-randomForest(as.factor(train_data$IS_LIUSHI)~.,data=train_data,mtry=12,ntree=1000)
plot(rf_train)    #繪制模型誤差與決策樹數(shù)量關(guān)系圖  
legend(800,0.02,"IS_LIUSHI=0",cex=0.9,bty="n")    
legend(800,0.0245,"total",cex=0.09,bty="n")    

隨機(jī)森林模型搭建

set.seed(100)
rf_train<-randomForest(as.factor(train_data$IS_LIUSHI)~.,data=train_data,mtry=12,ntree=400,importance=TRUE,proximity=TRUE)    
  • importance設(shè)定是否輸出因變量在模型中的重要性,如果移除某個(gè)變量,模型方差增加的比例是它判斷變量重要性的標(biāo)準(zhǔn)之一;
  • proximity參數(shù)用于設(shè)定是否計(jì)算模型的臨近矩陣;
  • ntree用于設(shè)定隨機(jī)森林的樹數(shù)。

輸出變量重要性:分別從精確度遞減和均方誤差遞減的角度來衡量重要程度。

importance<-importance(rf_train) 
write.csv(importance,file="E:/模型搭建/importance.csv",row.names=T,quote=F)
barplot(rf_train$importance[,1],main="輸入變量重要性測度指標(biāo)柱形圖")
box()

提取隨機(jī)森林模型中以準(zhǔn)確率遞減方法得到維度重要性值。type=2為基尼系數(shù)方法

importance(rf_train,type=1)
 
varImpPlot(x=rf_train,sort=TRUE,n.var=nrow(rf_train$importance),main="輸入變量重要性測度散點(diǎn)圖")

信息展示

print(rf_train)    #展示隨機(jī)森林模型簡要信息
hist(treesize(rf_train))   #展示隨機(jī)森林模型中每棵決策樹的節(jié)點(diǎn)數(shù)
max(treesize(rf_train));min(treesize(rf_train))
MDSplot(rf_train,train_data$IS_OFF_USER,palette=rep(1,2),pch=as.numeric(train_data$IS_LIUSHI))    #展示數(shù)據(jù)集在二維情況下各類別的具體分布情況

檢測

pred<-predict(rf_train,newdata=test_data)  
pred_out_1<-predict(object=rf_train,newdata=test_data,type="prob")  #輸出概率
table <- table(pred,test_data$IS_LIUSHI)  
sum(diag(table))/sum(table)  #預(yù)測準(zhǔn)確率
plot(margin(rf_train,test_data$IS_LIUSHI),main=觀測值被判斷正確的概率圖)

randomForest包可以實(shí)現(xiàn)隨機(jī)森林算法的應(yīng)用,主要涉及5個(gè)重要函數(shù),語法和參數(shù)請(qǐng)見下

1:randomForest()函數(shù)用于構(gòu)建隨機(jī)森林模型

randomForest(formula, data=NULL, ..., subset, na.action=na.fail)
randomForest(x, y=NULL, xtest=NULL, ytest=NULL, ntree=500,
             mtry=if (!is.null(y) && !is.factor(y))
               max(floor(ncol(x)/3), 1) else floor(sqrt(ncol(x))),
             replace=TRUE, classwt=NULL, cutoff, strata,
             sampsize = if (replace) nrow(x) else ceiling(.632*nrow(x)),
             nodesize = if (!is.null(y) && !is.factor(y)) 5 else 1,
             maxnodes = NULL,
             importance=FALSE, localImp=FALSE, nPerm=1,
             proximity, oob.prox=proximity,
             norm.votes=TRUE, do.trace=FALSE,
             keep.forest=!is.null(y) && is.null(xtest), corr.bias=FALSE,
             keep.inbag=FALSE, ...)
  • formula指定模型的公式形式,類似于y~x1+x2+x3…;
  • data指定分析的數(shù)據(jù)集;
  • subset以向量的形式確定樣本數(shù)據(jù)集;
  • na.action指定數(shù)據(jù)集中缺失值的處理方法,默認(rèn)為na.fail,即不允許出現(xiàn)缺失值,也可以指定為na.omit,即刪除缺失樣本;
  • x指定模型的解釋變量,可以是矩陣,也可以是數(shù)據(jù)框;
  • y指定模型的因變量,可以是離散的因子,也可以是連續(xù)的數(shù)值,分別對(duì)應(yīng)于隨機(jī)森林的分類模型和預(yù)測模型。這里需要說明的是,如果不指定y值,則隨機(jī)森林將是一個(gè)無監(jiān)督的模型;
  • xtest和ytest用于預(yù)測的測試集;
  • ntree指定隨機(jī)森林所包含的決策樹數(shù)目,默認(rèn)為500;
  • mtry指定節(jié)點(diǎn)中用于二叉樹的變量個(gè)數(shù),默認(rèn)情況下數(shù)據(jù)集變量個(gè)數(shù)的二次方根(分類模型)或三分之一(預(yù)測模型)。一般是需要進(jìn)行人為的逐次挑選,確定最佳的m值;
  • replace指定Bootstrap隨機(jī)抽樣的方式,默認(rèn)為有放回的抽樣
  • classwt指定分類水平的權(quán)重,對(duì)于回歸模型,該參數(shù)無效;
  • strata為因子向量,用于分層抽樣;
  • sampsize用于指定樣本容量,一般與參數(shù)strata聯(lián)合使用,指定分層抽樣中層的樣本量;
  • nodesize指定決策樹節(jié)點(diǎn)的最小個(gè)數(shù),默認(rèn)情況下,判別模型為1,回歸模型為5;
  • maxnodes指定決策樹節(jié)點(diǎn)的最大個(gè)數(shù);
  • importance邏輯參數(shù),是否計(jì)算各個(gè)變量在模型中的重要性,默認(rèn)不計(jì)算,該參數(shù)主要結(jié)合importance()函數(shù)使用;
  • proximity邏輯參數(shù),是否計(jì)算模型的臨近矩陣,主要結(jié)合MDSplot()函數(shù)使用;
  • oob.prox是否基于OOB數(shù)據(jù)計(jì)算臨近矩陣;
  • norm.votes顯示投票格式,默認(rèn)以百分比的形式展示投票結(jié)果,也可以采用絕對(duì)數(shù)的形式;
  • do.trace是否輸出更詳細(xì)的隨機(jī)森林模型運(yùn)行過程,默認(rèn)不輸出;
  • keep.forest是否保留模型的輸出對(duì)象,對(duì)于給定xtest值后,默認(rèn)將不保留算法的運(yùn)算結(jié)果。

2:importance()函數(shù)用于計(jì)算模型變量的重要性

importance(x, type=NULL, class="NULL", scale=TRUE, ...)
  • x為randomForest對(duì)象;
  • type可以是1,也可以是2,用于判別計(jì)算變量重要性的方法,1表示使用精度平均較少值作為度量標(biāo)準(zhǔn);2表示采用節(jié)點(diǎn)不純度的平均減少值最為度量標(biāo)準(zhǔn)。值越大說明變量的重要性越強(qiáng);
  • scale默認(rèn)對(duì)變量的重要性值進(jìn)行標(biāo)準(zhǔn)化。

3:MDSplot()函數(shù)用于實(shí)現(xiàn)隨機(jī)森林的可視化

MDSplot(rf, fac, k=2, palette=NULL, pch=20, ...)
  • rf為randomForest對(duì)象,需要說明的是,在構(gòu)建隨機(jī)森林模型時(shí)必須指定計(jì)算臨近矩陣,即設(shè)置proximity參數(shù)為TRUE;
  • fac指定隨機(jī)森林模型中所使用到的因子向量(因變量);
  • palette指定所繪圖形中各個(gè)類別的顏色;
  • pch指定所繪圖形中各個(gè)類別形狀;
  • 還可以通過R自帶的plot函數(shù)繪制隨機(jī)森林決策樹的數(shù)目與模型誤差的折線圖

4:rfImpute()函數(shù)可為存在缺失值的數(shù)據(jù)集進(jìn)行插補(bǔ)(隨機(jī)森林法),得到最優(yōu)的樣本擬合值

rfImpute(x, y, iter=5, ntree=300, ...)
rfImpute(x, data, ..., subset)
  • x為存在缺失值的數(shù)據(jù)集;
  • y為因變量,不可以存在缺失情況;
  • iter指定插值過程中迭代次數(shù);
  • ntree指定每次迭代生成的隨機(jī)森林中決策樹數(shù)量;
  • subset以向量的形式指定樣本集。

5:treesize()函數(shù)用于計(jì)算隨機(jī)森林中每棵樹的節(jié)點(diǎn)個(gè)數(shù)

treesize(x, terminal=TRUE)
  • x為randomForest對(duì)象;
  • terminal指定計(jì)算節(jié)點(diǎn)數(shù)目的方式,默認(rèn)只計(jì)算每棵樹的根節(jié)點(diǎn),設(shè)置為FALSE時(shí)將計(jì)算所有節(jié)點(diǎn)(根節(jié)點(diǎn)+葉節(jié)點(diǎn))。
  • 一般treesize()函數(shù)生成的結(jié)果用于繪制直方圖,方面查看隨機(jī)森林中樹的節(jié)點(diǎn)分布情況。

到此這篇關(guān)于R語言實(shí)現(xiàn)隨機(jī)森林的方法示例的文章就介紹到這了,更多相關(guān)R語言 隨機(jī)森林內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決R語言 數(shù)據(jù)不平衡的問題

    解決R語言 數(shù)據(jù)不平衡的問題

    這篇文章主要介紹了解決R語言 數(shù)據(jù)不平衡的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • ComplexHeatmap繪制單個(gè)熱圖

    ComplexHeatmap繪制單個(gè)熱圖

    這篇文章主要為大家介紹了ComplexHeatmap繪制單個(gè)熱圖示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • R語言wilcoxon秩和檢驗(yàn)及wilcoxon符號(hào)秩檢驗(yàn)的操作

    R語言wilcoxon秩和檢驗(yàn)及wilcoxon符號(hào)秩檢驗(yàn)的操作

    這篇文章主要介紹了R語言wilcoxon秩和檢驗(yàn)及wilcoxon符號(hào)秩檢驗(yàn)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • R語言 如何保留大于或小于特定數(shù)值的行

    R語言 如何保留大于或小于特定數(shù)值的行

    這篇文章主要介紹了R語言實(shí)現(xiàn)保留大于或小于特定數(shù)值的行操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • R語言繪圖數(shù)據(jù)可視化pie?chart餅圖

    R語言繪圖數(shù)據(jù)可視化pie?chart餅圖

    這篇文章主要介紹了R語言繪圖數(shù)據(jù)可視化pie?chart餅圖,教大家如何用R語言來畫大餅,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • R語言繪制Radar chart雷達(dá)圖

    R語言繪制Radar chart雷達(dá)圖

    這篇文章主要為大家介紹了R語言繪制Radar chart雷達(dá)圖的方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • R語言-如何定義數(shù)據(jù)框的列名

    R語言-如何定義數(shù)據(jù)框的列名

    這篇文章主要介紹了R語言-定義數(shù)據(jù)框的列名操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • R語言使用cgdsr包獲取TCGA數(shù)據(jù)示例詳解

    R語言使用cgdsr包獲取TCGA數(shù)據(jù)示例詳解

    這篇文章主要為大家介紹了R語言使用cgdsr包獲取TCGA數(shù)據(jù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • R語言向量下標(biāo)操作

    R語言向量下標(biāo)操作

    這篇文章主要介紹了R語言向量下標(biāo)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • R語言兩組變量特征相關(guān)關(guān)系熱圖繪制畫法

    R語言兩組變量特征相關(guān)關(guān)系熱圖繪制畫法

    本文為大家介紹了如何畫兩組變量(特征)的相關(guān)關(guān)系熱圖的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02

最新評(píng)論

无为县| 奇台县| 石台县| 日土县| 个旧市| 闽侯县| 阿拉善右旗| 龙口市| 辽阳县| 黎平县| 德州市| 钟山县| 阳东县| 恭城| 静宁县| 乳山市| 司法| 濉溪县| 宁强县| 玉环县| 都江堰市| 闻喜县| 晴隆县| 正定县| 克什克腾旗| 海淀区| 塘沽区| 资中县| 潮安县| 略阳县| 新密市| 肇源县| 玉山县| 土默特左旗| 桃园县| 牙克石市| 蓬溪县| 巫山县| 含山县| 讷河市| 武功县|