Получение значения переменной из обученной модели Caret с помощью "lda2", "qda", "lda" - PullRequest
0 голосов
/ 06 декабря 2018

Я могу получить значение переменной из моделей "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 о том, как работает моя модель и какие переменные работают лучше всего?

1 Ответ

0 голосов
/ 28 января 2019

У меня была такая же проблема, и, похоже, это происходит из-за того, что набор данных импортирован в R. Сначала я импортировал с пакетом {readxl}, а varImp () не работал.Затем я попытался импортировать через буфер обмена, и теперь varImp работает над сборкой моей модели lda с помощью {caret}.

Мой код с {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

Надеюсь, это поможет.

Софи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...