在 Caret 中使用带有度量的 glmnet 回归作为 ROC 的错误

问题描述 投票:0回答:2

我正在使用 Caret 的 trainControl 和训练函数训练 glmnet 正则化逻辑回归模型,如下使用 metric= "ROC" 并得到以下错误:

> ctrl_s10_2class <- trainControl(method = "repeatedcv", number = 10, repeats = 10 , savePredictions = TRUE, classProbs = TRUE)
> model_train_glmnet_s10_2class <- train(Class ~ ZCR + Energy + SpectralC + SpectralS + SpectralE + SpectralF + SpectralR + MFCC1 + MFCC2 + MFCC3 + MFCC4 + MFCC5 + MFCC6 + MFCC7 + MFCC8 + MFCC9 + MFCC10 + MFCC11 + MFCC12 + MFCC13, data = training_s10_2class, method="glmnet", trControl = ctrl_s10_2class, metric = "ROC")

Error in evalSummaryFunction(y, wts = weights, ctrl = trControl, lev =  classLevels,  : 

train()'s use of ROC codes requires class probabilities. See the classProbs option of trainControl()

In addition: Warning messages:
1: In train.default(x, y, weights = w, ...) :
You are trying to do regression and your outcome only has two possible values Are you trying to do classification? If so, use a 2 level factor as your outcome column.
2: In train.default(x, y, weights = w, ...) :
cannnot compute class probabilities for regression

但是我已经在 trainControl 函数中打开了 classProbs = TRUE。此外,为了解决警告消息,我想我必须重新调整我的 2 类数据,我这样做是为了发现这个错误:

> sensor6data_s10_2class <- within(sensor6data_s10_2class, Class <- as.factor(Class))
> sensor6data_s10_2class$Class2 <- relevel(sensor6data_s10_2class$Class,ref="1")
> model_train_glmnet_s10_2class <- train(Class2 ~ ZCR + Energy + SpectralC + SpectralS + SpectralE + SpectralF + SpectralR + MFCC1 + MFCC2 + MFCC3 + MFCC4 + MFCC5 + MFCC6 + MFCC7 + MFCC8 + MFCC9 + MFCC10 + MFCC11 + MFCC12 + MFCC13, data = training_s10_2class, method="glmnet", trControl = ctrl_s10_2class, metric = "ROC")

Error in train.default(x, y, weights = w, ...) : 
At least one of the class levels is not a valid R variable name; This will cause errors when class probabilities are generated because the variables names will be converted to  X1, X0 . Please use factor levels that can be used as valid R variable names  (see ?make.names for help).

非常感谢任何帮助解决此问题(无论是否重新调平)的帮助!谢谢。

r regression r-caret glmnet
2个回答
0
投票

1:在 train.default(x, y, weights = w, ...) 中: 您正在尝试进行回归,而您的结果只有两个可能的值您是否正在尝试进行分类?如果是这样,请使用 2 级因子作为结果列。

似乎使用的数据形式有误。您可以尝试将其转换为一个因子:

training_s10_2class$Class2 = as.factor(training_s10_2class$Class2)

有了它,您不再需要

classProbs = TRUE

当你删除它时,它应该处理你的第二个警告

2:在 train.default(x, y, weights = w, ...) 中: 无法计算回归的类概率


0
投票

基于您得到的以下错误:

Error: Metric Accuracy not applicable for regression models
In addition: Warning message:
In train.default(x, y, weights = w, ...) :

您似乎正在尝试估计一个回归模型,其中您的结果只有两个可能的值。你想做分类吗?如果是这样,请使用 2 级因子作为结果列。

© www.soinside.com 2019 - 2024. All rights reserved.