重新排序 mlr3 的训练模型重要性值以匹配 R 中的任务?
Reorder mlr3's trained model importance values to match that of task in R?
我想知道如何重新排序从 'mlr3' 训练模型产生的特征的重要性以匹配来自 task$feature_names
的特征名称的顺序?例如,如果我像这样从 mlr3
创建一个 task
和模型:
#Get data
aq <- data.frame(airquality)
aq <- na.omit(aq)
# Create mlr3 task and model
aq_T = TaskRegr$new(id = "aq", backend = aq, target = "Ozone")
aqLrn = lrn("regr.ranger", importance = "permutation")
aq_M <- aqLrn$train(aq_T)
然后我查看了特征名称和重要性值,结果如下:
name <- aq_T$feature_names #task feature names
imp <- aq_M$importance(). #models importance values
name
imp
> name
[1] "Solar.R" "Wind" "Temp" "Month" "Day"
> imp
Temp Wind Solar.R Month Day
597.43488 455.69392 112.31195 30.28683 21.80924
重要性值按从高到低的顺序排列。但我想知道是否可以重新排序 imp
值以匹配 name
(在上例中)给出的特征名称的顺序。
看一下 name
和 imp
的结构告诉我:
str(name)
str(imp)
> str(name)
chr [1:5] "Solar.R" "Wind" "Temp" "Month" "Day"
> str(imp)
Named num [1:5] 597.4 455.7 112.3 30.3 21.8
- attr(*, "names")= chr [1:5] "Temp" "Wind" "Solar.R" "Month" ...
我找到了一种重新排序命名数字 imp
的方法。这成功了:
imp[order(factor(names(imp), levels = name))]
请注意,$fature_names
不能保证与基础数据中的顺序相同。因此,如果您想确保顺序与数据中的顺序相同,那么您可以执行以下操作:
library(mlr3)
library(mlr3learners)
#Get data
aq <- data.frame(airquality)
aq <- na.omit(aq)
# Create mlr3 task and model
aq_T <- TaskRegr$new(id = "aq", backend = aq, target = "Ozone")
aqLrn <- lrn("regr.ranger", importance = "permutation")
aq_M <- aqLrn$train(aq_T)
imp <- aq_M$importance()
imp[intersect(aq_T$backend$colnames, names(imp))]
我想知道如何重新排序从 'mlr3' 训练模型产生的特征的重要性以匹配来自 task$feature_names
的特征名称的顺序?例如,如果我像这样从 mlr3
创建一个 task
和模型:
#Get data
aq <- data.frame(airquality)
aq <- na.omit(aq)
# Create mlr3 task and model
aq_T = TaskRegr$new(id = "aq", backend = aq, target = "Ozone")
aqLrn = lrn("regr.ranger", importance = "permutation")
aq_M <- aqLrn$train(aq_T)
然后我查看了特征名称和重要性值,结果如下:
name <- aq_T$feature_names #task feature names
imp <- aq_M$importance(). #models importance values
name
imp
> name
[1] "Solar.R" "Wind" "Temp" "Month" "Day"
> imp
Temp Wind Solar.R Month Day
597.43488 455.69392 112.31195 30.28683 21.80924
重要性值按从高到低的顺序排列。但我想知道是否可以重新排序 imp
值以匹配 name
(在上例中)给出的特征名称的顺序。
看一下 name
和 imp
的结构告诉我:
str(name)
str(imp)
> str(name)
chr [1:5] "Solar.R" "Wind" "Temp" "Month" "Day"
> str(imp)
Named num [1:5] 597.4 455.7 112.3 30.3 21.8
- attr(*, "names")= chr [1:5] "Temp" "Wind" "Solar.R" "Month" ...
我找到了一种重新排序命名数字 imp
的方法。这成功了:
imp[order(factor(names(imp), levels = name))]
请注意,$fature_names
不能保证与基础数据中的顺序相同。因此,如果您想确保顺序与数据中的顺序相同,那么您可以执行以下操作:
library(mlr3)
library(mlr3learners)
#Get data
aq <- data.frame(airquality)
aq <- na.omit(aq)
# Create mlr3 task and model
aq_T <- TaskRegr$new(id = "aq", backend = aq, target = "Ozone")
aqLrn <- lrn("regr.ranger", importance = "permutation")
aq_M <- aqLrn$train(aq_T)
imp <- aq_M$importance()
imp[intersect(aq_T$backend$colnames, names(imp))]