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

R語言交叉驗證的實現(xiàn)代碼

 更新時間:2021年03月11日 09:03:01   作者:bigdata老司機(jī)  
這篇文章主要介紹了R語言交叉驗證的實現(xiàn),本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

k-折交叉驗證

k-折交叉驗證(K-fold cross-validation)是交叉驗證方法里一種。它是指將樣本集分為k份,其中k-1份作為訓(xùn)練數(shù)據(jù)集,而另外的1份作為驗證數(shù)據(jù)集。用驗證集來驗證所得分類器或者模型的錯誤率。一般需要循環(huán)k次,直到所有k份數(shù)據(jù)全部被選擇一遍為止。

有關(guān)交叉驗證的介紹可參考作者另一博文:
http://blog.csdn.net/yawei_liu1688/article/details/79138202

R語言實現(xiàn)

K折交叉驗證,隨機(jī)分組

數(shù)據(jù)打折-數(shù)據(jù)分組自編譯函數(shù):進(jìn)行交叉檢驗首先要對數(shù)據(jù)分組,數(shù)據(jù)分組要符合隨機(jī)且平均的原則

library(plyr)
CVgroup <- function(k,datasize,seed){
 cvlist <- list()
 set.seed(seed)
 n <- rep(1:k,ceiling(datasize/k))[1:datasize]  #將數(shù)據(jù)分成K份,并生成的完成數(shù)據(jù)集n
 temp <- sample(n,datasize)  #把n打亂
 x <- 1:k
 dataseq <- 1:datasize
 cvlist <- lapply(x,function(x) dataseq[temp==x]) #dataseq中隨機(jī)生成k個隨機(jī)有序數(shù)據(jù)列
 return(cvlist)
}
k <- 10
datasize <- nrow(iris)
cvlist <- CVgroup(k = k,datasize = datasize,seed = 1206)
cvlist

結(jié)果輸出示例:

輸出示例

K折交叉驗證
第一種方法:循環(huán)語句寫驗證

data <- iris
pred <- data.frame()  #存儲預(yù)測結(jié)果
library(plyr)
library(randomForest)
m <- seq(60,500,by = 20) #如果數(shù)據(jù)量大盡量間隔大點,間隔過小沒有實際意義
for(j in m){  #j指的是隨機(jī)森林的數(shù)量
 progress.bar <- create_progress_bar("text") #plyr包中的create_progress_bar函數(shù)創(chuàng)建一個進(jìn)度條,
 progress.bar$init(k)  #設(shè)置上面的任務(wù)數(shù),幾折就是幾個任務(wù)
 for (i in 1:k){
  train <- data[-cvlist[[i]],] #剛才通過cvgroup生成的函數(shù)
  test <- data[cvlist[[i]],]
  model <-randomForest(Sepal.Length~.,data = train,ntree = j)  #建模,ntree=j 指的樹數(shù)
  prediction <- predict(model,subset(test,select = -Sepal.Length))  #預(yù)測
  randomtree <- rep(j,length(prediction))  #隨機(jī)森林樹的數(shù)量
  kcross <- rep(i,length(prediction))  #i是第幾次循環(huán)交叉,共K次
  temp <- data.frame(cbind(subset(test,select = Sepal.Length),prediction,randomtree,kcross))#真實值、預(yù)測值、隨機(jī)森林樹數(shù)、預(yù)測組編號捆綁在一起組成新的數(shù)據(jù)框tenp
  pred <- rbind(pred,temp)  #temp按行和pred合并
  print(paste("隨機(jī)森林:",j)) #循環(huán)至樹數(shù)j的隨機(jī)森林模型
  progress.bar$step() #輸出進(jìn)度條。告知完成了這個任務(wù)的百分之幾
 }
}

結(jié)果輸出示例1:

輸出示例

結(jié)果輸出示例2:指標(biāo)分別為真實值、預(yù)測值、隨機(jī)森林樹數(shù)、預(yù)測組編號

這里寫圖片描述

第二種方法:apply家族lapply
當(dāng)測試的循環(huán)數(shù)較多或單任務(wù)耗時較多時,apply家族優(yōu)勢特別明顯

data <- iris
library(plyr)
library(randomForest)
k = 10
j <- seq(10,10000,by = 20)  #j樹的數(shù)量
i <- 1:k  #K折
i <- rep(i,times = length(j))
j <- rep(j,each = k)  #多少折,each多少
x <- cbind(i,j)
cvtest <- function(i,j){
 train <- data[-cvlist[[i]],]
 test <- data[cvlist[[i]],]
 model <- randomForest(Sepal.Length~.,data = train,ntree = j)
 prediction <- predict(model,subset(test,select = -Sepal.Length))
 temp <- data.frame(cbind(subset(test,select = Sepal.Length),prediction))
}

結(jié)果輸出示例3:指標(biāo)分別為真實值、預(yù)測值、隨機(jī)森林樹數(shù)、預(yù)測組編號

這里寫圖片描述

system.time(pred <- mdply(x,cvtest))  

這里寫圖片描述

mdyly在plyr包中:輸出三個指標(biāo):“用戶”“系統(tǒng)”“流逝”。其中“流逝”應(yīng)該是這段代碼從開始到結(jié)束的真正時間。對于一般單線程的程序來說這個時間近似于用戶時間和系統(tǒng)時間之和,可以看出共運行了1386秒。

到此這篇關(guān)于R語言交叉驗證的文章就介紹到這了,更多相關(guān)R語言交叉驗證的實現(xiàn)代碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

图们市| 高雄市| 辽阳县| 柘城县| 平阴县| 和硕县| 莱芜市| 永靖县| 湖口县| 红原县| 吉木萨尔县| 荣成市| 普兰县| 河东区| 石景山区| 东港市| 邳州市| 汝州市| 安丘市| 淮滨县| 积石山| 府谷县| 丹寨县| 新龙县| 惠州市| 海盐县| 汉沽区| 永兴县| 西乡县| 南郑县| 和政县| 象山县| 墨脱县| 特克斯县| 响水县| 井陉县| 桃源县| 应用必备| 南江县| 应用必备| 象山县|