如何使随机森林树投票十进制而不是二进制

机器算法验证 r 机器学习 分类 随机森林
2022-03-26 09:09:47

我的问题是关于二元分类,比如区分好客户和坏客户,而不是回归或非二元分类。在这种情况下,随机森林是分类树的集合。对于每次观察,每棵树都投一个“是”或“否”,所有树的平均投票就是最终的森林概率。

我的问题是关于修改底层树的行为:我们如何修改 randomForest 函数(R 的 randomForest 包),以便每棵树投票一个十进制而不是二进制是/否。为了更好地理解我所说的十进制,让我们考虑一下决策树是如何工作的。

一棵成熟的决策树在其终端节点中有 1 个好实例或 1 个坏实例。假设我将终端节点大小限制为 100。那么终端节​​点将如下所示:

节点 1 = 80 坏,20 好
Node2 = 51 坏,49 好
Node3 = 10 坏,90 好

请注意,即使 Node1 和 Node2 投票“差”,它们的“差的强度”也大不相同。这就是我所追求的。不是让他们产生 1 或 0(这是默认行为),而是可以修改 R 包,以便他们投票 80/100、51/100、10/100 等?

3个回答

这是一个微妙的点,因软件而异。我知道有两种主要方法:

  1. 二进制叶子 - 每个叶子都以多数票投票。这就是randomForestR 中的工作原理,即使在使用时也是如此predict(..., type="prob")
  2. 比例叶子 - 每个叶子返回属于每个类的训练样本的比例。这是如何sklearn.ensemble.RandomForestClassifier.predict_proba工作的。在另一个答案中,@usεr11852 指出 R 的ranger包也提供了这个功能。令人高兴的是,我可以证明,从我有限的使用情况来看,ranger它也比randomForest.

我不认为有一种简单的方法可以randomForest使用比例叶法,因为 R 软件实际上只是 C 和 FORTRAN 程序的挂钩。除非你喜欢修改别人的代码,否则你要么自己写,要么找其他软件实现。

完全有可能种植“概率森林”。Malley 等人的方法论。(2012 年)“概率机器:使用非参数学习机器的一致概率估计。 ”概述了这是如何完成的,以及它与标准随机森林实现的比较。此外,优秀的R 包Ranger已经实现了这个功能;只需probability = TRUE在调用函数时设置ranger.

只需使用predict.randomForest(..., type="prob"). 你在做一件好事