标签: r-caret

使用插入包来找到GBM的最佳参数

我正在使用R GBM软件包来增强对尺寸为10,000 X 932的一些生物数据进行回归,我想知道什么是GBM软件包的最佳参数设置(n.trees,shrinkage,interaction.depth和n. minobsinnode)当我在网上搜索时,我发现R上的CARET包可以找到这样的参数设置.但是,我在使用带有GBM包的Caret包时遇到了困难,所以我只想知道如何使用插入符找到前面提到的参数的最佳组合?我知道这似乎是一个非常典型的问题,但是我读了插入手册并且仍然难以将插入符号与gbm集成,特别是因为我对这两个包都很新

optimization r gbm r-caret

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

从R中的交叉验证(训练)数据绘制ROC曲线

我想知道是否有一种方法可以根据caret包装生成的SVM-RFE模型的交叉验证数据绘制平均ROC曲线.

我的结果是:

Recursive feature selection

Outer resampling method: Cross-Validated (10 fold, repeated 5 times) 

Resampling performance over subset size:

 Variables    ROC   Sens   Spec Accuracy  Kappa  ROCSD SensSD SpecSD AccuracySD KappaSD Selected
         1 0.6911 0.0000 1.0000   0.5900 0.0000 0.2186 0.0000 0.0000     0.0303  0.0000         
         2 0.7600 0.3700 0.8067   0.6280 0.1807 0.1883 0.3182 0.2139     0.1464  0.3295         
         3 0.7267 0.4233 0.8667   0.6873 0.3012 0.2020 0.3216 0.1905     0.1516  0.3447         
         4 0.6989 0.3867 0.8600   0.6680 0.2551 0.2130 0.3184 0.1793     0.1458  0.3336         
         5 0.7000 0.3367 …
Run Code Online (Sandbox Code Playgroud)

r roc auc r-caret

9
推荐指数
1
解决办法
7587
查看次数

使用插入符号在R中进行分类的预测(模型)和预测(模型$ finalModel)之间的差异

什么区别

predict(rf, newdata=testSet)
Run Code Online (Sandbox Code Playgroud)

predict(rf$finalModel, newdata=testSet) 
Run Code Online (Sandbox Code Playgroud)

我训练模型 preProcess=c("center", "scale")

tc <- trainControl("repeatedcv", number=10, repeats=10, classProbs=TRUE, savePred=T)
rf <- train(y~., data=trainingSet, method="rf", trControl=tc, preProc=c("center", "scale"))
Run Code Online (Sandbox Code Playgroud)

当我在一个居中和缩放的testSet上运行它时,我会收到0个正数

testSetCS <- testSet
xTrans <- preProcess(testSetCS)
testSetCS<- predict(xTrans, testSet)
testSet$Prediction <- predict(rf, newdata=testSet)
testSetCS$Prediction <- predict(rf, newdata=testSetCS)
Run Code Online (Sandbox Code Playgroud)

但是当我在一个未缩放的testSet上运行它时会收到一些真正的积极因素.我必须使用rf $ finalModel在居中和缩放的testSet和未缩放的rf对象上接收一些真正的postive ...我缺少什么?


编辑

测试:

tc <- trainControl("repeatedcv", number=10, repeats=10, classProbs=TRUE, savePred=T)
RF <-  train(Y~., data= trainingSet, method="rf", trControl=tc) #normal trainingData
RF.CS <- train(Y~., data= trainingSet, method="rf", trControl=tc, preProc=c("center", "scale")) #scaled and centered trainingData
Run Code Online (Sandbox Code Playgroud)

在正常的testSet上:

RF predicts …
Run Code Online (Sandbox Code Playgroud)

r classification prediction r-caret

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

为什么使用caret :: train(...,method ="rpart")的结果与rpart :: rpart(...)不同?

我正在参加Coursera实践机器学习课程,课程作业需要使用此数据集构建预测模型.将数据分成后trainingtesting数据集的基础上,感兴趣的结果(本文件标记y,但实际上是在classe数据集中的变量):

inTrain <- createDataPartition(y = data$y, p = 0.75, list = F) 
training <- data[inTrain, ] 
testing <- data[-inTrain, ] 
Run Code Online (Sandbox Code Playgroud)

我尝试了两种不同的方法:

modFit <- caret::train(y ~ ., method = "rpart", data = training)
pred <- predict(modFit, newdata = testing)
confusionMatrix(pred, testing$y)
Run Code Online (Sandbox Code Playgroud)

modFit <- rpart::rpart(y ~ ., data = training)
pred <- predict(modFit, newdata = testing, type = "class")
confusionMatrix(pred, testing$y)
Run Code Online (Sandbox Code Playgroud)

我假设它们会给出相同或非常相似的结果,因为初始方法加载'rpart'包(建议我使用此包用于该方法).但是,时间(caret慢得多)和结果是非常不同的:

Method 1 (caret):

Confusion Matrix and …
Run Code Online (Sandbox Code Playgroud)

r rpart r-caret

8
推荐指数
1
解决办法
2048
查看次数

调整XGboost参数在R中

我正在尝试使用R中的插入符包调整参数,但得到一个

Error in train.default(x = as.matrix(df_train %>% select(-c(Response,  : 
  The tuning parameter grid should have columns nrounds, lambda, alpha 
Run Code Online (Sandbox Code Playgroud)

每当我尝试训练模型时,即使列nrounds,lambda和alpha都存在.

library(caret)
library(xgboost)
library(readr)
library(dplyr)
library(tidyr)

 xgb_grid_1 <- expand.grid(
  nrounds= 2400,
  eta=c(0.01,0.001,0.0001),
  lambda = 1,
  alpha =0
)

xgb_trcontrol <- trainControl(
  method="cv",
  number = 5,
  verboseIter = TRUE,
  returnData=FALSE,
  returnResamp = "all",
  allowParallel = TRUE,

)

xgb_train_1 <- train(
  x = as.matrix(df_train %>% select(-c(Response, Id))),
  y= df_train$Response,
 trControl = xgb_trcontrol,
 tuneGrid = xgb_grid_1,
 method="xgbLinear"
)
Run Code Online (Sandbox Code Playgroud)

r r-caret xgboost

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

错误:在Caret中使用Train时,nrow(x)== n不为TRUE

我有一个看起来像的训练集

Name       Day         Area         X    Y    Month Night
ATTACK    Monday   LA           -122.41 37.78   8      0
VEHICLE  Saturday  CHICAGO      -1.67    3.15   2      0
MOUSE     Monday   TAIPEI       -12.5    3.1    9      1
Run Code Online (Sandbox Code Playgroud)

Name是结果/因变量.我转换Name,AreaDay为因素,但我不知道我是否应该为MonthNight,只取整数值1-12和0-1分别.

然后我将数据转换为矩阵

ynn <- model.matrix(~Name , data = trainDF)
mnn <- model.matrix(~ Day+Area +X + Y + Month + Night, data = trainDF)
Run Code Online (Sandbox Code Playgroud)

然后我设置调整参数

nnTrControl=trainControl(method = "repeatedcv",number = 3,repeats=5,verboseIter = TRUE, returnData = FALSE, returnResamp = "all", classProbs = TRUE, …
Run Code Online (Sandbox Code Playgroud)

r neural-network dataframe r-caret

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

Caret包定制公制

我正在我的一个项目中使用插入功能"train()",我想添加一个"自定义指标"F1分数.我看了这个url 插入包 但我无法理解如何用可用参数构建这个乐谱.

有一个自定义指标的示例如下:

## Example with a custom metric
madSummary <- function (data,
lev = NULL,
model = NULL) {
out <- mad(data$obs - data$pred,
na.rm = TRUE)
names(out) <- "MAD"
out
}
robustControl <- trainControl(summaryFunction = madSummary)
marsGrid <- expand.grid(degree = 1, nprune = (1:10) * 2)
earthFit <- train(medv ~ .,
data = BostonHousing,
method = "earth",
tuneGrid = marsGrid,
metric = "MAD",
maximize = FALSE,
trControl = robustControl)
Run Code Online (Sandbox Code Playgroud)

更新:

我尝试了你的代码,但问题是它不适用于多个类,如下面的代码(显示F1分数,但它很奇怪)我不确定,但我认为函数F1_score仅适用于二进制类

library(caret)
library(MLmetrics)

set.seed(346)
dat <- iris …
Run Code Online (Sandbox Code Playgroud)

r r-caret

8
推荐指数
1
解决办法
8127
查看次数

glmnet中的自动插入符号参数调整失败

上下文和错误消息

我尝试在插入符号中使用glmnet来拟合两类预测模型.使用插入符默认调整网格时出现错误.我不认为这是由于格式错误的数据,因为,当指定我自己的调整网格时,没有问题.错误消息是:

Error in loop$lambda[loop$alpha == alph[i]] <- np[which.max(np)] : 
replacement has length zero
Run Code Online (Sandbox Code Playgroud)

当检查发生错误的行时,可以看到R试图在NA which.na()的向量np上找到最大值(由caret/glmnet选择的lambda值?).我没有正确调试这个,因为我无法找到一种方法来调用后逐步执行每行代码train().我希望有经验的人可以帮助我.

最小的工作示例

我创建了一个最小的工作示例,使我的数据集尽可能小(它以约200行和~40列开始),同时保留错误.请注意,manualModelFit工作正常,但modelFit无法计算:

library(caret)
library(glmnet)
# create data frame of features
var1 <- c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1)
var2 <- c(1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1)
trainData <- data.frame(v1 = var1, v2 = var2)
# create fature vector of outcomes
trainClass <- as.factor(c('event','event','event','event','event','event','event','event','event','event','nonEvent','event','event','event','event','event','nonEvent'))
# set k for k-fold CV
kInner = 5
# set randomization seed
mySeed = 1622017
# set options for caret in …
Run Code Online (Sandbox Code Playgroud)

r glmnet r-caret

8
推荐指数
1
解决办法
1759
查看次数

使用插入符号训练套索模型时不可用的列

我收到一个奇怪的错误

Error in `[.data.frame`(data, , lvls[1]) : undefined columns selected
Run Code Online (Sandbox Code Playgroud)

当我使用插入符号训练glmnet模型时的消息.我对序数模型使用了基本相同的代码和相同的预测器(y然后只是使用不同的因子)并且它工作正常.它耗费了400个核心小时来计算,所以我不能在这里展示它.

#Source a small subset of data
source("https://gist.githubusercontent.com/FredrikKarlssonSpeech/ebd9fccf1de6789a3f529cafc496a90c/raw/efc130e41c7d01d972d1c69e59bf8f5f5fea58fa/voice.R")
trainIndex <- createDataPartition(notna$RC, p = .75, 
                                  list = FALSE, 
                                  times = 1)


training <- notna[ trainIndex[,1],] %>%
  select(RC,FCoM_envel:ATrPS_freq,`Jitter->F0_abs_dif`:RPDE)
testing  <- notna[-trainIndex[,1],] %>%
  select(RC,FCoM_envel:ATrPS_freq,`Jitter->F0_abs_dif`:RPDE)

fitControl <- trainControl(## 10-fold CV
  method = "CV",
  number = 10,
  allowParallel=TRUE,
  savePredictions="final",
  summaryFunction=twoClassSummary)

vtCVFit <- train(x=training[-1],y=training[,"RC"], 
                  method = "glmnet", 
                  trControl = fitControl,
                  preProcess=c("center", "scale"),
                  metric="Kappa"
)
Run Code Online (Sandbox Code Playgroud)

我无法找到任何明显错误的数据.没有NAs

table(is.na(training))

FALSE 
43166
Run Code Online (Sandbox Code Playgroud)

并且不明白为什么它会尝试在列数之外进行索引.

有什么建议?

r training-data glmnet r-caret

8
推荐指数
1
解决办法
162
查看次数

Rmarkdown中的插入符doparallel:使用render()时缺少详细信息

我有以下简单的示例Rmarkdown文档(test.Rmd):

---
title: "Test Knit Caret Paralell VerboseIter"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)

require(caret)
require(doParallel)


```

## data

```{r data}

set.seed(998)
training <- twoClassSim()

```

## model

```{r fitmodel}
fitControl <- trainControl(
  method = "repeatedcv",
  number = 3,
  repeats = 2,
  verboseIter = T)


ncores <- detectCores()-1

cl <<- makePSOCKcluster(ncores, verbose = TRUE, outfile = "")
registerDoParallel(cl)

set.seed(825)
Fit <- train(Class ~ ., 
             data = training, 
             method = "nnet", 
             trControl = fitControl,
             trace = …
Run Code Online (Sandbox Code Playgroud)

r r-caret doparallel

8
推荐指数
1
解决办法
173
查看次数