从使用“lda2”,“qda”,“lda”的Caret训练模型中检索变量重要性

问题描述 投票:1回答:1

我可以从“nnet”和“knn”模型中获得变量重要性,但不是来自“lda”,“lda2”和“qda”。

我正在使用varImp()。我已经尝试了所有我能想到的东西,但却无法正确理解变量的重要性。

这是我训练模型的代码:

lda_model <- train(quality2 ~ ., 
                   data = train_data,
                   method = "lda",
                   preProcess = c("center", "scale"),
                   trControl = trainControl(method = "repeatedcv",
                                            number = 10,
                                            repeats = 2),
                   importance = TRUE)

这是我尝试检查重要性时得到的错误:

> varImp(lda_model)
Error in model.frame.default(formula = y ~ x, na.action = na.omit, drop.unused.levels = TRUE) : 
  invalid type (list) for variable 'y'
In addition: Warning messages:
1: In mean.default(y, rm.na = TRUE) :
  argument is not numeric or logical: returning NA
2: In Ops.factor(left, right) : ‘-’ not meaningful for factors

我知道这意味着它将它视为对象类列表而不是训练模型,我已经在lda_model $ finalmodel和其他人上尝试过它,但它仍然没有用。

在使用lda / qda进行模型执行以及哪些变量表现最佳时,如何获得正确的反馈?

r r-caret
1个回答
0
投票

我有同样的问题,似乎来自数据集的方式是在R中导入的。我首先使用{readxl}包导入并且varImp()不起作用。然后我尝试通过剪贴板导入,现在varImp正在使用{caret}处理我的lda模型构建。

我的代码{readxl}:

library(readxl)
glauc <- read_excel("Glaucome.xlsx", sheet="GlaucomaM")
rownames(glauc) <- glauc$IDENT
glauc$IDENT <- NULL
glauc$Class <- as.factor(glauc$Class)

library(caret)
numappr <- createDataPartition(glauc$Class, p=0.7)
appr <- glauc[numappr$Resample1,]
test <- glauc[-numappr$Resample1,]

Ctrl <- trainControl(summaryFunction=twoClassSummary,
                     classProbs=TRUE)
appr.lda <- train(Class~., data=appr, method="lda",
                  trControl=Ctrl, preProc = c("center","scale"),
                  metric="ROC")
varImp(appr.lda)

这会导致出现与您相同的错误消息。

Error: $ operator is invalid for atomic vectors
In addition: Warning messages:
1: In mean.default(y, rm.na = TRUE) :
  argument is not numeric or logical: returning NA
2: In Ops.factor(left, right) : ‘-’ not meaningful for factors

我的代码有read.table()和剪贴板:

glauc <- read.table("clipboard", header=T, sep="\t", dec=".")
rownames(glauc) <- glauc$IDENT
glauc$IDENT <- NULL

library(caret)
numappr <- createDataPartition(glauc$Class, p=0.7)
appr <- glauc[numappr$Resample1,]
test <- glauc[-numappr$Resample1,]

Ctrl <- trainControl(summaryFunction=twoClassSummary,
                     classProbs=TRUE)
appr.lda <- train(Class~., data=appr, method="lda",
                  trControl=Ctrl, preProc = c("center","scale"),
                  metric="ROC")
varImp(appr.lda)

这个导致结果(这里只有第一个):

varImp(appr.lda)
ROC curve variable importance

  only 20 most important variables shown (out of 62)

     Importance
vari     100.00
varg      97.14
vars      94.52
phci      93.69
hic       92.02
phcg      90.55
tms       89.96

希望能帮助到你。

索菲

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