问题描述
因此,我试图将flashlight
包用于虹膜数据。 flashlight
提供的功能之一是计算称为light_interaction
的变量之间的交互。如果我使用light_interaction
模型可以使lm
正常工作,但是如果我使用mlr3
创建模型,则无法正常工作[旁注:如果我使用以下方法创建回归模型, mlr3
,它与手电筒交互功能完美配合使用...我只是无法使其用于分类...而且我需要手电筒才能将mlr3与我的包装配合使用]。在下面的代码中,我显示了一个与lm
模型一起使用的示例...以及它与mlr3
不一起使用的示例...我在做错什么吗?
lm
有效的模型示例:
library(flashlight)
fit <- lm(Sepal.Length ~ .,data = iris)
x <- flashlight(model = fit,label = " ",data = iris,y = "Species")
light_interaction(x,pairwise = TRUE,type = "H",grid_size = 5,normalize = F)
mlr3
模型无效:
library(mlr3)
library(mlr3learners)
# mlr3 TASK
bc_T = TaskClassif$new(id = "dat",backend = iris,target = "Species")
# learner
lrn = lrn("classif.ranger")
# model
bc_M <- lrn$train(bc_T)
x <- flashlight(model = bc_M,pairwise = TRUE) # this line creates an error
这会抛出一条错误消息:
rowsum.default(xx * ww,gg)中的错误:“ x”必须为数字 另外:警告消息:在Ops.factor(xx,ww)中:“ *”没有意义 因素分析
解决方法
mlr3使用R6,并且拟合的模型存储在$model
插槽中。
我不知道flashlight::light_interaction()
的作用,但是就您的错误而言,它很简单
library(mlr3)
library(mlr3learners)
library(flashlight)
bc_T <- TaskClassif$new(id = "dat",backend = iris,target = "Species")
lrn <- lrn("classif.ranger")
bc_M <- lrn$train(bc_T)
x <- flashlight(model = bc_M$model,label = " ",data = iris,y = "Species")
print(x)
#>
#> Flashlight
#>
#> Model: Yes
#> y: Species
#> w: No
#> by: No
#> data dim: 150 5
#> predict_fct default: TRUE
#> linkinv default: TRUE
#> metrics: rmse
#> SHAP: No
由reprex package(v0.3.0)于2020-11-12创建