当我运行以下代码时,数据集中的所有变量都将被删除,
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)它什么也没有,所以它应该删除任何内容并按原样保留数据集。
我知道我可能在这里缺少一个非常基本的概念,但我想学习。
> 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\nRun Code Online (Sandbox Code Playgroud)\n\nCaret 工作得很好,直到我尝试加载 Rcpp,它把一切搞乱了。
\n\n我在答案中搜索了插入符号的类似问题,但发布的解决方案似乎不适用于我的。我跟着:
\n\ninstall.packages("caret", dependencies = TRUE) \nRun Code Online (Sandbox Code Playgroud)\n\n但这没有用。
\n除了预测类标签之外,在预测时是否可以返回新数据中每个观察的期望?
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) 我有以下代码:
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) 我能够使用插入符号(在 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,但都崩溃了
谢谢 !
我试图按照此处的步骤在插入符号中构建 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 上创建了一个逻辑模型,问题是我的最大 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) 我正在尝试从测试集上的插入符号中获取最佳模型的 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) 我想一个很好的例子模型bartMachine中使用Caret,我似乎无法建模bartMachine与Caret正确的,谁能告诉我,什么是完全错误的主要手段?或者是否有用于 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) 我一直在使用gbm的caret包中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)