标签: r-caret

插入符号中的 closeZeroVar 函数

当我运行以下代码时,数据集中的所有变量都将被删除,

data <- data[, -nearZeroVar(data)]
Run Code Online (Sandbox Code Playgroud)

我对 R 相当陌生,我的期望是上面的代码将删除数据集中的近零方差预测变量,实际上数据中没有近零方差预测变量,所以我认为它会保留数据按原样设置,但事实并非如此。

运行脚本时,我并不总是知道预测变量是否接近零方差预测变量......我如何修改代码以将其添加到脚本中,以检查是否存在接近零方差预测变量以及是否没有预测变量是接近零方差的预测变量,那么它应该按原样保留数据集。

下面的代码重现了这种情况。

library(caret)
data(GermanCredit)
# remove the near-zero var predictors
GermanCredit <- GermanCredit[, -nearZeroVar(GermanCredit)] 
# but now if i redo the above command it removes all the predictors from the data set.
GermanCredit <- GermanCredit[, -nearZeroVar(GermanCredit)]
# all predictors removed
Run Code Online (Sandbox Code Playgroud)

在某些情况下,我们可能不知道数据集不包含任何接近零方差的预测变量。

更新

@LauriK,topepo(Max):还有一个愚蠢的问题,

GermanCredit <- GermanCredit[, -nearZeroVar(GermanCredit)]`
Run Code Online (Sandbox Code Playgroud)

我想如果我把上面的代码写成

GermanCredit <- GermanCredit[, -integer(0)]
Run Code Online (Sandbox Code Playgroud)

integer(0)因为在它应该删除之前有一个(-)符号,integer(0)它什么也没有,所以它应该删除任何内容并按原样保留数据集。

我知道我可能在这里缺少一个非常基本的概念,但我想学习。

r r-caret

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

R - 安装插入符号包时出错

> Error in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()),\n> versionCheck = vI[[j]]) :    namespace \xe2\x80\x98pbkrtest\xe2\x80\x99 0.4-2 is being\n> loaded, but >= 0.4.4 is required  \n> Error: package or namespace load\n> failed for \xe2\x80\x98caret\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n\n

Caret 工作得很好,直到我尝试加载 Rcpp,它把一切搞乱了。

\n\n

我在答案中搜索了插入符号的类似问题,但发布的解决方案似乎不适用于我的。我跟着:

\n\n
install.packages("caret", dependencies = TRUE) \n
Run Code Online (Sandbox Code Playgroud)\n\n

但这没有用。

\n

package r-caret

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

如何从 caret::predict() 获得类概率和预测?

除了预测类标签之外,在预测时是否可以返回新数据中每个观察的期望?

library(caret)
knnFit <- train(Species ~ ., data = iris, method = "knn", 
                trControl = trainControl(method = "cv", classProbs = TRUE))

x <- predict(knnFit, newdata = iris)
Run Code Online (Sandbox Code Playgroud)

返回预测类别的向量。

str(x)
Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
Run Code Online (Sandbox Code Playgroud)

如果我想要概率:

x <- predict(knnFit, newdata = iris, type = "prob")
> head(x)
  setosa versicolor virginica
1      1          0         0
2      1          0         0
3      1          0         0
4      1          0         0
5      1          0         0 …
Run Code Online (Sandbox Code Playgroud)

r predict r-caret

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

如何使用 Caret 为每个交叉验证绘制 ROC 曲线

我有以下代码:

library(mlbench)
library(caret)
library(ggplot2)
set.seed(998)

# Prepare data ------------------------------------------------------------

data(Sonar)
my_data <- Sonar

# Cross Validation Definition ---------------------------------------------------

fitControl <-
  trainControl(
    method = "cv",
    number = 10,
    classProbs = T,
    savePredictions = T,
    summaryFunction = twoClassSummary
  )


# Training with Random Forest ----------------------------------------------------------------


model <- train(
  Class ~ .,
  data = my_data,
  method = "rf",
  trControl = fitControl,
  metric = "ROC"
)

for_lift <- data.frame(Class = model$pred$obs, rf = model$pred$R)
lift_obj <- lift(Class ~ rf, data = for_lift, class = …
Run Code Online (Sandbox Code Playgroud)

r machine-learning r-caret

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

在 R 中使用 Caret 保存并加载 catboost 模型

我能够使用插入符号(在 Rstudio 中)训练 Catboost 模型,并且效果很好。

my_catboost <- caret::train(x, y, 

              method=catboost.caret, 
              trControl=fitControl, 
              tuneGrid = param,
              metric = "ROC")
Run Code Online (Sandbox Code Playgroud)

如果我使用该模型来预测同一会话中的新数据,没问题,它可以工作:

output <- caret::predict.train(my_catboost, newdata=x_testing, type="prob")
Run Code Online (Sandbox Code Playgroud)

但是,如果我保存模型并稍后加载(或保存模型,删除“my_catboost”并加载),则函数预测将使 R 和 Rstudio 崩溃,并且不会出现错误消息,并且在 Rstudio 日志中找不到任何内容。加载后,我可以看到在全局环境中创建的模型,看起来不错。

我尝试了 R 函数保存和加载、saveRDS 和 readRDS,但都崩溃了

谢谢 !

r r-caret catboost

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

使用插入符号构建随机森林

我试图按照此处的步骤在插入符号中构建 RandomForest 模型。本质上,他们设置了 RandomForest,然后是最好的 mtry,然后是最好的 maxnodes,然后是最好的树数。这些步骤是有道理的,但是搜索这三个因素的相互作用而不是一次搜索一个不是更好吗?

其次,我了解对 mtry 和 ntrees 执行网格搜索。但我不知道如何设置最小节点数或最大节点数。通常建议保留默认节点大小,如下所示?

library(randomForest)
library(caret)
mtrys<-seq(1,4,1)
ntrees<-c(250, 300, 350, 400, 450, 500, 550, 600, 800, 1000, 2000)
combo_mtrTrees<-data.frame(expand.grid(mtrys, ntrees))
colnames(combo_mtrTrees)<-c('mtrys','ntrees')

tuneGrid <- expand.grid(.mtry = c(1: 4))
for (i in 1:length(ntrees)){
  ntree<-ntrees[i]
  set.seed(65)
  rf_maxtrees <- train(Species~.,
                       data = df,
                       method = "rf",
                       importance=TRUE,
                       metric = "Accuracy",
                       tuneGrid = tuneGrid,
                       trControl = trainControl( method = "cv",
                                                 number=5,
                                                 search = 'grid',
                                                 classProbs = TRUE,
                                                 savePredictions = "final"),
                       ntree = ntree
                       )
  Acc1<-rf_maxtrees$results$Accuracy[rf_maxtrees$results$mtry==1]
  Acc2<-rf_maxtrees$results$Accuracy[rf_maxtrees$results$mtry==2] …
Run Code Online (Sandbox Code Playgroud)

r random-forest r-caret

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

如何扩展逻辑回归图?

这是我创建的情节我在 R 上创建了一个逻辑模型,问题是我的最大 x 值是 0.85,因此图在这个值处停止。

有没有办法可以将其扩展到使用我的逻辑模型计算的 x=100 和 y 值?

library(caret)
library(mlbench)
library(ggplot2)
library(tidyr)
library(caTools)

my_data2 <- read.csv('C:/Users/Magician/Desktop/R files/Fnaticfirstround.csv', header=TRUE, stringsAsFactors = FALSE)

my_data2
#converting Map names to the calculated win probability
my_data2[my_data2$Map == "Dust2", "Map"] <- 0.307692
my_data2[my_data2$Map == "Inferno", "Map"] <- 0.47619
my_data2[my_data2$Map == "Mirage", "Map"] <- 0.708333
my_data2[my_data2$Map == "Nuke", "Map"] <- 0.444444
my_data2[my_data2$Map == "Overpass", "Map"] <- 0.333333
my_data2[my_data2$Map == "Train", "Map"] <- 0.692308
my_data2[my_data2$Map == "Vertigo", "Map"] <- 0
my_data2[my_data2$Map == "Cache", "Map"] <- …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 logistic-regression dplyr r-caret

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

使用 Caret 包的测试集的 ROC 曲线

我正在尝试从测试集上的插入符号中获取最佳模型的 ROC 曲线。我遇到了MLeval一个看起来很方便的包(输出非常彻底,使用几​​行代码提供了所有需要的指标和图表)。一个很好的例子在这里:https : //stackoverflow.com/a/59134729/12875646

我正在尝试下面的代码,并且能够获得训练集所需的指标/图表,但是当我尝试在测试集上工作时不断出错。

library(caret)
library(MLeval)
data(GermanCredit)

Train <- createDataPartition(GermanCredit$Class, p=0.6, list=FALSE)
training <- GermanCredit[ Train, ]
testing <- GermanCredit[ -Train, ]


ctrl <- trainControl(method = "repeatedcv", number = 10, classProbs = TRUE, savePredictions = TRUE)

mod_fit <- train(Class ~ Age + ForeignWorker + Property.RealEstate + Housing.Own + 
    CreditHistory.Critical,  data=training, method="glm", family="binomial",
    trControl = ctrl, tuneLength = 5, metric = "ROC")

pred <- predict(mod_fit, newdata=testing)
confusionMatrix(data=pred, testing$Class)

test = evalm(mod_fit) # this gives the ROC …
Run Code Online (Sandbox Code Playgroud)

r roc r-caret

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

在插入符号中拟合 bartMachine 得到长度为零的参数/不正确的维数

我想一个很好的例子模型bartMachine中使用Caret,我似乎无法建模bartMachineCaret正确的,谁能告诉我,什么是完全错误的主要手段?或者是否有用于 BART 建模的简单可重现代码?

这是我使用 HouseVotes84 和汽车数据集的一些虚拟数据对 bartMachine 进行建模的片段:

library(mlbench)
library(caret)

data("HouseVotes84")
#Using HouseVotes84 as Classification Task Dataset and mtcars as Regression Task Dataset
dummy_data_classif <- HouseVotes84[,2:length(colnames(HouseVotes84))] %>% 
  mutate_if(is.factor, as.numeric)
dummy_data_classif <- data.frame(cbind(Class=HouseVotes84[,1], dummy_data_classif))
dummy_data_classif[is.na(dummy_data_classif)] <- 0

data("cars")
dummy_data_regr <- cars

caret_method_tester <- function(dummy_data, formula, resample_plan=1, 
                                test_method, time_limit=30, 
                                grid_param=c(), parallel_mode=FALSE){
  library(caret)
  library(R.utils)
  formula <- as.formula(formula)
  resampling <- NULL
  if(resample_plan==1){
    resampling <- trainControl(method = "repeatedcv",
                               number = 10,
                               repeats = 5,
                               allowParallel = parallel_mode) …
Run Code Online (Sandbox Code Playgroud)

r machine-learning r-caret bartmachine

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

插入符号分类阈值

我一直在使用gbmcaret包中Rstudio找到了故障的发生概率。

我使用 Youden's J 找到了最佳分类的阈值,即 0.63。我现在如何使用这个阈值?我认为最好的方法是以某种方式将阈值合并到gbm模型中caret以获得更准确的预测,然后再次在训练数据上重新运行模型?目前它默认为 0.5,我找不到更新阈值的明显方法。

或者,阈值是否仅用于将测试数据预测分成正确的类别?这似乎更直接,但是我如何反映 ROC_AUC 图中的变化,假设应该根据新阈值更新概率?

任何帮助将不胜感激。谢谢

编辑:我正在处理的完整代码如下:

  
library(datasets)
library(caret)
library(MLeval)
library(dplyr)

data(iris)
data <- as.data.frame(iris)

# create class
data$class <- ifelse(data$Species == "setosa", "yes", "no")

# split into train and test
train <- data %>% sample_frac(.70)
test <- data %>% sample_frac(.30)


# Set up control function for training
ctrl <- trainControl(method = "cv",
                     number = 5, 
                     returnResamp = 'none',
                     summaryFunction = twoClassSummary,
                     classProbs = …
Run Code Online (Sandbox Code Playgroud)

r gbm r-caret

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