我可以从“ 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时如何获得有关模型的性能以及哪些变量的性能最佳的正确反馈?
答案 0 :(得分: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
希望有帮助。
苏菲