(Caret) 包中的特征重要性
Feature Importance in (Caret) package
我使用 Caret 包应用了四种 ML 方法(线性、XGBoost、RF、SVM)。
我使用 varImp 函数获得了功能重要性。
caret::varImp(xgb1, scale = TRUE)
但是,特征重要性的总和并没有加到 1。我想知道是否可以使用不同的函数将所有特征重要性加到 1。
谢谢,
根据 varImp()
documentation,caret::varImp()
函数中的 scale
参数将变量重要性值从 0 缩放到 100。
如果没有可重现的示例,我们将使用《统计学习原理》一书中的元音数据生成随机森林,并重新缩放变量重要性数据,通过将每个变量重要性数除以,使总和等于 1所有重要性数字的总和。
library(readr)
vowel.train <- subset(read_csv("https://web.stanford.edu/~hastie/ElemStatLearn/datasets/vowel.train"),
select = -row.names)
vowel.test <- subset(read_csv("https://web.stanford.edu/~hastie/ElemStatLearn/datasets/vowel.test"),
select = -row.names)
library(caret)
library(randomForest)
vowel.train$y <- as.factor(vowel.train$y)
vowel.test$y <- as.factor(vowel.test$y)
set.seed(33833)
tr1Control <- trainControl(method="boot")
modFit <- train(y ~ .,method="rf",trControl=tr1Control,data=vowel.train)
# Variable Importance: caret function, extract importance data frame & rescale
v <- varImp(modFit,scale = TRUE)[["importance"]]
v$Overall <- v$Overall / sum(v$Overall)
v
..输出:
> v
Overall
x.1 0.318660495
x.2 0.327734091
x.3 0.018931795
x.4 0.021533916
x.5 0.126744531
x.6 0.089627688
x.7 0.000000000
x.8 0.067066743
x.9 0.027072197
x.10 0.002628545
...并证明 sum(v$Overall)
现在是 1:
sum(v$Overall)
> sum(v$Overall)
[1] 1
我使用 Caret 包应用了四种 ML 方法(线性、XGBoost、RF、SVM)。 我使用 varImp 函数获得了功能重要性。 caret::varImp(xgb1, scale = TRUE)
但是,特征重要性的总和并没有加到 1。我想知道是否可以使用不同的函数将所有特征重要性加到 1。
谢谢,
根据 varImp()
documentation,caret::varImp()
函数中的 scale
参数将变量重要性值从 0 缩放到 100。
如果没有可重现的示例,我们将使用《统计学习原理》一书中的元音数据生成随机森林,并重新缩放变量重要性数据,通过将每个变量重要性数除以,使总和等于 1所有重要性数字的总和。
library(readr)
vowel.train <- subset(read_csv("https://web.stanford.edu/~hastie/ElemStatLearn/datasets/vowel.train"),
select = -row.names)
vowel.test <- subset(read_csv("https://web.stanford.edu/~hastie/ElemStatLearn/datasets/vowel.test"),
select = -row.names)
library(caret)
library(randomForest)
vowel.train$y <- as.factor(vowel.train$y)
vowel.test$y <- as.factor(vowel.test$y)
set.seed(33833)
tr1Control <- trainControl(method="boot")
modFit <- train(y ~ .,method="rf",trControl=tr1Control,data=vowel.train)
# Variable Importance: caret function, extract importance data frame & rescale
v <- varImp(modFit,scale = TRUE)[["importance"]]
v$Overall <- v$Overall / sum(v$Overall)
v
..输出:
> v
Overall
x.1 0.318660495
x.2 0.327734091
x.3 0.018931795
x.4 0.021533916
x.5 0.126744531
x.6 0.089627688
x.7 0.000000000
x.8 0.067066743
x.9 0.027072197
x.10 0.002628545
...并证明 sum(v$Overall)
现在是 1:
sum(v$Overall)
> sum(v$Overall)
[1] 1