R gbm处理缺失值

scr*_*Owl 8 r missing-data na

有谁知道如何gbmR手柄缺失值?我似乎无法使用谷歌找到任何解释.

dav*_*alo 12

为了解释gbm对缺少预测变量的作用,让我们首先想象一个gbm对象的单个树.

假设你有一个gbm对象mygbm.使用pretty.gbm.tree(mygbm, i.tree=1)你可以可视化mygbm上的第一个树,例如:

  SplitVar SplitCodePred LeftNode RightNode MissingNode ErrorReduction Weight    Prediction
0       46  1.629728e+01        1         5           9      26.462908   1585 -4.396393e-06
1       45  1.850000e+01        2         3           4      11.363868    939 -4.370936e-04
2       -1  2.602236e-04       -1        -1          -1       0.000000    271  2.602236e-04
3       -1 -7.199873e-04       -1        -1          -1       0.000000    668 -7.199873e-04
4       -1 -4.370936e-04       -1        -1          -1       0.000000    939 -4.370936e-04
5       20  0.000000e+00        6         7           8       8.638042    646  6.245552e-04
6       -1  3.533436e-04       -1        -1          -1       0.000000    483  3.533436e-04
7       -1  1.428207e-03       -1        -1          -1       0.000000    163  1.428207e-03
8       -1  6.245552e-04       -1        -1          -1       0.000000    646  6.245552e-04
9       -1 -4.396393e-06       -1        -1          -1       0.000000   1585 -4.396393e-06
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅gbm文档.每行对应一个节点,第一个(未命名)列是节点号.我们看到每个节点都有一个左右节点(如果节点是叶子,则设置为-1).我们还看到每个节点都关联了一个MissingNode.

要在树下运行观察,我们从节点0开始.如果观察值在SplitVar= 46 上有缺失值,那么它将在树下发送到节点MissingNode= 9.对于这种观察,树的预测将是SplitCodePred= -4.396393e-06,这是在对节点零进行任何拆分之前树所具有的预测(对于节点零Prediction= -4.396393e-06).

其他节点和拆分变量的过程类似.


小智 5

它似乎将缺失值发送到每个树中的单独节点.如果您有一个名为"mygbm"的gbm对象,那么您将通过键入"pretty.gbm.tree(mygbm,i.tree = 1)"来看到,对于树中的每个拆分,都有一个LeftNode,一个RightNode和一个MissingNode.这意味着(假设你有interaction.depth = 1)每棵树将有3个终端节点(分裂的每一侧有1个节点,而缺少预测器的地方有一个节点).