线性判别分析变量重要性

时间:2014-05-28 00:09:37

标签: r lda

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

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

我有一个数据集,大约有20个测量值来预测二进制类别。但测量很难获得,所以我想减少最有影响力的测量数量。

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

是否有内置功能可以做到这一点我找不到? 或者如果我必须编写代码,那么最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

我建议使用&#34;插入符号&#34;封装

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)

一旦变量&#34; ldaProfile&#34;创建后,您可以检索变量的最佳子集及其描述:

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

此外,您可以获得使用过的变量与精确度的良好情节。

答案 1 :(得分:0)

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

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

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

关于kaggle的一个很好的教程,针对该主题。它使用python代替R,但是该概念在这里直接适用。

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