标签: r-caret

R caret和gbm无法找到ntrees输入

我正在尝试训练gbm使用caretR中的包.我最初得到以下错误,并认为这是由于缺少输入,所以我创建了gbmGrid但仍然得到相同的错误消息.

sub4Collect1 <- data.frame(testing$row_id)
> 
> cl <- makeCluster(10, type = "SOCK")
> registerDoSNOW(cl)
> ptm <- proc.time()
> 
> for(i in 2:7){
+ trainClass <- postPrior1[,i]
+ testClass <- postTest1[,i]
+ gbmGrid <- expand.grid(.interaction.depth = (1:5) * 2, .n.trees = (1:5)*50, .shrinkage = .1)
+ bootControl <- trainControl(number = 1)
+ set.seed(2)
+ gbmFit <- train(prePrior1[,-c(2,60,61,161)], trainClass, method = "gbm", tuneLength = 5,
+ trControl = bootControl
+ ##, scaled = FALSE
+ …
Run Code Online (Sandbox Code Playgroud)

r r-caret

5
推荐指数
1
解决办法
4749
查看次数

支持向量机火车插入符错误kernlab类概率计算失败; 返回NAs

我有一些数据,Y变量是一个因素 - 好或坏.我正在使用'caret'包中的'train'方法构建一个支持向量机.使用'train'功能,我能够最终确定各种调整参数的值,并获得最终的支持向量机.对于测试数据,我可以预测"类".但是当我试图预测测试数据的概率时,我得到的误差低于(例如我的模型告诉我测试数据中的第一个数据点y ='good',但我想知道获得'好'的概率是多少...通常在支持向量机的情况下,模型将计算预测的概率.如果Y变量有2个结果,则模型将预测每个结果的概率.具有最大概率的结果被认为是最终解决方案)

**Warning message:  
In probFunction(method, modelFit, ppUnk) :  
  kernlab class probability calculations failed; returning NAs**
Run Code Online (Sandbox Code Playgroud)

示例代码如下

library(caret)
trainset <- data.frame( 
     class=factor(c("Good",    "Bad",   "Good", "Good", "Bad",  "Good", "Good", "Good", "Good", "Bad",  "Bad",  "Bad")),
     age=c(67,  22, 49, 45, 53, 35, 53, 35, 61, 28, 25, 24))

testset <- data.frame( 
     class=factor(c("Good",    "Bad",   "Good"  )),
    age=c(64,   23, 50))



library(kernlab)
set.seed(231)

### finding optimal value of a tuning parameter
sigDist <- sigest(class ~ ., data = trainset, frac = 1)
### creating …
Run Code Online (Sandbox Code Playgroud)

testing r r-caret

5
推荐指数
1
解决办法
1万
查看次数

如何在CARET中定制模型以执行PLS- [Classifer]两步分类模型?

这个问题是这里相同主题的延续.以下是本书的最小工作示例:

Wehrens R. Chemometrics在自然科学和生命科学领域进行R多元数据分析.第1版.海德堡; 纽约:施普林格.2011.(第250页).

这个例子取自本书及其包ChemometricsWithR.它强调了使用交叉验证技术进行建模时的一些缺陷.

目标:
一种交叉验证的方法,使用相同的重复CV集来执行已知的策略,PLS通常由LDA逻辑回归,SVM,C5.0,CART或caret包的精神进行.因此,每次调用等待分类器之前都需要PLS,以便对PLS 得分空间进行分类而不是对观察本身进行分类.PCA在使用任何分类器建模之前,插入符号包中最近的方法是作为预处理步骤.下面是一个PLS-LDA程序,只有一个交叉验证来测试分类器的性能,没有10倍的CV或任何重复.下面的代码取自上面提到的书,但有一些更正否则会引发错误:

library(ChemometricsWithR)
data(prostate)
prostate.clmat <- classvec2classmat(prostate.type) # convert Y to a dummy var

odd <- seq(1, length(prostate.type), by = 2) # training
even <- seq(2, length(prostate.type), by = 2) # holdout test

prostate.pls <- plsr(prostate.clmat ~ prostate, ncomp = 16, validation = "CV", subset=odd)

Xtst <- scale(prostate[even,], center = colMeans(prostate[odd,]), scale = apply(prostate[odd,],2,sd))

tst.scores <- Xtst %*% prostate.pls$projection # …
Run Code Online (Sandbox Code Playgroud)

r classification cross-validation r-caret

5
推荐指数
1
解决办法
5210
查看次数

使用并行时的包caret-Print迭代

无论如何,当caret::train并行使用该函数时,我们是否可以打印迭代?我知道有一个称为“详细”的选项,但是如果使用多核,它似乎什么也不会打印。

r r-caret

5
推荐指数
1
解决办法
1267
查看次数

插入符号的辅助功能:caretSBF和caretFuncts

caret通过caretSBFcaretFuncs提供嵌套特征选择的功能.

caretSBF:用于筛选选择

lmSBF
rfSBF
treebagSBF
ldaSBF
nbSBF
Run Code Online (Sandbox Code Playgroud)

caretFuncs:用于递归特征选择 - (我假设只是出于历史原因,caretFuncs不被称为caretRFE?)

lmFuncs
rfFuncs
treebagFuncs
ldaFuncs
nbFuncs
gamFuncs
lrFuncs
Run Code Online (Sandbox Code Playgroud)

为什么这个辅助函数列表比插入符号的完整模型列表更有限?例如,没有为glmnet的弹性网方法,kernlab的svm方法等定制的特征选择方法.

是因为:

  • 这些其他模型与通用案例函数(即caretSBF和caretFuncs)一起工作正常吗? - 虽然我遇到麻烦试图让glmnet与caretSBF一起工作......
  • 这些其他型号在功能选择方面不需要"额外帮助"? - 我想像弹性网这样的方法被认为可以很好地进行特征选择,但是像SVM这样的其他方法当然不会......
  • 包维护者还没有为其他方法编写专用函数? - 在哪种情况下,社区可以/应该提供这些辅助功能吗?

感谢阅读并感谢插入点包维护者的出色工作.

r r-caret

5
推荐指数
1
解决办法
1353
查看次数

R插入包(rpart):构建分类树

我正在努力使用插入符号包来执行分类树几天.问题是我的因素变量.我生成了树,但是当我尝试使用最佳模型对测试样本进行预测时,它失败了,因为列车函数为我的因子变量创建了虚拟对象,然后预测函数无法在测试集中找到这些新创建的虚拟对象.我该如何处理这个问题?

我的代码如下:

install.packages("caret", dependencies = c("Depends", "Suggests"))      
library(caret)                                      
db=data.frame(read.csv ("db.csv", head=TRUE, sep=";", na.strings ="?"))     
fix(db)
db$defaillance=factor(db$defaillance)
db$def=ifelse(db$defaillance==0,"No","Yes") 
db$def=factor(db$def)
db$defaillance=NULL
db$canal=factor(db$canal)
db$sect_isodev=factor(db$sect_isodev)
db$sect_risq=factor(db$sect_risq)       

#delete zero variance predictors                                
nzv <- nearZeroVar(db[,-78])
db_new <- db[,-nzv]

inTrain <- createDataPartition(y = db_new$def, p = .75, list = FALSE)                               
training <- db_new[inTrain,]
testing <- db_new[-inTrain,]
str(training)
str(testing)
dim(training)
dim(testing)
Run Code Online (Sandbox Code Playgroud)

用于训练/测试的str()函数示例如下:

 $ FDR        : num  1305 211 162 131 143 ...
 $ FCYC       : num  0.269 0.18 0.154 0.119 0.139 ...
 $ BFDR       : num  803 164 …
Run Code Online (Sandbox Code Playgroud)

r rpart r-caret

5
推荐指数
2
解决办法
2万
查看次数

使用caret和data.table创建数据分区

我在R中有一个data.table,我想用插入包

set.seed(42)
trainingRows<-createDataPartition(DT$variable, p=0.75, list=FALSE)
head(trainingRows) # view the samples of row numbers
Run Code Online (Sandbox Code Playgroud)

但是,我无法使用data.table选择行.相反,我必须转换为data.frame

DT_df <-as.data.frame(DT)
DT_train<-DT_df[trainingRows,]
dim(DT_train)
Run Code Online (Sandbox Code Playgroud)

data.table替代方案

DT_train <- DT[.(trainingRows),] requires the keys to be set.
Run Code Online (Sandbox Code Playgroud)

除了转换为data.frame之外还有更好的选择吗?

r data.table r-caret

5
推荐指数
2
解决办法
3406
查看次数

在火车上使用您自己的模型(插入符号)?

我试图使用Caret附带的包装中未包含的火车,但收到一个我无法弄清楚的错误,知道吗?我使用以下链接开始

bmsMeth<-list(type="Regression",library="BMS",loop=NULL,prob=NULL) 
prm<-data.frame(parameter="mprior.size",class="numeric",label="mprior.size")
bmsMeth$parameters<-prm
bmsGrid<-function(x,y,len=NULL){
out<-expand.grid(mprior.size=seq(2,3,by=len))
out
}
bmsMeth$grid<-bmsGrid
bmsFit<-function(x,y,param, lev=NULL) {bms(cbind(y,x),burn=5000,iter=100000,nmodel=1000,mcmc="bd",g="UIP",mprior.size=param$mprior.size)}
bmsMeth$fit<-bmsFit
bmsPred<-function(modelFit,newdata,preProcess=NULL,submodels=NULL){predict(modelFit,newdata)}
bmsMeth$predict<-bmsPred

library(caret)
data.train<-data.frame(runif(100),runif(100),runif(100),runif(100),runif(100))#synthetic data for testing
bms(cbind(data.train[,1],data.train[,-1]),burn=5000,iter=100000,nmodel=1000,mcmc="bd",g="UIP",mprior.size=2)#function out of caret is working

preProcess=c('center','scale')
myTimeControl <- trainControl(method = "timeslice",initialWindow = 0.99*nrow(data.train), horizon = 1, fixedWindow = FALSE)
tune <- train(data.train[,-1],data.train[,1],preProcess=preProcess,method = bmsMeth,tuneLength=2,metric= "RMSE",trControl =myTimeControl,type="Regression")
Run Code Online (Sandbox Code Playgroud)

错误我得到:

train.default(data.train [,-1],data.train [,1],preProcess = preProcess,中的错误:正在停止:警告消息:1:在eval(expr,envir,enclos)中:模型拟合失败对于Training1:mprior.size = 2方法中的错误$ fit(x = x,y = y,wts = wts,param = tuneValue,lev = obsLevels,:未使用的参数(wts = wts,last = last,classProbs = classProbs,类型=“回归”)

2:在nominalTrainWorkflow(x = x,y = y,wts =权重,info …

r r-caret

5
推荐指数
1
解决办法
879
查看次数

提取插入符号中glmnet模型的最佳调整参数的系数

我正在使用插入符号运行弹性净正则化glmnet

我将值序列传递给trainControlalpha和lambda,然后执行repeatedcv以获得alpha和lambda的最佳调整。

这是一个示例,其中alpha和lambda的最佳调整分别为0.7和0.5:

age     <- c(4, 8, 7, 12, 6, 9, 10, 14, 7, 6, 8, 11, 11, 6, 2, 10, 14, 7, 12, 6, 9, 10, 14, 7) 
gender  <-  make.names(as.factor(c(1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1)))
bmi_p   <- c(0.86, 0.45, 0.99, 0.84, 0.85, 0.67, 0.91, 0.29, 0.88, 0.83, 0.48, 0.99, 0.80, 0.85,
         0.50, 0.91, 0.29, …
Run Code Online (Sandbox Code Playgroud)

r machine-learning glmnet r-caret

5
推荐指数
1
解决办法
2594
查看次数

使用配方和插入符号preProcess进行预处理的差异

recipes作为机器学习管道的一部分,我一直在探索变量转换的新包.我选择了这种方法 - 由于所有新的扩展而从使用caretpreProcess功能升级.但我发现这些包为转换后的数据提供了截然不同的结果:

library(caret) # V6.0-79
library(recipes) # V0.1.2
library(MASS) # V7.3-47
# transform variables using recipes
rec_box <- recipe(~ ., data = as.data.frame(state.x77)) %>% 
  step_BoxCox(., everything()) %>% 
  prep(., training = as.data.frame(state.x77)) %>% 
  bake(., as.data.frame(state.x77)) 

> head(rec_box)
# A tibble: 6 x 8
  Population Income Illiteracy `Life Exp` Murder `HS Grad` Frost  Area
       <dbl>  <dbl>      <dbl>      <dbl>  <dbl>     <dbl> <dbl> <dbl>
1       8.19   138.     0.647   60171653.   6.89      651.   20.  56.0
2       5.90   185.     0.376   61218586. …
Run Code Online (Sandbox Code Playgroud)

r machine-learning r-caret r-recipes

5
推荐指数
1
解决办法
394
查看次数