我正在尝试使用10倍交叉验证来估计逻辑回归.
#import libraries
library(car); library(caret); library(e1071); library(verification)
#data import and preparation
data(Chile)
chile <- na.omit(Chile) #remove "na's"
chile <- chile[chile$vote == "Y" | chile$vote == "N" , ] #only "Y" and "N" required
chile$vote <- factor(chile$vote) #required to remove unwanted levels
chile$income <- factor(chile$income) # treat income as a factor
Run Code Online (Sandbox Code Playgroud)
目标是估计一个glm模型,该模型预测投票"Y"或"N"的结果取决于相关的解释变量,并且基于最终模型,计算混淆矩阵和ROC曲线以掌握不同阈值水平的模型行为.
型号选择导致:
res.chileIII <- glm(vote ~
sex +
education +
statusquo ,
family = binomial(),
data = chile)
#prediction
chile.pred <- predict.glm(res.chileIII, type = "response")
Run Code Online (Sandbox Code Playgroud)
产生:
> head(chile.pred)
1 2 …Run Code Online (Sandbox Code Playgroud) 我有一个由20个特征和大约300,000个观测值组成的数据集.我正在使用插入符号来训练带有doParallel和四个核心的模型.对于我尝试的方法(rf,nnet,adabag,svmPoly),即使对我的数据进行10%的训练也需要8个多小时.我正在重新采样3次,我的tuneLength是5.我能做些什么来加速这个令人痛苦的缓慢过程?有人建议使用底层库可以加快我的过程10倍,但在我走下去之前我想确保没有其他选择.
在64位Linux机器上使用R 3.2.0 with caret 6.0-41和randomForest 4.6-10.
当尝试使用公式对使用包中的函数训练predict()的randomForest对象使用该方法时,该函数返回错误.当通过训练和/或使用和而不是公式,这一切都顺利进行.train()caretrandomForest()x=y=
这是一个工作示例:
library(randomForest)
library(caret)
data(imports85)
imp85 <- imports85[, c("stroke", "price", "fuelType", "numOfDoors")]
imp85 <- imp85[complete.cases(imp85), ]
imp85[] <- lapply(imp85, function(x) if (is.factor(x)) x[,drop=TRUE] else x) ## Drop empty levels for factors.
modRf1 <- randomForest(numOfDoors~., data=imp85)
caretRf <- train( numOfDoors~., data=imp85, method = "rf" )
modRf2 <- caretRf$finalModel
modRf3 <- randomForest(x=imp85[,c("stroke", "price", "fuelType")], y=imp85[, "numOfDoors"])
caretRf <- train(x=imp85[,c("stroke", "price", "fuelType")], y=imp85[, "numOfDoors"], method = "rf")
modRf4 …Run Code Online (Sandbox Code Playgroud) 有没有办法caret用于生存分析.我真的很喜欢它的易用性.我尝试使用party包在插入符号列表中的随机生存林.
这有效:
library(survival)
library(caret)
library(party)
fitcforest <- cforest(Surv(futime, death) ~ sex+age, data=flchain,
controls = cforest_classical(ntree = 1000))
Run Code Online (Sandbox Code Playgroud)
但是使用caret我得到一个错误:
fitControl <- trainControl(## 10-fold CV
method = "repeatedcv",
number = 10,
repeats = 2,
)
cforestfit <- train(Surv(futime, death) ~ sex+age,data=flchain, method="cforest",trControl = fitControl)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Error: nrow(x) == length(y) is not TRUE
Run Code Online (Sandbox Code Playgroud)
有没有办法让这些Surv对象与插入符号一起工作?我可以使用其他以生存分析为导向的包装吗?
谢谢
我正在尝试运行一个弹性网.从LASSO开始,然后从那里开始.我可以让它直接运行但是当我尝试train在caret包中运行相同的参数时它会失败.我想开始train工作,以便我可以用它来评估模型参数.
# Works
test <- enet( x=x, y=y, lambda=0, trace=TRUE, normalize=FALSE, intercept=FALSE )
# Doesn't
enetGrid <- data.frame(.lambda=0,.fraction=c(.01,.001,.0005,.0001))
ctrl <- trainControl( method="repeatedcv", repeats=5 )
> test2 <- train( x, y, method="enet", tuneGrid=enetGrid, trControl=ctrl, preProc=NULL )
fraction lambda RMSE Rsquared RMSESD RsquaredSD
1 1e-04 0 NaN NaN NA NA
2 5e-04 0 NaN NaN NA NA
3 1e-03 0 NaN NaN NA NA
4 1e-02 0 NaN NaN NA NA
Error in train.default(x, y, method …Run Code Online (Sandbox Code Playgroud) 我有一个gam我知道可以正常使用的模型R,但是当我尝试train使用该caret包" "相同的模型时,它会返回一个错误,指出输入数据列是列表.有谁理解这个?
我正在运行的代码如下:
library("caret")
library("mgcv")
a <- gam(RW ~ s(Temp0.grd) + s(mld.grd) + s(mean_depth.grd) +
s(land_dist.grd) + s(slope.grd) + s(npp.grd),
data=mydata,
family=binomial)
all.data.gam.train <-
train(form=RW ~ s(Temp0.grd) + s(mld.grd) + s(mean_depth.grd) +
s(land_dist.grd) + s(slope.grd) + s(npp.grd),
data=mydata,
method='gam',
family=binomial
)
Run Code Online (Sandbox Code Playgroud)
第一个gam模型工作正常,但是train返回以下错误:
Error in model.frame.default(form = RW ~ s(Temp0.grd) + s(mld.grd) + s(mean_depth.grd) + :
invalid type (list) for variable 's(Temp0.grd)'
Run Code Online (Sandbox Code Playgroud)
直接在公式上运行model.frame.default也会产生这个错误,因此严格来说问题不在于火车.
mydata看起来如下:
> class(mydata)
[1] "data.frame"
> class(mydata$Temp0.grd)
[1] "numeric"
> …Run Code Online (Sandbox Code Playgroud) 在尝试适合gbm或rpart模型时,我曾多次遇到此错误.最后,我能够使用公开数据一致地重现它.我注意到使用CV(或重复的cv)时会发生此错误.当我不使用任何适合控制时,我不会收到此错误.有些人可以说清楚为什么我一直都会得到错误.
fitControl= trainControl("repeatedcv", repeats=5)
ds = read.csv("http://www.math.smith.edu/r/data/help.csv")
ds$sub = as.factor(ds$substance)
rpartFit1 <- train(homeless ~ female + i1 + sub + sexrisk + mcs + pcs,
tcControl=fitControl,
method = "rpart",
data=ds)
Run Code Online (Sandbox Code Playgroud) 我有一个数据框,其中包含一些我想用作训练集的虚拟变量glmnet.
因为我正在使用glmnet我想使用preProcess插入符train函数中的选项来居中和缩放功能.我不希望这种转换也应用于虚拟变量.
有没有办法阻止这些变量的转变?
我正在构建一个预测模型,并且正在使用该mice程序包来训练我的训练集中的NA.由于我需要为我的测试集重复使用相同的插补方案,如何将其重新应用于我的测试数据?
# generate example data
set.seed(333)
mydata <- data.frame(a = as.logical(rbinom(100, 1, 0.5)),
b = as.logical(rbinom(100, 1, 0.2)),
c = as.logical(rbinom(100, 1, 0.8)),
y = as.logical(rbinom(100, 1, 0.6)))
na_a <- as.logical(rbinom(100, 1, 0.3))
na_b <- as.logical(rbinom(100, 1, 0.3))
na_c <- as.logical(rbinom(100, 1, 0.3))
mydata$a[na_a] <- NA
mydata$b[na_b] <- NA
mydata$c[na_c] <- NA
# create train/test sets
library(caret)
inTrain <- createDataPartition(mydata$y, p = .8, list = FALSE)
train <- mydata[ inTrain, ]
test <- mydata[-inTrain, ]
# impute NAs …Run Code Online (Sandbox Code Playgroud) 你好我的findCorrelation()函数有问题,这是我的输入和输出:
findCorrelation(train, cutoff = .50, verbose = FALSE)
Run Code Online (Sandbox Code Playgroud)
findCorrelation_exact出错(x = x,cutoff = cutoff,verbose = verbose):相关矩阵不对称
有谁知道为什么会这样?