【问题标题】:How to get the vip package to work with an mlr model in R?如何让 vip 包与 R 中的 mlr 模型一起使用?
【发布时间】:2020-06-16 23:21:39
【问题描述】:

我不确定我在这里做错了什么......但我正在尝试使用mlr 包创建的模型和vip 中的R 包。具体来说,我试图使用vip 包中的vint 函数来计算变量之间的双向交互强度。这基本上是我正在做的事情:

library(mlr)
library(vip)
library(randomForest)


# Get example data
airQ <- data.frame(airquality)
airQ <- na.omit(airQ)

# Set up mlr model
airQ_task  <- makeRegrTask(data = airQ, target = "Ozone")
airQ_lrn <- makeLearner("regr.randomForest")
airQ_mod <- train(airQ_lrn, airQ_task)

# For comparison set up randomForest model
aqFit <- randomForest(Ozone~., data = airQ)

# Use vip to get variable interaction
vint(aqFit, feature_names = c("Solar.R", "Temp")) # rf model works
vint(airQ_mod, feature_names = c("Solar.R", "Temp")) # mlr model does not work

使用上面的代码,vint 函数适用于 randomForest 模型,但不适用于 mlr 模型。相反,对于 mlr 模型,它会抛出一个错误:

get_training_data.default(object) 中的错误:训练数据 无法从对象中提取。请提供原始培训 在对partial 的调用中使用train 参数的数据。

我认为vip 包最近更新了,它们改变了一些功能的工作方式......但我不知道我在这里做错了什么。我也知道vip 包确实接受mlr 模型,因为如果我尝试使用vip 变量重要性函数,一切正常吗?例如,

vip(airQ_mod)

关于如何使vint 函数与mlr 一起工作的任何建议?

【问题讨论】:

    标签: r mlr


    【解决方案1】:

    mlr 返回一个包装好的模型;你需要得到底层的 R 模型。为此提供了getLearnerModel() 函数:

    vint(getLearnerModel(airQ_mod), feature_names = c("Solar.R", "Temp"))
    

    ...然而,pdp 包(vip 内部使用)做了一些“魔术”来获取原始训练数据,这与 mlr 训练其模型的方式不兼容。恐怕你必须明确地提供训练数据,正如错误消息所建议的那样。

    【讨论】:

    • 抱歉,这需要深入研究各种包的源代码——不幸的是,检索数据的方式与 mlr 训练模型的方式不兼容。
    • 哦,有趣....这回答了!感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多