我试图将 logLoss 合并为通过插入符号(而不是默认选项 Accuracy 或 Kappa)调整 randomForest(其他分类器)时使用的性能度量。
第一个 R 脚本使用默认值执行,不会出现错误。但是,我得到:
{ 中的错误:任务 1 失败 - “未使用的参数(模型 = 方法)”
使用第二个脚本时。
该函数logLoss(predict(rfModel,test[,-c(1,95)],type="prob"),test[,95])通过利用单独训练的随机森林模型来工作。
该数据框有 100 多列和 10,000 多行。所有元素都是在 col=95 的 9 级分类“目标”之外的数字。行 id 位于 col=1 中。
不幸的是,我没有正确掌握http://topepo.github.io/caret/training.html提供的指导,也没有通过谷歌搜索获得太多运气。
非常感谢您的帮助。
工作 R 脚本:
fitControl = trainControl(method = "repeatedcv",number = 10,repeats = 10)
rfGrid = expand.grid(mtry=c(1,9))
rfFit = train(target ~ ., data = train[,-1],method = "rf",trControl = fitControl,verbose = FALSE,tuneGrid = rfGrid)
Run Code Online (Sandbox Code Playgroud)
R 脚本不工作:
logLoss = function(data,lev=NULL,method=NULL) {
lLoss = 0
epp = …Run Code Online (Sandbox Code Playgroud) 我“更新”了插入符号中的twoClassSummary 函数,以使用插入符号函数包含阴性和阳性预测值:
testfun <- function (data, lev = NULL, model = NULL)
{
lvls <- levels(data$obs)
if (length(lvls) > 2)
stop(paste("Your outcome has", length(lvls), "levels. The
twoClassSummary() function isn't appropriate."))
requireNamespaceQuietStop("ModelMetrics")
if (!all(levels(data[, "pred"]) == lvls))
stop("levels of observed and predicted data do not match")
data$y = as.numeric(data$obs == lvls[2])
rocAUC <- ModelMetrics::auc(ifelse(data$obs == lev[2], 0,
1), data[, lvls[1]])
out <- c(rocAUC, sensitivity(data[, "pred"], data[, "obs"], lev[1]),
specificity(data[, "pred"], data[, "obs"], lev[2]),
# next 3 lines are my additions and …Run Code Online (Sandbox Code Playgroud) 我想知道是否有办法从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) 我有一个如下所示的模型:
library(mlbench)
data(Sonar)
library(caret)
set.seed(998)
my_data <- Sonar
fitControl <-
trainControl(
method = "boot632",
number = 10,
classProbs = T,
savePredictions = T,
summaryFunction = twoClassSummary
)
model <- train(
Class ~ .,
data = my_data,
method = "xgbTree",
trControl = fitControl,
metric = "ROC"
)
Run Code Online (Sandbox Code Playgroud)
如何绘制此模型的 ROC 曲线?据我了解,必须保存概率(我在 trainControl 中所做的),但是由于引导用于生成“测试”集的随机抽样,我不确定 caret 如何计算 ROC 值以及如何生成曲线。
为了隔离最佳性能参数的类概率,我正在做:
for (a in 1:length(model$bestTune))
{model$pred <-
model$pred[model$pred[, paste(colnames(model$bestTune)[a])] == model$bestTune[1, a], ]}
Run Code Online (Sandbox Code Playgroud)
请指教。
谢谢!
使用插入符号包堆叠时,我在 R 中收到以下错误。
“错误:至少一个类级别不是有效的 R 变量名;这将在生成类概率时导致错误,因为变量名称将转换为 not5, X5sets 。请使用可以用作有效 R 的因子级别变量名称(请参阅 ?make.names 以获取帮助)。”
下面是我试图运行的代码。
library(caretEnsemble)
control <- trainControl(method="repeatedcv", number=10, repeats=3, savePredictions=TRUE, classProbs=TRUE)
algorithmList <- c('rpart', 'knn', 'svmRadial')
set.seed(222)
models <- caretList(Tsets ~ MatchSurface + MatchRound + AgeDiff + SameHand + HeightDiff, data=up_sample, trControl=control, methodList=algorithmList)
results <- resamples(models)
Run Code Online (Sandbox Code Playgroud)
当我删除时classProbs=TRUE,代码会运行,但我想保留它,因为我在此之后尝试运行需要它的其他代码。我的所有变量都是因数或整数,并且我已经更改了所有类,因此它们没有“0”和“1”。因此我无法弄清楚为什么代码不会运行。
我在下面附上了数据结构的图片。如果有人有一些建议,那就太好了。

为了构建堆叠模型,我在同一数据集上使用不同的预处理训练了许多基础模型。为了跟踪构建设计矩阵的方式,我使用了 recipes 包并定义了我自己的步骤。但是,使用带有自定义步骤的配方进入插入符号训练模型比应用相同的预处理并使用手工设计矩阵训练插入符号模型慢 20 倍。知道为什么以及如何改进吗?
我在下面提供了一个可重现的示例:
# Loading libraries
packs <- c("tidyverse", "caret", "e1071", "wavelets", "recipes")
InstIfNec<-function (pack) {
if (!do.call(require,as.list(pack))) {
do.call(install.packages,as.list(pack)) }
do.call(require,as.list(pack)) }
lapply(packs, InstIfNec)
# Getting data
data(biomass)
biomass <- select(biomass,-dataset,-sample)
# Defining custom pretreatment algorithm
HaarTransform <- function(DF1) {
w <- function(k) {
s1 = dwt(k, filter = "haar")
return (s1@V[[1]])
}
Smt = as.matrix(DF1)
Smt = t(base::apply(Smt, 1, w))
return (data.frame(Smt))
}
# Creating the custom step function
step_Haar_new <- function(terms, role, trained, skip, …Run Code Online (Sandbox Code Playgroud) 我正在构建一个 KNN 模型来预测房价。我将检查我的数据和我的模型,然后是我的问题。
数据 -
# A tibble: 81,334 x 4
latitude longitude close_date close_price
<dbl> <dbl> <dttm> <dbl>
1 36.4 -98.7 2014-08-05 06:34:00 147504.
2 36.6 -97.9 2014-08-12 23:48:00 137401.
3 36.6 -97.9 2014-08-09 04:00:40 239105.
Run Code Online (Sandbox Code Playgroud)
模型 -
library(caret)
training.samples <- data$close_price %>%
createDataPartition(p = 0.8, list = FALSE)
train.data <- data[training.samples, ]
test.data <- data[-training.samples, ]
model <- train(
close_price~ ., data = train.data, method = "knn",
trControl = trainControl("cv", number = 10),
preProcess = c("center", "scale"),
tuneLength …Run Code Online (Sandbox Code Playgroud) 我在 R 中使用 caret。我的最终目标是提交不同的数据帧以分离 preProcess pca,然后将 PCA 组件放在一起进行岭回归训练。但是,请参阅下面的示例代码,其中在训练函数内与外/前训练功能的 preProcess 中应用 pca 时,我没有得到相同的结果。
#Sample data
s <- c(-0.412440717220306, -0.459911376237869, -0.234769582748413, -0.332282930612564, -0.486973077058792, -0.301480442285538, -0.181094691157341, -0.240918189287186, 0.0962697193026543, -0.119731709361076, -0.389783203601837, -0.217093095183372, -0.302948802709579, -0.406619131565094, 0.247409552335739, -0.406119048595428, 0.0574243739247322, -0.301231145858765, -0.229316398501396, -0.0620433799922466)
t <- c(0.20061232149601, 0.0536709427833557, 0.530373573303223, 0.523406386375427, 0.267315864562988, 0.413556098937988, 0.274257719516754, 0.275401413440704, 0.634453296661377, 0.145272701978683, 0.196711808443069, 0.332845687866211, 0.345706522464752, 0.444085538387299, 0.253269702196121, 0.231440827250481, -0.196317762136459, 0.49691703915596, 0.43754768371582, 0.0106721892952919)
u <- c(-0.565160751342773, 0.377725303173065,-0.273447960615158, -0.338064402341843, -0.59904420375824, -0.780133605003357,-0.508388638496399, -0.226167500019073, -0.257708549499512, -0.349863946437836,-0.443032741546631, -0.36387038230896, -0.455201774835587, -0.137616977095604,0.130770832300186, -0.420618057250977, -0.125859051942825, -0.382272869348526, -0.355217516422272, -0.0601325333118439)
v <- …Run Code Online (Sandbox Code Playgroud) 使用 caret::train() 运行逻辑回归模型时出现问题。
LR = caret::train(Satisfaction ~., data= log_train, method = "glm", preProcess = c("scale"), family="binomial")
不断收到以下错误行:
summary.connection(connection) 中的错误:连接无效
这个错误对我来说似乎很新,因为当我之前运行此代码时,我没有看到任何问题。请帮忙!
我有多个准确度不同的分类机器学习模型。当我library(caret)在控制台中运行我的 xgBOOST(使用)时,我得到了 0.7586 的准确度。但是当我编织我的 Rmarkdown 时,相同模型的准确度是 0.8621。我不知道为什么这是不同的。
我遵循了此链接的建议,但没有任何效果:https : //community.rstudio.com/t/console-and-rmd-output-differ-same-program-used-but-the-calculation-gives-a-不同结果/67873/3
我也遵循了问题的建议,但没有任何效果:R Markdown 中的统计结果与针织输出不同(所有格式:Word、HTML、PDF)
最后我尝试了这个,但也没有任何效果:设置种子时,示例函数在控制台和针织文档中给出不同的结果
这是我在控制台和 Rmarkdown 中运行的代码,但准确度不同:
# Data
data <- data[!is.na(data$var1),]
# Change levels of var1
levels(data$var1)=c("No","Yes")
#Data Preparation and Preprocessing
# Create the training and test datasets
set.seed(100)
# Step 1: Get row numbers for the training data
trainRowNumbers <- createDataPartition(data$var1, p=0.8, list=FALSE)
# Step 2: Create the training dataset
trainset <- data[trainRowNumbers,]
# Step 3: Create the test dataset
testset <- data[-trainRowNumbers,] …Run Code Online (Sandbox Code Playgroud)