【问题标题】:Linear discriminant analysis variable importance线性判别分析变量重要性
【发布时间】:2014-07-17 01:06:01
【问题描述】:

使用 R MASS 包进行线性判别分析,有没有办法获得变量重要性的度量?

Library(MASS)
### import data and do some preprocessing
fit <- lda(cat~., data=train)

我有一个包含大约 20 个测量值的数据集来预测一个二元类别。但是测量值很难获得,所以我想将测量次数减少到最有影响力的值。

当使用 rpart 或 randomForests 时,我可以获得变量重要性列表,或者使用summary() 或importance() 获得gimi 减少统计信息。

是否有一个我找不到的内置函数来执行此操作? 或者,如果我必须编写一个代码,那么有什么好方法呢?

【问题讨论】:

  • 您应该足够了解统计方法以了解是否存在这样的度量。如果您需要帮助在 R 中提取它,那更像是一个编程问题。如果您的问题是关于统计方法的理论,它可能属于stats.stackexchange.com

标签: r lda


【解决方案1】:

我建议使用“caret”包。

library(caret)
data(mdrr)
mdrrDescr <- mdrrDescr[, -nearZeroVar(mdrrDescr)]
mdrrDescr <- mdrrDescr[, -findCorrelation(cor(mdrrDescr), .8)]
set.seed(1)
inTrain <- createDataPartition(mdrrClass, p = .75, list = FALSE)[,1]
train <- mdrrDescr[ inTrain, ]
test  <- mdrrDescr[-inTrain, ]
trainClass <- mdrrClass[ inTrain]
testClass  <- mdrrClass[-inTrain]

set.seed(2)
ldaProfile <- rfe(train, trainClass,
                  sizes = c(1:10, 15, 30),
                  rfeControl = rfeControl(functions = ldaFuncs, method = "cv"))


postResample(predict(ldaProfile, test), testClass)

创建变量“ldaProfile”后,您可以检索变量的最佳子集及其描述:

ldaProfile$optVariables
[1] "X5v"    "VRA1"   "D.Dr06" "Wap"    "G1"     "Jhetm"  "QXXm"  
[8] "nAB"    "H3D"    "nR06"   "TI2"    "nBnz"   "Xt"     "VEA1"  
[15] "TIE"

您还可以获得所用变量与准确性的漂亮图。

【讨论】:

  • 我在寻找类似的东西,偶然发现了这篇文章,挖了一点,发现使用 ldaFuncs 调用 caret::filterVarImp 计算重要性基于 ROC AUC 计算使用每个特征中的截止值分别(这很漂亮)。无论如何,将 rfe 与 ldaFuncs 一起使用并不能直接从 LDA 模型本身获得一些特征重要性的度量(我认为这是不可能的)。
【解决方案2】:

一种选择是使用排列重要性。

拟合 LDA 模型,然后用随机选择的不同列随机排列每个特征列,并将得到的预测分数与基线(未排列)分数进行比较。

置换分数相对于基线分数降低得越多,该特征就越重要。然后,您可以选择一个截止值并仅采用置换分数 - 基线分数高于给定阈值的那些特征。

关于这个主题有一个很好的 kaggle 教程。它使用python而不是R,但这个概念在这里直接适用。

https://www.kaggle.com/dansbecker/permutation-importance

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-14
    • 2013-06-19
    • 2018-02-07
    • 2013-12-10
    • 2018-07-08
    • 2022-06-22
    • 2019-06-06
    • 2020-02-03
    相关资源
    最近更新 更多