我了解如何为数值预测变量(特征)的随机森林选择最佳分割。
然后对数值预测变量进行排序,然后为每个值计算基尼杂质或熵,并选择一个阈值,该阈值给出最佳分割。但是,由于没有特定的顺序,如何为分类预测器选择最佳拆分?
我了解如何为数值预测变量(特征)的随机森林选择最佳分割。
然后对数值预测变量进行排序,然后为每个值计算基尼杂质或熵,并选择一个阈值,该阈值给出最佳分割。但是,由于没有特定的顺序,如何为分类预测器选择最佳拆分?
通常的 vanilla 实现会尝试所有可能的类别组合。它将这些组合表示为一个整数,表示选择了哪些类别,哪些类别在拆分时被忽略了。它从左到右。例如,如果您有一个包含“Cat”、“Dog”、“Cow”、“Rat”类的变量,它将扫除可能的拆分,这意味着:
Dog vs the rest = 0100(记住,从左到右阅读)
猫与其他人 = 1000
自己,还
狗和猫对牛和老鼠 = 1100
牛和猫对狗和老鼠 = 1010
然后,如前所述,它使用整数来处理这个问题,以表示拆分:
library(R.utils)
> intToBin(12)
[1] "1100"
森林是树木的一种组合方法。所以我认为你的问题更多地基于关于分裂变量的树算法。有两种分类预测器,有序因子和非有序因子。
有序因子类似于数字变量,随机森林会找到切点,而后者使用另一种算法,如下所示。
它将尝试将因子的第一级作为拆分捕获并尝试拟合模型并找到具有损失函数的性能。然后尝试找到第二个级别并再次拟合并找到性能等等。最后,它根据最佳性能找到最佳拆分级别组合。
因此,您会发现树模型或随机森林模型需要更长的时间和内存来拟合因子而不是数字。
如果您的特征是分类的,我想到的第一个想法是为类别中的每个可能值创建一个二元特征。
因此,如果您有一个与“手机品牌”对应的特征,只能是“三星、苹果、HTC 或诺基亚”,我会将其表示为四个类别(1、0、0、0)、(0、1、 0, 0), (0, 0, 1, 0) 和 (0, 0, 0, 1)。这样,阈值将在每次拆分时在品牌或任何其他品牌之间进行选择,而不会产生奇怪的效果。
希望这可以帮助!
要么选择一些随机类别并使用给出最佳拆分的类别,要么选择一些类别的随机组合并使用给出最佳拆分的组合。
我认为您选择两种方法中的哪一种并不重要,因为在单个节点上拆分类别组合可以通过在多个节点上拆分单个类别来模拟。