我希望这不是一个天真的问题.我caret在R 中的包中使用不同的模型执行一系列二项式回归.除了地球(MARS)之外,所有这些都是有效的.通常,earth系列通过glm函数传递给earth函数glm=list(family=binomial).这似乎工作正常(如下所示).对于一般predict()功能,我会使用它type="response'来正确地缩放预测.以下示例显示了fit1使用正确预测的非插入符方法pred1. pred1a是没有的不正确的缩放预测type='response'. fit2与该方法caret和pred2是预测; 它与非缩放预测相同pred1a.通过fit2对象挖掘,glm.list组件中存在正确拟合的值.因此,该earth()函数表现得如此.
问题是......因为caret prediction()函数只需要type='prob' or 'raw',我如何指示是根据响应的规模进行预测?
非常感谢你.
require(earth)
library(caret)
data(mtcars)
fit1 <- earth(am ~ cyl + mpg + wt + disp, data = mtcars,
degree=1, glm=list(family=binomial))
pred1 <- predict(fit1, newdata = mtcars, type="response")
range(pred1)
[1] 0.0004665284 0.9979135993 # Correct …Run Code Online (Sandbox Code Playgroud) 我想使用 pmml 库导出 Caret 随机森林模型,以便我可以将它用于 Java 中的预测。这是我得到的错误的再现。
data(iris)
require(caret)
require(pmml)
rfGrid2 <- expand.grid(.mtry = c(1,2))
fitControl2 <- trainControl(
method = "repeatedcv",
number = NUMBER_OF_CV,
repeats = REPEATES)
model.Test <- train(Species ~ .,
data = iris,
method ="rf",
trControl = fitControl2,
ntree = NUMBER_OF_TREES,
importance = TRUE,
tuneGrid = rfGrid2)
print(model.Test)
pmml(model.Test)
Error in UseMethod("pmml") :
no applicable method for 'pmml' applied to an object of class "c('train', 'train.formula')"
Run Code Online (Sandbox Code Playgroud)
我在谷歌上搜索了一段时间,发现实际上几乎没有关于导出到 PMML 的信息,通常 pmml 库在以下位置具有随机森林:
methods(pmml)
[1] pmml.ada pmml.coxph pmml.cv.glmnet pmml.glm pmml.hclust …Run Code Online (Sandbox Code Playgroud) 当R caret用于比较同一数据集上的多个模型时,caret如果tuneLength为所有模型指定了相同的范围并且没有指定特定于模型的范围,则足够聪明地为不同的模型选择不同的调整范围tuneGrid。
例如,caret为一个特定数据集选择的调整范围是:
earth(nprune): 2, 5, 8, 11, 14
gamSpline(df): 1, 1.5, 2, 2.5, 3
rpart(cp): 0.010, 0.054, 0.116, 0.123, 0.358
有谁知道如何caret确定这些默认调整范围?我一直在搜索文档,但仍然没有确定选择范围的算法。
我正在尝试在包含 27 个预测变量的数据帧上为随机森林运行递归特征消除,每个预测变量有 3653 个值。因此,预测器数据框中总共有 98631 个值。我正在使用包caret 中的rfe函数。
require(caret)
require(randomForest)
subsets <- c(1:5, 10, 15, 20, 25)
set.seed(10)
ctrl <- rfeControl(functions = rfFuncs,
method = "repeatedcv",
repeats = 5,
verbose = FALSE,
allowParallel=TRUE)
rfProfile <- rfe(predictors,
y,
sizes = subsets,
rfeControl = ctrl)
Run Code Online (Sandbox Code Playgroud)
我使用allowParallel = TRUE在rfeControl,希望它会在我的Windows机器上运行的并行处理。但我不确定它是否这样做,因为在设置allowParallel=TRUE后我没有看到运行时间有任何减少。这个过程需要很长时间,每次1-2小时后我不得不中断内核。
我如何知道caret是否正在并行运行 RFE?我是否需要为插入符号安装任何其他并行化包以并行运行此过程?
任何帮助/建议将不胜感激!我是机器学习领域的新手,所以我需要一段时间才能弄清楚。
parallel-processing r machine-learning random-forest r-caret
我很困惑.我以前用过火车没问题.但现在我反复得到"未使用的参数"错误.
#Generate random data
y <- rnorm(100, mean=.5)
x <- rnorm(100)
data <- cbind(x, y)
form <- y ~ x
fitControl <- trainControl(## 10-fold CV
method = "cv",
number = 8)
set.seed(825)
lmFit1 <- train(x, y, method = "lm", trControl = fitControl, na.action=na.omit)
lmFit1 <- train(form, data = data, method = "lm", trControl = fitControl, na.action=na.omit)
Run Code Online (Sandbox Code Playgroud)
由于我正在运行线性回归,我已经使用x和y以及表单指定了此模型.两者都会产生相同的错误.
Error in train(form, method = "lm", trControl = fitControl, na.action = na.omit) : unused arguments (method = "lm", trControl = fitControl, na.action = …Run Code Online (Sandbox Code Playgroud) 试图学习r-Caret和caretList.我正在尝试遵循教程caretEnsemble Classification示例
我遇到了一些错误并搜索了如何修复一些基本设置.但是,我收到错误:
Warning messages:
1: In train.default(x, y, weights = w, ...) :
The metric "Accuracy" was not in the result set. ROC will be used instead.
2: In train.default(x, y, weights = w, ...) :
The metric "Accuracy" was not in the result set. ROC will be used instead.
Run Code Online (Sandbox Code Playgroud)
我的设置是:
#Libraries
library(caret)
library(devtools)
library(caretEnsemble)
#Data
library(mlbench)
dat <- mlbench.xor(500, 2)
X <- data.frame(dat$x)
Y <- factor(ifelse(dat$classes=='1', 'Yes', 'No'))
#Split train/test
train <- runif(nrow(X)) <= .66
#Setup CV …Run Code Online (Sandbox Code Playgroud) 我想将训练数据分为70%训练,15%测试和15%验证。我正在使用createDataPartition()插入符号包的功能。我将其拆分如下
train <- read.csv("Train.csv")
test <- read.csv("Test.csv")
split=0.70
trainIndex <- createDataPartition(train$age, p=split, list=FALSE)
data_train <- train[ trainIndex,]
data_test <- train[-trainIndex,]
Run Code Online (Sandbox Code Playgroud)
是否有任何方法可以createDataPartition()像以下H2o方法一样分为训练,测试和验证?
data.hex <- h2o.importFile("Train.csv")
splits <- h2o.splitFrame(data.hex, c(0.7,0.15), destination_frames = c("train","valid","test"))
train.hex <- splits[[1]]
valid.hex <- splits[[2]]
test.hex <- splits[[3]]
Run Code Online (Sandbox Code Playgroud) 我使用R v3.3.2和Caret 6.0.71(即最新版本)来构建逻辑回归分类器.我使用confusionMatrix函数创建统计数据来判断其性能.
logRegConfMat < - confusionMatrix(logRegPrediction,valData [,"Seen"])
准确度:0.7239
灵敏度:0.3333
特异性:0.9213
我的数据中的目标值(Seen)使用1表示true,0表示false.我假设混淆矩阵中的参考(地面实况)列和预测(分类器)行遵循相同的约定.因此我的结果显示:
问题:为什么灵敏度为0.3333,特异性为0.9213?我原本以为它是相反的 - 见下文.
我不愿意相信R confusionMatrix函数中存在错误,因为没有报告任何内容,这似乎是一个重大错误.
关于计算特异性和敏感性的大多数参考文献将它们定义如下 - 即www.medcalc.org/calc/diagnostic_test.php
我使用插入符号作为我的机器学习管道.当我必须执行一些在preProcess函数中不可用的预处理时,是否可以创建一个可以用来代替默认方法的自定义函数?
我一直试图让下面的代码在插入符号中运行,但得到错误.谁能告诉我怎么麻烦拍它.
[.data.frame(data,,lvls [1])出错:选择了未定义的列
library(tidyverse)
library(caret)
mydf <- iris
mydf <- mydf %>%
mutate(tgt = as.factor(ifelse(Species == 'setosa','Y','N'))) %>%
select(everything(), -Species)
trainIndex <- createDataPartition(mydf$tgt, p = 0.75, times = 1, list = FALSE)
train <- mydf[trainIndex,]
test <- mydf[-trainIndex,]
fitControl <- trainControl(method = 'repeatedcv',
number = 10,
repeats = 10,
allowParallel = TRUE,
summaryFunction = twoClassSummary)
fit_log <- train(tgt~.,
data = train,
method = "glm",
trControl = fitControl,
family = "binomial")
Run Code Online (Sandbox Code Playgroud)