所以我的问题是,当我有一个数据框,然后使用mlr3
'stask$feature_names
函数创建一个任务时,它会以字母顺序或(某种)不正确的数字顺序返回变量,而我想保持特征名称的顺序出现在数据框中。我在下面提供了两个例子来说明我的意思。第一个示例是(有点)数字示例,第二个示例是字母顺序。
示例 1(数字):
library(mlr3)
# Set Values
n <- 10 # No of rows
p <- 10 # No of cols
e <- rnorm(n) # used for noise
b <- 10
# Create matrix of values
xValues <- matrix(rnorm(n*p), nrow=n) # Create matrix wt 3 columns
colnames(xValues)<- paste0(1:p) # Name columns
df <- data.frame(xValues) # Create dataframe
# Equation
y <- (b + b*df$X1 - b*df$X2 + (b*df$X3)*(b*df$X2) + e) # Equation
# Adding y to df
df$y <- y
# mlr3 TASK
test_T = TaskRegr$new(id = "test", backend = df, target = "y")
test_T$feature_names
因此,在上面的示例中,我创建了一些数据(即 X1 到 X11),然后创建了一个mlr3
任务。但是,当我运行test_T$feature_names
它时,它会返回:
[1] "X1" "X10" "X2" "X3" "X4" "X5" "X6" "X7" "X8" "X9"
因此,由于 X10 中的前导 1,mlr3
认为 X10 应该出现在 X2 之前。
示例 2(按字母顺序):
library(mlr3)
a <-rnorm(10)
b <-rnorm(10)
ab <-rnorm(10)
ba <-rnorm(10)
c <-rnorm(10)
myData <- data.frame(a, b, ab, ba, c)
t_T = TaskRegr$new(id = "test", backend = myData, target = "c")
t_T$feature_names
所以这一次,我的数据框中的变量顺序用myData
(即a,b,ab,ba,c)来描述。但是,当我运行时t_T$feature_names
,它会返回:
[1] "a" "ab" "b" "ba"
它已将顺序更改为按字母顺序排列。我不确定这是故意还是疏忽mlr3
......但是无论如何从mlr3
创建的任务中提取特征名称,它不会重新排序变量名称?
我仍然停留在这个问题上,如果有人有任何建议吗?
编辑:我添加了一个(糟糕的)图形示例,只是为了说明问题。因此,从数值示例继续,如果我想创建一个热图样式图,但使用$feature_names
它来获取特征名称,我最终会得到这样的结果:
nam <- test_T$feature_names
var_int2 = df %>% as_tibble %>%
mutate(var_num1 = 1:length(nam)) %>%
pivot_longer(cols = 1:length(nam),
values_to = 'values') %>%
mutate(var_num2 = rep(1:length(nam), length(nam)),
alpha_imp = as.integer(var_num1 == var_num2),
alpha_int = 1 - alpha_imp)
p <- ggplot(data = var_int2,
mapping = aes(x = var_num1, y = var_num2)) +
scale_x_continuous(breaks = 1:length(nam), labels = nam, position = "top") +
scale_y_reverse(breaks = 1:length(nam), labels = nam) +
geom_raster(aes(fill = y),
alpha = var_int2$alpha_int)
p
可以看出,它在 X1 和 X2 之间绘制 X10。理想情况下,我想保持特征出现在数据框中的顺序。我知道可能还有其他方法可以重新排序绘图,但是,我依赖于$feature_names
我创建的大型绘图功能。最初,我使用的是getTaskFeatureNames(task)
from mlr
,它将功能名称保持在原始顺序中......但我最近更新为mlr3
,这似乎改变了顺序。