(R) 从 gbm.step 绘制树状图 BRT 模型

Posted

技术标签:

【中文标题】(R) 从 gbm.step 绘制树状图 BRT 模型【英文标题】:(R) Plot dendrograms BRT models from gbm.step 【发布时间】:2015-03-17 12:28:04 【问题描述】:

(之前发here,发错子了,信息不够,已关闭,我编辑了,编辑好像被删除了,帖子被送进了炼狱,抱歉再次发帖,我不知道之前的帖子能不能/应该复活)

在 R 中,我使用 dismo 运行了一些 Boosted Regression Trees,即广义 Boosting Models,它使用 gbm。将人们带到我目前所在位置的可重现示例:

library(dismo); data(Anguilla_train)
angaus.tc5.lr01 <- gbm.step(data=Anguilla_train, gbm.x = 3:13, gbm.y = 2, family = "bernoulli", tree.complexity = 5, learning.rate = 0.01, bag.fraction = 0.5)

(来自here)。这将为您留下 gbm 模型对象“angaus.tc5.lr01”。 我想根据 De'ath 2007 生成分裂(折叠?)的树状图,即绘制树木(见图,左窗格)。但是:De'ath 的图是单个回归树,而不是增强回归树,它是潜在数千棵树的平均值,每棵树都使用从数据集中随机抽取的不同数据集。

用户 ckluss 好心地建议了 rpart,但是这需要由 rpart 生成的模型,因此不适用于 gbm.step 生成的 BRT/GBM。来自rpart.plotprp 也是如此。

pretty.gbm.tree in gbm 为选择的任何一棵树提取信息矩阵(第一个尝试pretty.gbm.tree(angaus.tc5.lr01, i.tree=1))所以我想知道这是否可能是成功的可行途径?例如。通过编写一些脚本,使用所有可用的树创建一个平均树矩阵,然后将其转换为树状对象,可能使用一些方法here。

人们提出了不同程度的类似问题,似乎在网上其他地方都没有成功。 BRT 模型经常被描述为“黑匣子”,因此可能普遍的看法是,人们不应该需要/能够/费心去探究它们并展示它们的内部过程。

如果有人对 BRT/gbm 有足够的了解并有任何想法,我们将不胜感激。 谢谢。

【问题讨论】:

问题是没有“平均”树,就像随机森林没有平均树一样。例如,如果第一个节点一半时间在数值变量上分支,另一半时间在分类变量上分支怎么办?如果一些分类分支在域 A,B,C 和其他 C,D,E 上怎么办?没有办法做到这一点。 【参考方案1】:

正如您所指出的,对决策树集成的解释比解释单个树要困难得多。在几何上,您可以将决策树集成视为复杂的高维曲面的近似值。目标是找到有助于近似的变量,并可视化它们的影响。

解释集成的基本思想不是获得“平均”树,或获得任何单个树的图,而是可视化变量的“平均”效果。在文献中,这是预测变量的“部分依赖”——它的效果是使其他变量保持不变。 “部分依赖”是如何估计的,描述起来有点复杂,但它是模型隐含的预测,仅允许预测变量 j 变化,用于观察 i。然后对所有 i 观察结果进行平均预测。有关血腥细节,请参阅Friedman & Popescue (2008)。

然后,您可以根据预测变量的实际值绘制预测变量的估计依赖性(或我所说的“隐含模型”)效应。这样就可以看到模型隐含的预测器效果了。

好消息是在dismo 中可以很容易地获得这样的图。请参阅gbm.plot 了解单个预测变量,以及 gbm.perspec 了解涉及两个预测变量的透视图。小插图还提供了示例。为了进一步帮助解释模型,gbm.interactions 提供了一种检测可能的 2 或 3 向交互的方法。有关详细信息,请参阅this question。

【讨论】:

感谢帕特里克。我的论文中已经有了 gbm.plots 以及我认为足够的其他各种图形,但是审稿人要求提供树形图......即使这个问题没有真正意义!我最后问 Jane Elith 她是怎么做到的,她说她只是编造了其中一个并以此为例,因为这个请求没有意义,但人们直觉地要求它!嘿嗬,现在已经发布了;) 这是一个非常有趣的问题,我也想做同样的事情。但是,现在我明白现在要去做了。你能告诉我如何开发一棵单独的树吗?谢谢

以上是关于(R) 从 gbm.step 绘制树状图 BRT 模型的主要内容,如果未能解决你的问题,请参考以下文章

绘制聚类热图(带树状图)/Python

来自预制链接矩阵的树状图

使用凝聚算法绘制树状图

R语言绘图——层次聚类图及树状图添加side bar

从 R 中的切割树状图中提取标签成员资格/分类(即:树状图的 cutree 函数)

添加下拉菜单以绘制树状图