r - 如何将 pdp::partial 映射到嵌套的 randomForest 模型?
问题描述
我想将函数 pdp::partial 映射到嵌套的 randomForest 模型。然后,我将使用输出通过 facet_wrap() 为每个组绘制 3d 部分依赖图。将函数映射到模型时,我收到一个错误,即无法在训练数据中找到预测变量——但是当我检查 tibble 时它们就在那里,所以我不知道该怎么做。
library(tidyverse)
library(pdp)
library(randomForest)
data(boston)
glimpse(boston)
#Make groups, nest data by groups, apply random forest model to nested data
boston %>%
mutate(grp=ifelse(age<80, "young", "old"))%>%
nest(data= -grp)%>%
mutate(fit = map(data, ~ randomForest(cmedv ~ ., data = boston, importance = TRUE)))%>%
{.->>GrpModels}
#Map pdp::partial to fitted models for two predictor variables
GrpModels%>%
mutate(p=map2(fit,data, ~pdp::partial(fit,train=data, pred.var=c("lstat", "rm"))))%>%
unnest(p)%>%{.->>checkpdp}
错误:
mutate()
列有问题p
。我p = map2(...)
。x lstat, rm 在训练数据中找不到。
解决方案
这似乎可行,尽管我不确定为什么绘图与geom_tile()
我想的不太一样。我geom_point()
改用了。简而言之,我需要将 pred.var 作为一个列表,然后将三个输入(拟合、数据和预测变量)传递给pmap
.
GrpModels %>%
mutate(preds = data.table::transpose(as.list(c('lstat','rm')))) %>%
mutate(p = pmap(list(fit, data, preds),
.f = ~pdp::partial(object=..1, train = ..2,
pred.var = ..3)))%>%
select(-data,-fit,-preds)%>%
unnest_wider(p)%>%
unnest(c(yhat,lstat,rm))%>%{.->>checkpdp}%>%
ggplot(.,aes(x=lstat,y=rm,color=yhat))+
#geom_tile()+
geom_point(shape=15, size=2)+
facet_wrap(~grp, scales='free')
推荐阅读
- javascript - Javascript 从浏览器打开新选项卡/窗口,并使用 javascript 在选项卡内加载不同的内容
- dreamweaver - 如何从显示扩展属性的文件中删除锁定
- javascript - 如何在 Wasm 中制作协程?
- c# - 使用 GuidRepresentation.Standard GuidSerializer 执行查询时 MongoDB C# 驱动程序出现问题
- .net - 即使从 oracle 网站安装 ODP.NET,TNSNAMES.ORA 文件也丢失
- tensorflow - 通过 TensorFlow 中的注意力机制获取 Top-K 输入向量
- javascript - 为什么数组循环在 Python 中可以删除重复的条目,而 JS 不行?
- javascript - 尝试用 JS 构建一个计算器
- java - 如何在 JPA OneToOne 映射中包含不匹配的 id
- php - 在 PHP 中出现错误“找不到类 'DOMDocument'”