Answers:
梯度增强树使用CART树(在标准设置中,由其作者提出)。CART树也用于随机森林。@ user777的说法是正确的,RF树通过对平均值的插补,粗略的平均/模式,或者基于接近度的平均/模式来处理缺失值。这些方法由Breiman和Cutler提出,并用于RF。这是作者的参考,缺少训练集中的值。
但是,可以使用其他类型的决策树构建GBM或RF。CART的通常替代品是Quinlan提出的C4.5。在C4.5中,缺失值不会替换为数据集。取而代之的是,所计算的杂质函数通过用缺失值的比率对杂质分数进行惩罚来考虑缺失值。在测试集上,对具有缺失值的测试的节点中的评估,将为每个子节点构建预测,然后再进行汇总(通过加权)。
现在,在许多实现中,使用C4.5代替CART。主要原因是要避免昂贵的计算(CART具有更严格的统计方法,需要更多的计算),结果似乎相似,生成的树通常较小(因为CART是二进制的,而C4.5不是)。我知道Weka使用这种方法。我不知道其他图书馆,但我希望这不是一个单一的情况。如果您的GBM实施就是这种情况,那么这将是一个答案。
“ [RF]不处理缺失值的理论原因是什么?梯度提升机,回归树处理缺失值。为什么随机森林不这样做?”
RF 确实处理缺失值,只是与CART和其他类似的决策树算法不同。User777正确描述了RF处理缺失数据的两种方法(中位数插补和/或基于接近度的度量),而Frank Harrell正确描述了CART(替代分割)中缺失值的处理方式。有关更多信息,请参见有关缺少CART(或FOSS表亲RPART)和RF的数据处理的链接。
恕我直言,您的实际问题的答案已在Ishwaran等人2008年发表的题为《随机生存的森林》的文章中明确涵盖。对于RF为什么不以与CART或类似的单一决策树分类器相同的方式处理丢失的数据,它们提供了以下合理的解释:
“虽然代理分割对树木效果很好,但该方法可能不适用于森林。速度是一个问题。找到代理分割是计算密集型的,并且在种植大量树木时可能不可行,尤其是对于树木使用的完全饱和树木而言此外,代理分割在森林范式中甚至没有意义,RF在拆分节点时随机选择变量,因此节点内的变量可能不相关,并且可能不存在合理的代理分割。代理拆分会更改变量的解释,从而影响诸如[变量重要性]等度量。
由于这些原因,RF需要采用不同的策略。”
顺便说一句,但是对我来说,这使那些声称RF使用CART模型集合的人产生了疑问。我已经在许多文章中看到了这种说法,但是我从未见过这样的陈述源自RF上的任何权威文章。首先,RF中的树是在不修剪的情况下生长的,这在构建CART模型时通常不是标准方法。另一个原因是您在问题中提到的一个原因:CART和其他决策树集合处理缺失值,而[原始] RF不能,至少在内部不像CART那样。
考虑到这些注意事项,我想您可以说RF使用了一系列类似于CART的决策树(即,一堆未修剪的树,已增长到最大程度,无法通过代理拆分来处理丢失的数据)。也许这是那些点点语义上的差异之一,但我认为这是值得注意的。
编辑:在我的旁注中,这与所问的实际问题无关,我说:“我从未见过此类声明源自RF上的任何权威文本”。事实证明,Breiman DID特别声明在原始RF算法中使用了CART决策树:
“具有随机特征的最简单的随机森林是通过在每个节点上随机选择一小组输入变量进行拆分而形成的。使用CART方法将树生长至最大大小,并且不修剪。” [我的重点]
资料来源:《随机森林》第 9页。布莱曼(2001)
但是,我仍然(尽管更加不稳定)仍然认为这些是类似于CART的决策树,因为它们是经过修剪而生长的,而CART通常永远不会在这种配置下运行,因为它几乎肯定会过分适合您的数据(因此首先要修剪)。
随机森林确实会处理丢失的数据,并且有两种不同的方法来处理:
1)不推论缺失数据,但提供推论。2)估算数据。然后,将推算数据用于推断。
这两种方法都在我的R包randomForestSRC (与Udaya Kogalur共同编写)中实现。首先,重要的是要记住,因为随机森林采用随机特征选择,所以单棵树木(CART等)使用的传统丢失数据方法不适用。这一点在Ishwaran等人的论文中已经提出。(2008),“任意生存的森林”,应用统计年鉴,2,3,其中一位评论者很好地表达了自己的观点。
方法(1)是“即时插补”(OTFI)方法。在拆分节点之前,通过从不丢失袋中数据中随机抽取值来估算变量的缺失数据。该估算数据的目的是,在节点被拆分为缺少数据的变量的情况下,可以将案例分配给子节点。但是,推算数据不用于计算仅使用非丢失数据的拆分统计信息。节点拆分后,归因数据会丢失,并且将重复执行此过程,直到到达终端节点为止。OTFI保留了袋装数据的完整性,因此,诸如可变重要性(VIMP)之类的性能值仍然没有偏见。OTFI算法在Ishwaran等人(2008)中进行了描述,并在退休的randomSurvivalForest包中实现,
方法(2)使用randomForestSRC中的“归因”函数实现。提供用于插补数据的无监督,随机和多元拆分方法。例如,多元分裂概括了非常成功的missForest插补法(Stekhoven&BUHLMANN(2012),“MissForest-非参数缺失值插补为混合类型的数据”,生物信息学,28,1)。在缺少数据的情况下调用归因函数将返回归因数据帧,可以使用主目录林函数“ rfsrc”将其拟合。
2017年与Fei Tang在“随机森林缺失数据算法”一文中描述了使用“ impute”实现的不同森林缺失数据算法的详细比较。我建议查阅randomForestSRC的“ rfsrc”和“ impute”帮助文件,以获取有关插补和OTFI的更多详细信息。
根据Leo Breiman和Adele Cutler的发明,Random Forest有两种处理缺失值的方法。
第一个是快速而又肮脏的:它只是填充连续变量的中值,或者按类填充最常见的非缺失值。
第二种方法是填充缺失值,然后运行RF,然后对于缺失的连续值,RF计算缺失值的近似加权平均值。然后,此过程重复几次。然后,使用RF输入的数据集在最后一次训练模型。
我不建议使用中值等,而是强烈建议您查看missRanger软件包(当前在Github上开发)或R软件包missForest)。这两个软件包都使用随机森林首先使用类似于通过链式方程式(MICE)进行多次插补的方法插补数据。这将是合适的插补方法,因为它与您的实际分析模型非常接近。然后,您可以使用所有数据,而不必担心由于缺少观测值而删除单个行。此外,估算值将比仅选择中位数或众数更为现实。
您可以仅使用一个填充的估算数据集进行分析,但是将不确定性合并到缺失值中的最佳方法是运行这些估算方法的多次运行,然后在每个结果数据集上估算模型(即,多个估算),然后使用Rubin规则合并估算值(请参见R包mitools)。
对于CART,您可以应用属性缺失(MIA)方法。也就是说,对于分类预测变量,您会将“缺失”编码为单独的类别。对于数字预测变量,您将为每个具有缺失的变量创建两个新变量:一个将缺失编码为-Inf,一个将缺失编码为+ Inf。然后,像往常一样将随机森林函数应用于数据。
MIA的优点:1)计算便宜,2)不能像多重插补那样产生多个数据集并因此进行建模(缺失插补数据文献通常认为一个插补数据集是不够的),3)不需要您可以选择统计方法和/或模型来估算数据。
函数ctree()
和cforest()
来自partykit包的函数允许通过传递ctree_control(MIA = TRUE)
其control
参数来应用MIA 。
杰罗姆·弗里德曼(Jerome Friedman)的RuleFit程序似乎使用MIA处理缺失,请参阅https://statweb.stanford.edu/~jhf/r-rulefit/rulefit3/RuleFit_help.html#xmiss。
MIA方法的描述可以在Twala等人的文章中找到。(2008):
Twala,BETH,Jones,MC和Hand,DJ(2008)。处理决策树中缺失数据的好方法。模式识别字母,29(7),950-956。
party
R包中处理。一个博客文章在这里:exegetic.biz/blog/2013/05/...