[Random Forest]有关随机森林对于missing value和imbalance class数据的处理优势

想问一下老师随机森林或者说CART对于missing value和imbalance class数据的处理优势是什么,可以是和ID3或者是C4.5做对比,也可以和普通的logistic regression做对比。之前面试被问到过这题,但是结合一些看到的blog感觉大家对于这两点的总结都不太一样。

当数据中存在missing value问题或者imbalance class问题的时候,如果我们不做特殊处理(比如missing value补齐,或者 class resample),那么random forest model的预测效果在大部分情况下会比decision tree好。主要原因就是Random forest model里面对data和feature的sampling操作。

由于RF里面每一棵树实际实用的feature和数据都不一样,导致missing value问题在RF里单棵树的影响较弱。但如果遇到missing value,那么RF里的树对missing value的处理方法与经典decision tree的处理方法区别不大。虽然不同的构造方法使用的metric不同 (e.g. ID3, gini impurity, etc),但是对于missing value问题而言,关键在于如何在当前feature分支的时候处理missing value的问题,这与metric的定义的关系不大。大部分情况下我们都是会做missing value补齐。如果不去补齐的话,可以在有missing value的时候让这一行数据进入这个feature的后续所有分支,最后如果多个叶子节点都有这个数据的话,选择概率最大的一个即可。但这种处理方法不是RF特有的。所有decision tree都是用一样的做法。

对于imbalance class,你可以参考着两篇research paper [1 ][2 ]。从实际经验来, “RF also suffer from the curse of learning from an extremely imbalanced training data set.” 虽然RF做了data sampling, 但是imbalance class在每一个tree里面分布还是imbalance的,只不过不同的tree会有一些由于随机性带来的区别而已。因此我认为RF并不能很好地解决imbalance class问题,只不过它比decision tree好一点而已。上面这两篇paper也是这个观点。如果一定要用RF处理imbalance class问题,除了resampling,也可以用weighted RF等改进方法。

老师我想follow up一下关于missing value的部分,你提到的下面这句话

如果不去补齐的话,可以在有missing value的时候让这一行数据进入这个feature的后续所有分支,最后如果多个叶子节点都有这个数据的话,选择概率最大的一个即可。

是否对应CART中使用surrogate split方法?是否可以举一个更具体的例子?

不一样。你说的surrogate split也是一种decision tree 处理missing value的方法,它的基本思想是,当有missing value的时候,用与这个missing value feature最相似的feature来代替它进行分支判定。我这里说的做法是另一种 (我目前无法找到英文原版出处的) 做法,即在有missing value的时候,把这个数据放入下一层的所有分支,并赋予它们权重。这个权重是对应阶段中training data的个数。之后重复上述操作,直到到达叶子节点。最后这一行数据可能存在于多个叶子节点中,那么选择权重最大的节点作为最终节点。我说的这个方法可能不如surrogate split更常见,面试时如果遇到讨论decision tree missing value的处理问题,讲surrogate split也可以。不过它的内容比较复杂,我们在课上也不会涉及到。