标签: r-caret

r 中的决策树图中的标签为空白

我正在使用插入符包来训练我的模型。

我的模型工作正常。但是当我绘制决策树时,标签是空白的。我如何获得标签?

carMod <- train( FLAG ~.,data=df_train, method="rpart" )
plot(carMod$finalModel)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

r decision-tree r-caret

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

如何在caret包中的指定网格中随机搜索?

我想知道是否可以在预定义的网格中使用随机搜索。例如,我的网格有alphaand lambdaforglmnet方法。alpha介于 0 和 1 之间,lambda介于 -10 到 10 之间。我想使用随机搜索 5 次来随机尝试此范围内的点。我为网格搜索编写了以下代码,它工作正常,但我无法修改它以进行有限的随机搜索。

rand_ctrl <- trainControl(method = "repeatedcv", repeats = 5,
                          search = "random")
grid <- expand.grid(alpha=seq(0,1,0.1),lambda=seq(-10,10,1)) # I think this should be modified
rand_search <- train(Response ~ ., data = train_dat,
                     method = "glmnet",
                     ## Create 20 random parameter values
                     metric = "RMSE",
                     tuneLength = 5,
                     preProc = c("scale"),
                     tuneGrid = grid,
                     trControl = rand_ctrl)
Run Code Online (Sandbox Code Playgroud)

regression r training-data hyperparameters r-caret

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

从 caret::train 获取预测的置信区间

我试图弄清楚如何从插入符::训练线性模型中获取置信区间。

我的第一次尝试只是使用通常的 lm 置信区间参数来运行预测:

m <- caret::train(mpg ~ poly(hp,2), data=mtcars, method="lm")
predict(m, newdata=mtcars, interval="confidence", level=0.95)
Run Code Online (Sandbox Code Playgroud)

但看起来从 caret::train 返回的对象没有实现这个。

我的第二次尝试是提取最终模型并对此进行预测:

m <- caret::train(mpg ~ poly(hp,2), data=mtcars, method="lm")
fm <- m$finalModel
predict(fm, newdata=mtcars, interval="confidence", level=0.95)
Run Code Online (Sandbox Code Playgroud)

但我得到了错误

Error in eval(predvars, data, env) : object 'poly(hp, 2)1' not found
Run Code Online (Sandbox Code Playgroud)

深入挖掘,最终模型似乎对公式有一些奇怪的表示,并且正在我的新数据中搜索“poly(hp, 2)1”列,而不是评估公式。m$finalModel 看起来像这样:

Call:
lm(formula = .outcome ~ ., data = dat)

Coefficients:
   (Intercept)  `poly(hp, 2)1`  `poly(hp, 2)2`  
         20.09          -26.05           13.15
Run Code Online (Sandbox Code Playgroud)

我应该补充一点,我不只是使用lm,因为我使用插入符号通过交叉验证来拟合模型。

如何通过 caret::train 从线性模型拟合中获取置信区间?

r r-caret

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

随机森林的tuneRF与插入符调谐

我尝试使用 randomForest 包中包含的uneRF工具来调整随机森林模型,并且我还使用插入符包来调整我的模型。问题是我正在尝试进行 mtry,并且每种方法都会得到不同的结果。问题是我如何知道哪种方法是最好的方法以及基于什么?我不清楚我是否应该期待类似或不同的结果。

uneRF:通过这种方法,我得到的最佳 mtry 是 3

t <- tuneRF(train[,-12], train[,12],
        stepFactor = 0.5,
        plot = TRUE,
        ntreeTry = 100,
        trace = TRUE,
        improve = 0.05)
Run Code Online (Sandbox Code Playgroud)

插入符号:通过这种方法,我总是得到最好的 mtry 是这种情况下的所有变量 6

control <- trainControl(method="cv", number=5)
tunegrid <- expand.grid(.mtry=c(2:6))
set.seed(2)
custom <- train(CRTOT_03~., data=train, method="rf", metric="rmse", 
                tuneGrid=tunegrid, ntree = 100, trControl=control)
Run Code Online (Sandbox Code Playgroud)

r random-forest hyperparameters r-caret

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

使用测试数据进行统计测试

如果我使用两种带插入符号的方法(NN 和 KNN),然后我想提供显着性检验,我该如何进行 wilcoxon 检验。

我提供的数据样本如下

structure(list(Input = c(25, 193, 70, 40), Output = c(150, 98, 
        27, 60), Inquiry = c(75, 70, 0, 20), File = c(60, 36, 12, 12), 
        FPAdj = c(1, 1, 0.8, 1.15), RawFPcounts = c(1750, 1902, 535, 
        660), AdjFP = c(1750, 1902, 428, 759), Effort = c(102.4, 
        105.2, 11.1, 21.1)), row.names = c(NA, 4L), class = "data.frame")

    d=readARFF("albrecht.arff") 
    index <- createDataPartition(d$Effort, p = .70,list = FALSE)
    tr <- d[index, ]
    ts <- d[-index, ] 

    boot <- …
Run Code Online (Sandbox Code Playgroud)

r machine-learning r-caret pairwise.wilcox.test

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

使用预测概率的插入符包中的自定义性能函数

这篇 SO 文章是关于在包中使用自定义性能测量函数的caret。您想要找到最佳的预测模型,因此您构建了多个预测模型,并通过计算通过比较观察值和预测值得出的单个指标来比较它们。有默认函数来计算此指标,但您也可以定义自己的指标函数。此自定义函数必须将观测值和预测值作为输入。

在分类问题(假设只有两个类别)中,预测值是01。然而,我需要评估的也是模型中计算的概率。有什么办法可以实现这一点吗?

原因是,在某些应用程序中,您需要知道1预测的概率实际上是 99% 还是 51%,而不仅仅是预测是 1 还是 0。

有人可以帮忙吗?


编辑 好,让我尝试更好地解释一下。在 5.5.5(替代性能指标)下的包的文档中,caret有一个描述如何使用您自己的自定义性能函数,如下所示

fitControl <- trainControl(method = "repeatedcv",
                           number = 10,
                           repeats = 10,
                           ## Estimate class probabilities
                           classProbs = TRUE,
                           ## Evaluate performance using 
                           ## the following function
                           summaryFunction = twoClassSummary)
Run Code Online (Sandbox Code Playgroud)

twoClassSummary是本例中的自定义性能函数。此处提供的函数需要将带有obs和 的数据帧或矩阵作为输入pred。这就是要点 - 我想使用一个不采用观察和预测的函数,而是采用观察和预测的概率


还有一件事:

也欢迎其他软件包的解决方案。我唯一不寻找的是“这就是你编写自己的交叉验证函数的方式”。

r machine-learning r-caret

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

插入符混淆矩阵的措施有错吗?

我创建了一个函数来根据混淆矩阵计算灵敏度和特异性,后来才发现该caret包有一个confusionMatrix(). 当我尝试时,事情变得非常混乱,因为它似乎caret使用了错误的公式?

示例数据:

dat <- data.frame(real = as.factor(c(1,1,1,0,0,1,1,1,1)),
                  pred = as.factor(c(1,1,0,1,0,1,1,1,0)))
cm <- table(dat$real, dat$pred)
cm
    0 1
  0 1 1
  1 2 5
Run Code Online (Sandbox Code Playgroud)

我的功能:

model_metrics <- function(cm){
  acc <- (cm[1] + cm[4]) / sum(cm[1:4])
  # accuracy = ratio of the correctly labeled subjects to the whole pool of subjects = (TP+TN)/(TP+FP+FN+TN)
  sens <- cm[4] / (cm[4] + cm[3])
  # sensitivity/recall = ratio of the correctly +ve labeled to all who are +ve in …
Run Code Online (Sandbox Code Playgroud)

r machine-learning confusion-matrix r-caret

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

使用RMSE的插入二进制分类

有没有办法让插入符号使用RMSE和二进制分类问题?

如果您尝试使用metric = "RMSE"分类问题,您将收到以下消息:

Error in train.default(x, y, weights = w, ...) :
    Metric RMSE not applicable for classification models
Run Code Online (Sandbox Code Playgroud)

这是有道理的.但有没有办法定义自定义指标?例如,如果你的结局是01,你可以定义误差outcome - p其中p是由模型预测的概率.

编辑====================

为了给出这个背景以及想要使用这个测量背后的一些推理,请参阅Michael J.Procopio 在自主户外机器人导航中学习漂移概念的分类器集合的实验分析中的 2.7.1 ,或者关于so​​ftclassval论文

r r-caret

2
推荐指数
1
解决办法
3139
查看次数

R将几个虚拟变量列合并为1

我正在尝试合并汽车数据框(插入符号包)中的几个列.列"敞篷车,轿跑车,掀背车,轿车,旅行车"都有虚拟变量,我想创建一个名为type的列,其列名取决于车辆的类型.

library(caret)
data(cars)
head(cars)
colnames(cars)
Run Code Online (Sandbox Code Playgroud)

以下是汽车数据框的列名:

 [1] "Price"       "Mileage"     "Cylinder"    "Doors"       "Cruise"        
 [6] "Sound"       "Leather"     "Buick"       "Cadillac"    "Chevy"     
[11] "Pontiac"     "Saab"        "Saturn"      "convertible" "coupe"   
[16] "hatchback"   "sedan"       "wagon" 
Run Code Online (Sandbox Code Playgroud)

如何将最后5个虚拟变量列合并/合并为1与相应的车辆类型?

任何见解或帮助将不胜感激!

r r-caret

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

插入:使用随机森林并包括交叉验证

我使用插入包来训练随机森林,包括重复的交叉验证.我想知道是否使用了Breiman的原始RF中的OOB,或者是否将其替换为交叉验证.如果它被替换,我是否具有与Breiman 2001中描述的相同的优点,如通过减少输入数据之间的相关性来提高准确度?由于OOB是在更换时绘制的,而CV是在没有替换的情况下绘制的,两个程序是否可比?什么是错误率的OOB估计(基于CV)?

树木是如何生长的?是否使用CART?

由于这是我的第一个主题,如果您需要更多详细信息,请告诉我.提前谢谢了.

random-forest cross-validation r-caret

2
推荐指数
1
解决办法
3433
查看次数