代码之家  ›  专栏  ›  技术社区  ›  Alexis Drakopoulos

从带有“lda2”、“qda”、“lda”的插入符号训练模型中检索变量重要性

  •  0
  • Alexis Drakopoulos  · 技术社区  · 6 年前

    我可以从“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 回复  |  直到 6 年前
        1
  •  0
  •   Sophie    6 年前

    我也遇到了同样的问题,它似乎来自R.I中导入数据集的方式,首先是用{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
    

    希望有帮助。

    索菲