【发布时间】:2020-10-07 14:41:19
【问题描述】:
我对 Caret 包中的特征重要性函数有疑问。
我有一个具有更多数字和因子特征的数据集。 我使用下面的命令来获取模型的特征重要性。它给了我每个(sub_feature)对于因子变量的重要性。但是,我只想了解功能本身的重要性,而没有详细介绍功能的每个因素。
gbmImp
【问题讨论】:
标签: r variables r-caret feature-selection
我对 Caret 包中的特征重要性函数有疑问。
我有一个具有更多数字和因子特征的数据集。 我使用下面的命令来获取模型的特征重要性。它给了我每个(sub_feature)对于因子变量的重要性。但是,我只想了解功能本身的重要性,而没有详细介绍功能的每个因素。
gbmImp
【问题讨论】:
标签: r variables r-caret feature-selection
我将创建一些示例数据,因为我们没有您的问题:
library(caret)
# example data
df <- data.frame("x" = rnorm(100),
"fac" = as.factor(sample(c(rep("A", 30), rep("B", 35), rep("C", 35)))),
"y" = as.numeric((rpois(100, 4))))
# model
model <- train(y ~ ., method = "glm", data = df)
# feature importance
varImp(model, scale = TRUE)
这会返回您不希望在问题中出现的特征重要性:
# glm variable importance
#
# Overall
# facB 100.00
# facC 13.08
# x 0.00
您可以将因子变量转换为数字并做同样的事情:
# make the factor variable numeric
trans_df <- transform(df, fac = as.numeric(fac))
# model
trans_model <- train(y ~ ., method = "glm", data = trans_df)
# feature importance
varImp(trans_model, scale = TRUE)
这会返回“整体”特征的重要性:
# glm variable importance
#
# Overall
# x 100
# fac 0
但是,我不知道当我们运行varImp(trans_model, scale = TRUE) 时,对因子变量的as.numeric() 操作是否不会导致不同的特征重要性。
另外,如果您发现您的特定因子/字符变量在转换为数字时有问题,请查看this SO thread。
【讨论】: