我正在使用插入符包来训练我的模型。
我的模型工作正常。但是当我绘制决策树时,标签是空白的。我如何获得标签?
carMod <- train( FLAG ~.,data=df_train, method="rpart" )
plot(carMod$finalModel)
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以在预定义的网格中使用随机搜索。例如,我的网格有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) 我试图弄清楚如何从插入符::训练线性模型中获取置信区间。
我的第一次尝试只是使用通常的 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 从线性模型拟合中获取置信区间?
我尝试使用 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) 如果我使用两种带插入符号的方法(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) 这篇 SO 文章是关于在包中使用自定义性能测量函数的caret。您想要找到最佳的预测模型,因此您构建了多个预测模型,并通过计算通过比较观察值和预测值得出的单个指标来比较它们。有默认函数来计算此指标,但您也可以定义自己的指标函数。此自定义函数必须将观测值和预测值作为输入。
在分类问题(假设只有两个类别)中,预测值是0或1。然而,我需要评估的也是模型中计算的概率。有什么办法可以实现这一点吗?
原因是,在某些应用程序中,您需要知道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。这就是要点 - 我想使用一个不采用观察和预测的函数,而是采用观察和预测的概率。
还有一件事:
也欢迎其他软件包的解决方案。我唯一不寻找的是“这就是你编写自己的交叉验证函数的方式”。
我创建了一个函数来根据混淆矩阵计算灵敏度和特异性,后来才发现该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) 有没有办法让插入符号使用RMSE和二进制分类问题?
如果您尝试使用metric = "RMSE"分类问题,您将收到以下消息:
Error in train.default(x, y, weights = w, ...) :
Metric RMSE not applicable for classification models
Run Code Online (Sandbox Code Playgroud)
这是有道理的.但有没有办法定义自定义指标?例如,如果你的结局是0或1,你可以定义误差outcome - p其中p是由模型预测的概率.
编辑====================
为了给出这个背景以及想要使用这个测量背后的一些推理,请参阅Michael J.Procopio 在自主户外机器人导航中学习漂移概念的分类器集合的实验分析中的 2.7.1 ,或者关于softclassval的论文
我正在尝试合并汽车数据框(插入符号包)中的几个列.列"敞篷车,轿跑车,掀背车,轿车,旅行车"都有虚拟变量,我想创建一个名为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与相应的车辆类型?
任何见解或帮助将不胜感激!
我使用插入包来训练随机森林,包括重复的交叉验证.我想知道是否使用了Breiman的原始RF中的OOB,或者是否将其替换为交叉验证.如果它被替换,我是否具有与Breiman 2001中描述的相同的优点,如通过减少输入数据之间的相关性来提高准确度?由于OOB是在更换时绘制的,而CV是在没有替换的情况下绘制的,两个程序是否可比?什么是错误率的OOB估计(基于CV)?
树木是如何生长的?是否使用CART?
由于这是我的第一个主题,如果您需要更多详细信息,请告诉我.提前谢谢了.