标签: r-caret

"响应"与地球的预测(MARS)和R中的插入符号

我希望这不是一个天真的问题.我caret在R 中的包中使用不同的模型执行一系列二项式回归.除了地球(MARS)之外,所有这些都是有效的.通常,earth系列通过glm函数传递给earth函数glm=list(family=binomial).这似乎工作正常(如下所示).对于一般predict()功能,我会使用它type="response'来正确地缩放预测.以下示例显示了fit1使用正确预测的非插入符方法pred1. pred1a是没有的不正确的缩放预测type='response'. fit2与该方法caretpred2是预测; 它与非缩放预测相同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)

regression r r-caret

3
推荐指数
1
解决办法
3884
查看次数

Caret Model 随机森林转化为 PMML 错误

我想使用 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 random-forest pmml r-caret

3
推荐指数
1
解决办法
3516
查看次数

R:插入符号如何选择默认调整范围?

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确定这些默认调整范围?我一直在搜索文档,但仍然没有确定选择范围的算法。

r r-caret

3
推荐指数
1
解决办法
1754
查看次数

在 Windows 上使用 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 = TRUErfeControl,希望它会在我的Windows机器上运行的并行处理。但我不确定它是否这样做,因为在设置allowParallel=TRUE后我没有看到运行时间有任何减少。这个过程需要很长时间,每次1-2小时后我不得不中断内核。

我如何知道caret是否正在并行运行 RFE?我是否需要为插入符号安装任何其他并行化包以并行运行此过程?

任何帮助/建议将不胜感激!我是机器学习领域的新手,所以我需要一段时间才能弄清楚。

parallel-processing r machine-learning random-forest r-caret

3
推荐指数
1
解决办法
3445
查看次数

来自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 r-caret

3
推荐指数
2
解决办法
6651
查看次数

R-Caret,caretList,度量"Accuracy"不在结果集中

试图学习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)

r r-caret

3
推荐指数
1
解决办法
4127
查看次数

将数据分区创建为训练,测试和验证-在R中拆分

我想将训练数据分为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 classification machine-learning r-caret

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

R Confusion Matrix敏感性和特异性标记

我使用R v3.3.2和Caret 6.0.71(即最新版本)来构建逻辑回归分类器.我使用confusionMatrix函数创建统计数据来判断其性能.

logRegConfMat < - confusionMatrix(logRegPrediction,valData [,"Seen"])

  • 参考0,预测0 = 30
  • 参考文献1,预测0 = 14
  • 参考0,预测1 = 60
  • 参考文献1,预测1 = 164

准确度:0.7239
灵敏度:0.3333
特异性:0.9213

我的数据中的目标值(Seen)使用1表示true,0表示false.我假设混淆矩阵中的参考(地面实况)列和预测(分类器)行遵循相同的约定.因此我的结果显示:

  • 真阴性(TN)30
  • 真阳性(TP)164
  • 假阴性(FN)14
  • 误报(FP)60

问题:为什么灵敏度为0.3333,特异性为0.9213?我原本以为它是相反的 - 见下文.

我不愿意相信R confusionMatrix函数中存在错误,因为没有报告任何内容,这似乎是一个重大错误.


关于计算特异性和敏感性的大多数参考文献将它们定义如下 - 即www.medcalc.org/calc/diagnostic_test.php

  • 灵敏度= TP /(TP + FN)= 164 /(164 + 14)= 0.9213
  • 特异性= TN /(FP + TN)= 30 /(60 + 30)= 0.3333

r confusion-matrix r-caret

3
推荐指数
1
解决办法
5480
查看次数

插入符号中的自定义预处理

我使用插入符号作为我的机器学习管道.当我必须执行一些在preProcess函数中不可用的预处理时,是否可以创建一个可以用来代替默认方法的自定义函数?

r r-caret

3
推荐指数
1
解决办法
455
查看次数

Caret:选择未定义的列

我一直试图让下面的代码在插入符号中运行,但得到错误.谁能告诉我怎么麻烦拍它.

[.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)

r r-caret

3
推荐指数
1
解决办法
2670
查看次数