0

我想知道如何重新排序从“mlr3”训练模型产生的特征的重要性,以匹配特征名称的顺序task$feature_names?例如,如果我像这样创建一个task和模型mlr3

#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

看看两者的结构nameimp告诉我:

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" ...
4

2 回答 2

0

我想出了一种重新排序命名 numeric 的方法imp。这成功了:

imp[order(factor(names(imp), levels = name))]
于 2020-07-12T18:31:18.913 回答
0

请注意,$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))]
于 2020-07-13T08:46:50.927 回答