我最近开始研究我正在开发的模型的插入符号包。我正在使用最新版本。作为第一步,我决定将其用于特征选择。我使用的数据有大约 760 个特征和 10k 个观察值。我根据网上的培训资料创建了一个简单的函数。不幸的是,我一直遇到错误,因此该过程永远不会完成。这是产生错误的代码。在这个例子中,我使用了一小部分功能。我从全套功能开始。我还更改了子集、折叠次数和重复次数,但无济于事。我知道如果没有数据,很难追查问题。我已经共享了一小部分数据(以下面使用的 r 对象格式)。如果您无法从那里获取文件,请尝试此链接。
它总是产生这个错误:
{ 中的错误:任务 1 失败 - “替换长度为零”
caretFeatureSelection <- function() {
library(caret)
library(mlbench)
library(Hmisc)
set.seed(10)
lr.features = c("f2", f271","f527","f528","f404", "f376", "f67", "f670", "f281", "f333", "f13", "f282", "f599",
"f597", "f68", "f629", "f378", "f230", "f229", "f273", "f768", "f406", "f630",
"f596", "f598", "f413", "f412", "f332", "f377", "f766", "f767", "f775", "f10", "f442")
trainDF <- readRDS(file='trainDF.rds')
trainDF <- trainDF[trainDF$loss>0,]
trainDF$lossProb <- trainDF$loss/100
y <- trainDF[,'lossProb']
x <- trainDF[,names(trainDF) %in% lr.features]
rm(trainDF)
subsets <- c(1:5, …Run Code Online (Sandbox Code Playgroud) I am attempting to build a model to predict whether a product will get sold on an ecommerce website with 1 or 0 being the output.
My data is a handful of categorical variables, one with a large amount of levels, a couple binary, and one continuous (the price), with an output variable of 1 or 0, whether or not the product listing got sold.
This is my code:
inTrainingset<-createDataPartition(C$Sale, p=.75, list=FALSE)
CTrain<-C[inTrainingset,]
CTest<-C[-inTrainingset,]
gbmfit<-gbm(Sale~., data=C,distribution="bernoulli",n.trees=5,interaction.depth=7,shrinkage= .01,)
plot(gbmfit)
gbmTune<-train(Sale~.,data=CTrain, method="gbm") …Run Code Online (Sandbox Code Playgroud) 我使用插入符来通过重新采样来训练模型并调整学习参数,并且我可以询问每个测试的概率,这很棒。但我也热衷于保留模型对象并在以后使用它们而无需重新训练 - 这可能吗?基本上,我想要的不仅仅是 mdl$finalModel 对象,而是每次调整迭代的模型对象。
我想在 R 中对线性回归模型执行 k 折交叉验证并测试一个标准误差规则:
https://stats.stackexchange.com/questions/17904/one-standard-error-rule-for-variable-selection
因此,我需要一个函数,它可以返回预测误差的交叉验证估计和该估计的标准误差(或者至少是每次折叠的 MSE,以便我可以自己计算标准误差)。许多包都有计算交叉验证误差的函数(例如,cv.glm在boost包中),但通常它们仅返回预测误差的 CV 估计,而不返回其标准误差或每次折叠的 MSE。
我尝试使用 package DAAG,它的函数CVlm应该提供比cv.glm. 但是,我似乎无法让它发挥作用!这是我的代码:
a=c(0.0056, 0.0088, 0.0148, 0.0247, 0.0392, 0.0556, 0.0632, 0.0686, 0.0786, 0.0855, 0.0937)
b=c(6.0813, 9.5011, 15.5194, 23.9409, 32.8492, 40.8399, 43.8760, 45.5270, 46.7668, 46.1587, 43.4524)
dataset=data.frame(x=a,y=b)
CV.list=CVlm(df=dataset,form.lm = formula(y ~ poly(x,2)), m=5)
Run Code Online (Sandbox Code Playgroud)
我得到了几乎没有信息的错误
Error in xy.coords(x, y, xlabel, ylabel, log) :
'x' and 'y' lengths differ
Run Code Online (Sandbox Code Playgroud)
这对我来说没有多大意义。x和y的长度相同 (11),因此很明显该函数正在抱怨它内部创建的其他一些x变量y。
我很乐意接受其他软件包的解决方案(例如 …
我无法开始parRF工作,即使其他事情如parApply工作正常。
我已经尝试makeCluster过以及类似makePSOCKcluster的一些变体。
它不断返回错误 task 1 failed - could not find function getDoParWorkers
cores_2_use <- detectCores() - 2
cl <- makeCluster(cores_2_use, useXDR = F)
clusterSetRNGStream(cl, 9956)
registerDoParallel(cl, cores_2_use)
rf_train <- train(y=y, x=x,
method='parRF', tuneGrid = data.frame(mtry = ncol(x)), na.action = na.omit,
trControl=trainControl(method='oob',number=10, allowParallel = TRUE)
)
Error in { : task 1 failed - "could not find function "getDoParWorkers""
Run Code Online (Sandbox Code Playgroud) 我有点困惑插入符号如何在 k 折交叉验证中对测试折叠进行评分。
我想生成一个数据框或矩阵,其中包含 10 折交叉验证中十个测试数据集的评分记录。
例如,使用 iris 数据集训练决策树模型:
install.packages("caret", dependencies=TRUE)
library(caret)
data(iris)
train_control <- trainControl(method="cv", number=10, savePredictions = TRUE),
model <- train(Species ~ ., data=iris, trControl=train_control, method="rpart")
model$pred
Run Code Online (Sandbox Code Playgroud)
该model$pred命令列出了 450 条记录中十倍的预测。
这似乎不对 - 不应该对十个测试折叠中model$pred的150 条记录产生预测(1/10 * 150 = 每个测试折叠 15 条记录)?450条记录是如何产生的?
我正在尝试安装该软件包caret在 R 中安装该包一段时间,但收到此错误消息:
*installing *source* package \xe2\x80\x98minqa\xe2\x80\x99 ...\n** package \xe2\x80\x98minqa\xe2\x80\x99 successfully unpacked and MD5 sums checked\n** libs\ngfortran -fpic -g -O2 -c altmov.f -o altmov.o\nmake: gfortran: Command not found\nmake: *** [altmov.o] Error 127\n/usr/lib64/R/etc/Makeconf:155: recipe for target 'altmov.o' failed\nERROR: compilation failed for package \xe2\x80\x98minqa\xe2\x80\x99\n* removing \xe2\x80\x98/home/mohammad/R/x86_64-pc-linux-gnu-library/3.3/minqa\xe2\x80\x99\nWarning in install.packages :\n installation of package \xe2\x80\x98minqa\xe2\x80\x99 had non-zero exit status\n* installing *source* package \xe2\x80\x98SparseM\xe2\x80\x99 ...\n** package \xe2\x80\x98SparseM\xe2\x80\x99 successfully unpacked and MD5 sums checked\n** libs\ngfortran -fpic -g -O2 -c bckslv.f -o bckslv.o\nmake: gfortran: …Run Code Online (Sandbox Code Playgroud) 在插入符号包中,哪些集合模型可用于多类分类?此外,在尝试http://topepo.github.io/caret/Ensemble_Model.html中提到的一些功能时,它给出了:
不在插入符号的内置库中.
Google上的许多功能都没有相关软件包的建议.有谁能帮助我解决这两个问题?
如何将参数传递给插入符号汇总函数?
例如, caret 的 twoClassSummary 函数具有以下签名: twoClassSummary(data, lev = NULL, model = NULL)
参数 lev 指定了我感兴趣的因子级别。现在我想告诉 caret 我对因子级别“false”的摘要感兴趣。就像是
trainControl(summary=twoClassSummary(lev="false"))
Run Code Online (Sandbox Code Playgroud)
不起作用。如何将参数传递给汇总函数?谢谢!
我正在制作一个闪亮的应用程序,其中,在单击actionButton时,使用插入符包训练模型.由于此培训需要时间 - 大约4-5分钟 - 我想在App中显示加载标志或加载GIF,其中在训练模型后显示结果.否则,用户将不知道发生了什么或何时训练模型.
谢谢