使用R MASS包进行线性判别分析,有没有办法获得变量重要性的度量?
Library(MASS)
### import data and do some preprocessing
fit <- lda(cat~., data=train)
我有一个数据集,大约有20个测量值来预测二进制类别。但测量很难获得,所以我想减少最有影响力的测量数量。
使用rpart或randomForests时,我可以使用summary()或importance()获得变量重要性列表或gimi减少统计数据。
是否有内置功能可以做到这一点我找不到? 或者如果我必须编写代码,那么最好的方法是什么?
答案 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,但是该概念在这里直接适用。