从变量重要性排序输出(caret包)

3

我正在建立一些逻辑回归模型,并发现自己正在使用来自caret软件包的varImp(“模型名称”)函数。这个函数非常有用,但我更喜欢变量重要性按从最重要到最不重要的顺序返回。

这里是一个可复制的示例:

library(caret)
data("GermanCredit")

Train <- createDataPartition(GermanCredit$Class, p=0.6, list=FALSE)
training <- GermanCredit[ Train, ]
testing <- GermanCredit[ -Train, ]

mod_fit <- glm(Class ~ Age + ForeignWorker + Property.RealEstate +Housing.Own + CreditHistory.Critical, data=training, family=binomial(link = 'logit'))

当我使用以下代码时:
varImp(mod_fit)

它返回:
                        Overall
Age                    1.747346
ForeignWorker          1.612483
Property.RealEstate    2.715444
Housing.Own            2.066314
CreditHistory.Critical 3.944768

我希望按照“总体”列进行排序,如下所示:
sort(varImp(mod_fit)$Overall)

它返回:

[1] 1.612483 1.747346 2.066314 2.715444 3.944768

有没有一种方法可以返回变量名称和重要性级别,以降序排序的方式呈现在一起?
提前感谢您。

当寻求帮助时,你应该包含一个简单的可重现的例子,其中包含样本输入和所需输出,以便用于测试并验证可能的解决方案。 - MrFlick
2个回答

3
library(caret)
data("GermanCredit")

Train <- createDataPartition(GermanCredit$Class, p=0.6, list=FALSE)
training <- GermanCredit[ Train, ]
testing <- GermanCredit[ -Train, ]

mod_fit <- glm(Class ~ Age + ForeignWorker + Property.RealEstate +Housing.Own + CreditHistory.Critical, data=training, family=binomial(link = 'logit'))

imp <- as.data.frame(varImp(mod_fit))
imp <- data.frame(overall = imp$Overall,
           names   = rownames(imp))
imp[order(imp$overall,decreasing = T),]
    overall                  names
 3.9234999 CreditHistory.Critical
 3.1402835            Housing.Own
 2.1955440                    Age
 1.3042088          ForeignWorker
 0.4878837    Property.RealEstate

@AaronEngland 谢谢你的更新,我已经更新了答案。 - Hack-R

-1

通常情况下,您可以执行以下操作:

varImp(mod_fit, scale = TRUE)

这将按比例从0到100进行缩放和排序相对重要性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接