标签: r-caret

在插入符号中使用成本敏感的C50

我在火车包中使用火车训练一些c50型号.我设法用C5.0方法做得很好但是当我想使用成本敏感的C50方法时,我很难理解如何调整成本参数.我想要做的是在预测错误的课程时引入费用.我尝试在插入包网站(http://topepo.github.io/caret/index.html)中搜索并阅读这里和那里发现的几本手册/教程.我没有找到有关如何处理成本参数的任何信息.所以这就是我自己尝试的:

  1. 使用默认设置运行火车,看看我得到了什么.在输出中,列车功能尝试从0到2的成本,并给出成本= 2的最佳模型.

  2. 尝试在expand.grid函数中添加成本作为矩阵,就像使用C5.0包一样.代码如下(试验被推到1,因为我只想在输出中输入一棵树/一套规则)

    c50Grid < - expand.grid(.trials = 1,.model = c("tree","rules"),. winnow = c("TRUE","FALSE"),. cost = matrix(c(0,1) ,2,0),ncol = 2))

然而,当我执行列车功能时,虽然我没有得到任何错误(但我得到50个警告),火车再次尝试从0到2的成本.我做错了什么?哪种格式有成本参数?这是什么意思?我如何解释结果?获得成本的那一类是"预测0级错误成本是否超过1级"?此外,我尝试使用一个矩阵,但虽然它不适用于这种格式,我如何添加我想测试的不同成本?

谢谢!任何帮助都会非常受欢迎!


编辑:

所以,试着自己找一个关于C5.0Cost成本参数意义的答案,我去了C5.0Cost.R(https://r-forge.r-project.org/scm/viewvc .php/models/files/C5.0Cost.R?view = markup&root = caret&pathrev = 761)并查找代码.这一行:

cmat <-matrix(c(0, param$cost, 1, 0), ncol = 2)
Run Code Online (Sandbox Code Playgroud)

我猜,它将成本参数传递给成本矩阵.所以,我想现在我能理解它是如何运作的.如果我有class = {0,1}并且我的正类是0,那么这个矩阵表示"预测0级错误成本比1级高两倍",对吧?我现在的问题是,我怎么能这样做呢?我怎么能设置"预测1级错误成本比0级加倍",这将是:

cmat <- matrix(c(0, 1, param$cost, 0), ncol=2)
Run Code Online (Sandbox Code Playgroud)

我可以将成本设置为0.5吗?如果想要使用不同的值进行训练,只需使用小于1 {0.5,0.6,0.7等}的值.注意:我的数据的方式,当我之前使用C50或其他树时,它采用"正类= 0",所以当我使用C50时我不得不反转成本矩阵,所以如果我使用插入方法C5.0Cost,我我需要做同样的事情或找到另一种方式来做到这一点......

我真的很感激这里的任何帮助.谢谢!

r r-caret

6
推荐指数
1
解决办法
5293
查看次数

caret :: train:指定模型生成参数

我正在使用caretR中的库来生成模型.我想生成一个earth(又名MARS)模型,我想degree为这个模型生成指定参数.根据文档(第11页),该earth方法支持此参数.

指定参数时,我收到以下错误消息:

> library(caret)
> data(trees)
> train(Volume~Girth+Height, data=trees, method='earth', degree=1)
Error in { : 
  task 1 failed - "formal argument "degree" matched by multiple actual arguments"
Run Code Online (Sandbox Code Playgroud)

指定degree参数时如何避免此错误?

> sessionInfo()
R version 2.15.0 (2012-03-30)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_GB.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_GB.UTF-8        LC_COLLATE=en_GB.UTF-8    
 [5] LC_MONETARY=en_GB.UTF-8    LC_MESSAGES=en_GB.UTF-8   
 [7] LC_PAPER=C                 LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other …
Run Code Online (Sandbox Code Playgroud)

r r-caret

5
推荐指数
2
解决办法
7608
查看次数

如何在R中获取SVM模型的系数和p值

我想知道是否有办法从e1071包中获取 svmLinear 方法中的所有系数和 p 值。我尝试过summary(modelname),但没有成功。下面是我的 svm 模型的 10 倍交叉验证代码:

library("e1071")
library("caret")
load(df) ## my dataset
ctrl <- trainControl(method = "repeatedcv", number = 10, savePredictions = TRUE) ## 10 fold cross validation
fitsvm <- train(Attrition ~., data=df, method = "svmLinear", trControl = ctrl) ##train model

summary (fitsvm)

Length  Class   Mode 
 1      ksvm     S4 
Run Code Online (Sandbox Code Playgroud)

我可以用 glm - 逻辑回归得到它们:

fit <- train(Attrition ~., data= df, method="glm", family="binomial", trControl= tc)
summary(fit)

                          Estimate   Std. Error  z value  Pr(>|z|)    
(Intercept)               3.424e+00  1.254e+00 …
Run Code Online (Sandbox Code Playgroud)

r svm r-caret

5
推荐指数
1
解决办法
4111
查看次数

插入符号中的折叠与训练错误

在模型调整中使用交叉验证,我从caret::trainresults对象中获得不同的错误率,并自己计算其对象上的错误pred。我想了解它们为何不同,以及理想情况下如何使用折叠错误率进行模型选择、绘制模型性能等。

pred对象包含折叠外的预测。该文档非常清楚,trainControl(..., savePredictions = "final")保存了最佳超参数值的折叠预测:“应保存每次重采样的保留预测量的指标......“最终”保存了最佳调整的预测参数。” (保留“所有”预测然后过滤到最佳调整值并不能解决问题。)

文档train说该results对象是“训练错误率的数据框......”我不确定这意味着什么,但最佳行的值始终与 上计算的指标不同pred。为什么它们不同以及如何使它们对齐?

d <- data.frame(y = rnorm(50))
d$x1 <- rnorm(50, d$y)
d$x2 <- rnorm(50, d$y)
train_control <- caret::trainControl(method = "cv",
                                     number = 4,
                                     search = "random",
                                     savePredictions = "final")
m <- caret::train(x = d[, -1],
                     y = d$y,
                     method = "ranger",
                     trControl = train_control,
                     tuneLength = 3)
#> Loading required package: lattice
#> Loading required package: ggplot2
m …
Run Code Online (Sandbox Code Playgroud)

r r-caret

5
推荐指数
1
解决办法
1324
查看次数

如何在 R studio 的 Caret 中抑制 Boosted 树模型 gbm 的迭代输出

如果我运行此代码来使用 Knit 训练 GBM 模型,我会收到几页 Iter 输出,如下所示。有没有办法抑制这个输出?

mod_gbm <- train(classe ~ ., data = TrainSet, method = "gbm")


## Iter   TrainDeviance   ValidDeviance   StepSize   Improve
##      1        1.6094             nan     0.1000    0.1322
##      2        1.5210             nan     0.1000    0.0936
##      3        1.4608             nan     0.1000    0.0672
##      4        1.4165             nan     0.1000    0.0561
##      5        1.3793             nan     0.1000    0.0441
Run Code Online (Sandbox Code Playgroud)

谢谢你!

r gbm r-caret

5
推荐指数
1
解决办法
2073
查看次数

对多个列进行分层以进行交叉验证

我见过很多方法通过单个变量对样本进行分层以用于交叉验证。该caret包通过该createFolds()函数很好地做到了这一点。默认情况下,似乎caret会进行分区,以使每次折叠具有大致相同的目标事件率。

我想做的是按目标率和时间进行分层。我找到了一个可以部分完成此操作的函数,它是splitstackshape包并使用该stratified()函数。该函数的问题是它返回单个样本,但在给定条件下它不会将数据分成 k 组。

这是一些要重现的虚拟数据。

set.seed(123)

time = rep(seq(1:10),100)
target = rbinom(n=100, size=1, prob=0.3)

data = as.data.frame(cbind(time,target))

table(data$time,data$target)

      0  1
  1  60 40
  2  80 20
  3  80 20
  4  60 40
  5  80 20
  6  80 20
  7  60 40
  8  60 40
  9  70 30
  10 80 20
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,目标事件率在不同时间段内并不相同。时间 1 为 40%,时间 2 为 20%,等等。我想在创建用于交叉验证的折叠时保留这一点。如果我理解正确的话,插入符号将按总体事件率进行分区。

table(data$target)

  0   1 
710 290 
Run Code Online (Sandbox Code Playgroud)

总体而言,大约 30% 的发生率将得到保留,但随着时间的推移,目标事件发生率将不会保留。

我们可以得到这样的一个样本:

library(splitstackshape)
train.index <- stratified(data,c("target","time"),size=.2) …
Run Code Online (Sandbox Code Playgroud)

partitioning r cross-validation r-caret

5
推荐指数
1
解决办法
1368
查看次数

带插入符号的嵌套交叉验证

我使用过一个小数据集,并使用了 mlr 包的嵌套交叉验证。然而,插入符在测试不同模型方面有一些优势。所以,我想知道:是否有人对如何使用插入符实现嵌套交叉验证有任何好的建议(如果可能的话,还有一个例子)?非常感谢。

nested r resampling cross-validation r-caret

5
推荐指数
0
解决办法
884
查看次数

XGBoost xgbTree 的插入符号 varImp 包装器是否使用 XGBoost Gain?

使用 XGBoostxgb.importance可以打印重要性矩阵,显示通过增益、覆盖率和频率测量的分类的可变重要性值。增益是推荐的可变重要性指标。使用脱字符重采样(repeatedcv,数量=10,重复=5)、特定的调整网格和训练method = "xgbTree",脱字符varImp()函数显示从 0-100% 缩放的 k 倍特征重要性估计。

我的问题是插入符varImp(xgbMod)包装函数是否使用增益或增益、覆盖率和频率的所有组合?

r machine-learning r-caret

5
推荐指数
1
解决办法
2258
查看次数

当存在缺失数据时,使用 R 随机森林预测新数据

我想预测包含 NA 行的新数据。我需要保持这些行在输入数据和预测输出中具有相同的行数。如何使用 R Caret 训练的随机森林模型来做到这一点?我为预测函数的参数 na.action 尝试了不同的值,例如:

predictions = predict(RF_model, newdata = newdata, type = "prob", na.action = "na.exclude")
Run Code Online (Sandbox Code Playgroud)

随着na.excludena.omit行被删除。我得到na.pass了一个错误输出“缺失值”。

编辑:模型已经过训练,我们正在谈论对全新数据的预测,其中一些不好。我知道我们无法预测这些不良数据,但我需要跟踪这些行。

r predict random-forest r-caret

5
推荐指数
1
解决办法
2712
查看次数

闪亮的应用程序产生错误:“参数意味着不同的行数:0、1”

我正在尝试创建一个 R Shiny 应用程序,它使用岭回归计算分数,然后在随机森林模型中使用它。我将这两个模型保存为 RDS,并将它们保存在 app.R 所在的同一文件夹中。

然后我读取预测概率的模型和数据并定义一些函数:

    # Reading data
    phats <- read.csv("Predicted_probabilities_training.csv")
    phats_graph <- phats %>% mutate(`PTD Event Status` = ifelse(Observed_Event=="PTD", "PTD Event", "No PTD Event"))
    phats_event <- phats[phats$Observed_Event=="PTD",]
    phats_nonevent <- phats[phats$Observed_Event=="No_PTD",]
            
    # load the models
    ridge_model <- readRDS("ridge_model.rds")
    final_model <- readRDS("final_model.rds")

        # Defining some functions
matrix.for.ILS.function <- function(input){
  return(data.matrix(data.frame(input$MIP_1a,
               input$MIP_3a,
               input$RANTES,
               input$sIL_6R,
               input$ITAC,
               input$IL_21,
               input$Fractalkine,
               input$TNF_a,
               input$IL_1b,
               input$IL_7,
               input$IL_10,
               input$GM_CSF,
               input$MIP_1b)))
}

ILS.function <- function(input){
  ILS.ridge = as.numeric(predict(ridge_model, matrix.for.ILS.function(input), s = 0.7414409, type="link"))
  return(ILS.ridge)
}

test.data.function <- …
Run Code Online (Sandbox Code Playgroud)

r caret glmnet shiny r-caret

5
推荐指数
1
解决办法
611
查看次数