基于随机森林的分类与回归
一、隨機(jī)森林基本概念
隨機(jī)森林(Random forest) 是一種組成式的有監(jiān)督學(xué)習(xí)方法。在隨機(jī)森林中,我們同時(shí)生成多個(gè)預(yù)測(cè)模型,并將模型的結(jié)果匯總以提升預(yù)測(cè)模型的準(zhǔn)確率。
隨機(jī)森林算法(預(yù)測(cè)和回歸)主要包括一下三個(gè)方面:
1.從原始數(shù)據(jù)隨機(jī)有放回的抽取N個(gè)樣本單元,生成決策或者回歸樹(shù)。
2.在每一個(gè)節(jié)點(diǎn)隨機(jī)抽取m<M個(gè)變量,將其作為分割節(jié)點(diǎn)的候選變量。每一個(gè)節(jié)點(diǎn)處變量數(shù)應(yīng)該一致。
3.最終對(duì)每一顆決策或者回歸樹(shù)的結(jié)果進(jìn)行整合,生成預(yù)測(cè)值。
二、隨機(jī)森林的優(yōu)勢(shì)
1.在沒(méi)有驗(yàn)證數(shù)據(jù)集的時(shí)候,可以計(jì)算袋外預(yù)測(cè)誤差(生成樹(shù)時(shí)沒(méi)有用到的樣本點(diǎn)所對(duì)應(yīng)的類(lèi)別可由生成的樹(shù)估計(jì),與其真實(shí)類(lèi)別比較即可得到袋外預(yù)測(cè))。
2.隨機(jī)森林可以計(jì)算變量的重要性。
3.計(jì)算不同數(shù)據(jù)點(diǎn)之間的距離,從而進(jìn)行非監(jiān)督分類(lèi)。
三、隨機(jī)森林R語(yǔ)言實(shí)例
如果數(shù)據(jù)集的響應(yīng)變量為類(lèi)別型,則隨機(jī)森林根據(jù)預(yù)測(cè)變量預(yù)測(cè)一個(gè)分類(lèi)結(jié)果;如果數(shù)據(jù)集的響應(yīng)變量為連續(xù)型,則隨機(jī)森林根據(jù)預(yù)測(cè)變量進(jìn)行回歸。
1.利用隨機(jī)森林預(yù)測(cè)一個(gè)分類(lèi)結(jié)果
加載程序包
library(randomForest)
library(MASS)
加載數(shù)據(jù)
data(fgl)
str(fgl)
為保證結(jié)果大家運(yùn)算結(jié)果一致 設(shè)定隨機(jī)種子
set.seed(17)
構(gòu)建隨機(jī)森林模型 mtry參數(shù)表征默認(rèn)在每個(gè)節(jié)點(diǎn)抽取的變量數(shù)
fgl.rf<- randomForest(type ~ .,data=fgl, mtry=2, importance=TRUE,
? ?do.trace=100)
fgl.rf
混淆矩陣結(jié)果可以看出隨機(jī)森林對(duì)各類(lèi)別的分類(lèi)效果。
采用十折交叉驗(yàn)證對(duì)比隨機(jī)森林與支持向量機(jī)的誤差。十折交叉驗(yàn)證:用來(lái)測(cè)試精度。是常用的精度測(cè)試方法。將數(shù)據(jù)集分成十分,輪流將其中9份做訓(xùn)練1份做測(cè)試,10次的結(jié)果的均值作為對(duì)算法精度的估計(jì),一般還需要進(jìn)行多次10倍交叉驗(yàn)證求均值,例如10次10倍交叉驗(yàn)證,更精確一點(diǎn)。
library(ipred)
set.seed(131)
error.RF<- numeric(10)
for(iin 1:10) error.RF[i] <-
? ?errorest(type ~ ., data = fgl,
? ?model = randomForest, mtry = 2)$error
summary(error.RF)
library(e1071)
set.seed(563)
error.SVM<- numeric(10)
for(i in 1:10) error.SVM[i] <-
? ?errorest(type ~ ., data = fgl,
? ?model = svm, cost = 10, gamma = 1.5)$error
summary(error.SVM)
從結(jié)果中可以看出隨機(jī)森林的誤差要小于支持向量機(jī)模型
查看變量重要性
imp<- as.data.frame(fgl.rf$importance)
head(imp)
attach(imp)
par(mfrow= c(2, 2))
for(i in 1:4){
? ?data <-imp[order(imp[,i],decreasing=T),]
? ?plot(data[,i],type = “h”, main =paste(“Measure”, i), ylab=””, xaxt=”n”)
? text(data[,i],rownames(data),cex=0.6,pos=4,col=”red”)
}
由上圖可以看出不同變量在預(yù)測(cè)不同類(lèi)別時(shí)的重要性
2.基于隨機(jī)森林回歸分析
首先,我們先注意一下隨機(jī)森林回歸和隨機(jī)森林分類(lèi)的差別:(1)默認(rèn)mtry是p/3而不是p1/2,其中p表示預(yù)測(cè)變量數(shù)(2)默認(rèn)節(jié)點(diǎn)大小為5而不是1(3)只有一個(gè)測(cè)量變量的重要性。
data(Boston)
set.seed(1341)
BH.rf<- randomForest(medv ~ ., Boston)
BH.rf
由上圖可以看出隨機(jī)森林回歸模型結(jié)果的方差解釋量
對(duì)比隨機(jī)森林預(yù)測(cè)結(jié)果、多元回歸預(yù)測(cè)結(jié)果和實(shí)際值的差異
forest.pred<- predict(BH.rf, Boston)
fit<- lm(medv ~ ., Boston)
lm.pred<-predict(fit,Boston)
data<- data.frame(Boston$medv, forest.pred1, lm.pred1)
head(data)
library(car)
png(filename= “l(fā)m.png”, width = 900, height = 500)
scatterplotMatrix(data)
dev.off()
由上圖可以看出隨機(jī)森林結(jié)果要優(yōu)于多元回歸模型。
3.隨機(jī)森林中需要注意的地方:
3.1合理確定決策樹(shù)的數(shù)量。
3.2合理確定每個(gè)節(jié)點(diǎn)隨機(jī)抽取的變量數(shù)
3.3決策樹(shù)數(shù)量越多,結(jié)果越穩(wěn)定。
作者:吳健 中國(guó)科學(xué)院大學(xué) R語(yǔ)言、統(tǒng)計(jì)學(xué)愛(ài)好者,尤其擅長(zhǎng)R語(yǔ)言和Arcgis在生態(tài)領(lǐng)域的應(yīng)用分享
個(gè)人公眾號(hào):統(tǒng)計(jì)與編程語(yǔ)言?
∑編輯?|?Gemini
來(lái)源 | 網(wǎng)絡(luò)
算法數(shù)學(xué)之美微信公眾號(hào)歡迎賜稿
稿件涉及數(shù)學(xué)、物理、算法、計(jì)算機(jī)、編程等相關(guān)領(lǐng)域,經(jīng)采用我們將奉上稿酬。
投稿郵箱:math_alg@163.com
總結(jié)
以上是生活随笔為你收集整理的基于随机森林的分类与回归的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 读书,是成本最低的投资,却是一生的高贵
- 下一篇: 【AI独角兽招聘】这里有一个梦,我们一同