我正在使用R GBM软件包来增强对尺寸为10,000 X 932的一些生物数据进行回归,我想知道什么是GBM软件包的最佳参数设置(n.trees,shrinkage,interaction.depth和n. minobsinnode)当我在网上搜索时,我发现R上的CARET包可以找到这样的参数设置.但是,我在使用带有GBM包的Caret包时遇到了困难,所以我只想知道如何使用插入符找到前面提到的参数的最佳组合?我知道这似乎是一个非常典型的问题,但是我读了插入手册并且仍然难以将插入符号与gbm集成,特别是因为我对这两个包都很新
我想知道是否有一种方法可以根据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) 什么区别
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) 我正在参加Coursera实践机器学习课程,课程作业需要使用此数据集构建预测模型.将数据分成后training和testing数据集的基础上,感兴趣的结果(本文件标记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中的插入符包调整参数,但得到一个
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) 我有一个看起来像的训练集
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,Area并Day为因素,但我不知道我是否应该为Month和Night,只取整数值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) 我正在我的一个项目中使用插入功能"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) 我尝试在插入符号中使用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) 我收到一个奇怪的错误
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)
并且不明白为什么它会尝试在列数之外进行索引.
有什么建议?
我有以下简单的示例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 ×10
r-caret ×10
glmnet ×2
auc ×1
dataframe ×1
doparallel ×1
gbm ×1
optimization ×1
prediction ×1
roc ×1
rpart ×1
xgboost ×1