我正在使用带有自定义拟合指标的插入符号,但我不仅需要最大化该指标,还需要最大化其置信区间的下限。所以我想最大化类似的东西mean(metric) - k * stddev(metric)。我知道如何手动执行此操作,但是有没有办法告诉插入符号使用此函数自动选择最佳参数?
我真的很喜欢使用插入符号至少在建模的早期阶段,特别是因为它非常容易使用重采样方法.然而,我正在开发一个模型,其中训练集通过半监督自我训练添加了相当数量的案例,并且我的交叉验证结果因此而真正偏离.我对此的解决方案是使用验证集来测量模型性能,但我看不到直接在插入符中使用验证集的方法 - 我是否遗漏了某些东西或者这只是不支持?我知道我可以编写自己的包装器去做插入符号通常用于m的插件,但是如果有一个解决方法而不必这样做会非常好.
以下是我遇到的一个简单例子:
> library(caret)
> set.seed(1)
>
> #training/validation sets
> i <- sample(150,50)
> train <- iris[-i,]
> valid <- iris[i,]
>
> #make my model
> tc <- trainControl(method="cv")
> model.rf <- train(Species ~ ., data=train,method="rf",trControl=tc)
>
> #model parameters are selected using CV results...
> model.rf
100 samples
4 predictors
3 classes: 'setosa', 'versicolor', 'virginica'
No pre-processing
Resampling: Cross-Validation (10 fold)
Summary of sample sizes: 90, 90, 90, 89, 90, 92, ...
Resampling results across …Run Code Online (Sandbox Code Playgroud) 我想使用AUC作为性能指标,但RFE仅支持RMSE,RSquared,Accuracy,Kappa.如何使用auc等自定义指标?
所以我读过一篇论文,该论文使用神经网络来模拟一个与我目前使用的数据集相似的数据集。我有 160 个描述符变量,我想为 160 个案例建模(回归建模)。我阅读的论文使用了以下参数:-
'对于每个分割,都为 10 个单独的训练测试折叠中的每一个开发了一个模型。使用具有 33 个输入神经元和 16 个隐藏神经元的三层反向传播网络,在线权重更新、0.25 学习率和 0.9 动量。对于每个折叠,从总共 50 个不同的随机初始权重起点进行学习,并且允许网络迭代学习时期,直到验证集的平均绝对误差 (MAE) 达到最小值。'
现在他们使用了一个叫做 Emergent 的专业软件来做到这一点,这是一个非常专业的神经元网络模型软件。但是,因为我之前在 R 中做过以前的模型,所以我必须坚持下去。所以我使用 caret train 函数来进行 10 次交叉验证,使用神经网络包进行 10 次。我做了以下事情:-
cadets.nn <- train(RT..seconds.~., data = cadet, method = "neuralnet", algorithm = 'backprop', learningrate = 0.25, hidden = 3, trControl = ctrl, linout = TRUE)
Run Code Online (Sandbox Code Playgroud)
我这样做是为了尝试尽可能接近论文中使用的参数来调整参数,但是我收到以下错误消息:-
layer1 layer2 layer3 RMSE Rsquared RMSESD RsquaredSD
1 1 0 0 NaN NaN NA NA
2 3 0 0 NaN NaN NA NA
3 …Run Code Online (Sandbox Code Playgroud) 我想在大型数据集上运行随机森林:100k*400.当我使用随机森林时需要花费很多时间.我可以使用插入包中的parRF方法来减少运行时间吗?什么是正确的语法?这是一个示例数据帧:
dat <- read.table(text = " TargetVar Var1 Var2 Var3
0 0 0 7
0 0 1 1
0 1 0 3
0 1 1 7
1 0 0 5
1 0 1 1
1 1 0 0
1 1 1 6
0 0 0 8
0 0 1 5
1 1 1 4
0 0 1 2
1 0 0 9
1 1 1 2 ", header = TRUE)
Run Code Online (Sandbox Code Playgroud)
我试过了:
library('caret')
m<-randomForest(TargetVar ~ Var1 + Var2 + Var3, data …Run Code Online (Sandbox Code Playgroud) > cv.ctrl <- trainControl(method = "repeatedcv", repeats = 3,
+ summaryFunction = twoClassSummary,
+ classProbs = TRUE)
>
> set.seed(35)
> glm.tune.1 <- train(y ~ bool_3,
+ data = train.batch,
+ method = "glm",
+ metric = "ROC",
+ trControl = cv.ctrl)
Error in evalSummaryFunction(y, trControl, classLevels, metric, method) :
train()'s use of ROC codes requires class probabilities. See the classProbs option of trainControl()
In addition: Warning message:
In train.default(x, y, weights = w, ...) :
cannnot compute class probabilities …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取一个数据集并将其划分为3个部分:训练:60%,测试:20%,验证:20%。
part1 <- createDataPartition(fullDataSet$classe, p=0.8, list=FALSE)
validation <- fullDataSet[-part1,]
workingSet <- fullDataSet[part1,]
Run Code Online (Sandbox Code Playgroud)
当我做同样的事情再次分区时:
inTrain <- createDataPartition(workingSet$classe, p=.75, list=FALSE)
Run Code Online (Sandbox Code Playgroud)
我得到错误:
Error in sort.list(y) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?
Run Code Online (Sandbox Code Playgroud)
有没有一种方法要么a)创建3个不同大小的分区,要么b)像我尝试做的那样嵌套一个分区?我考虑过c)使用sample()代替,但这是针对讲师仅使用createDataPartition的类,并且我们必须显示代码。有人在这里有什么建议吗?
我想用插入符号交叉验证GAM模型.我的GAM模型有一个二元结果变量,纬度和经度坐标对的各向同性平滑,然后是线性预测变量.使用mgcv时的典型语法是:
gam1 <- gam( y ~ s(lat , long) + x1 + x2, family = binomial(logit) )
Run Code Online (Sandbox Code Playgroud)
我不太确定如何使用插入符号中的train函数指定此模型.这或多或少是我的语法:
cv <- train(y ~ lat + long + x1 + x2,
data = data,
method = "gam",
family = "binomial",
trControl = trainControl(method = "LOOCV", number=1, repeats=),
tuneGrid = data.frame(method = "GCV.Cp", select = FALSE))
Run Code Online (Sandbox Code Playgroud)
问题是我只想平滑lat和long,并且x1和x2被视为线性.
谢谢!
我正在尝试重复以下代码行:
x.mat <- as.matrix(train.df[,predictors])
y.class <- train.df$Response
cv.lasso.fit <- cv.glmnet(x = x.mat, y = y.class,
family = "binomial", alpha = 1, nfolds = 10)
Run Code Online (Sandbox Code Playgroud)
...使用插入符号包,但无效:
trainControl <- trainControl(method = "cv",
number = 10,
# Compute Recall, Precision, F-Measure
summaryFunction = prSummary,
# prSummary needs calculated class probs
classProbs = T)
modelFit <- train(Response ~ . -Id, data = train.df,
method = "glmnet",
trControl = trainControl,
metric = "F", # Optimize by F-measure
alpha=1,
family="binomial")
Run Code Online (Sandbox Code Playgroud)
无法识别参数“ alpha”,并且“模型拟合每次折叠都会失败”。
我究竟做错了什么?帮助将不胜感激。谢谢。
我正在使用R的插入符号包,并且在训练函数(训练)中我使用了allowParallel参数,它可以工作.但是,它使用了所有核心,并且由于培训在我的本地PC上运行,我宁愿为自己留下一个核心,以便能够在训练模型时工作.有没有办法做到这一点?
根据我的收集,似乎不同的模型类型可能使用不同的并行化包.我在windows上工作,所以我猜它不是在使用doMC(我知道如何设置内核的数量......)