基于随机森林的特征发现

1 方法实现
1.1 1维规则由1个feature构成,2维规则由2个features构成,4维及以上规则解释性较弱且过拟合风险大,不考虑,所以树的max depth设定为3(向下兼容,可以发现2维规则)
1.2 leaf node的sample size太小会不稳定,设定leaf node 最小sample size为30
1.3 决策树生成规则,必然要引入随机性,全样本全变量生成的树是固定的,我们在决策树的每一次分裂的时候只随机考虑部分features,数量为sqrt(总features数),重复此建树过程,尽可能发现足够多的规则,这个时候,不难想到,引入随机森林,但是随机森林自带bootstrap,需要先关闭随机森林的bootstrap,设定森林中1000颗树(根据features数和获取规则的重复程度具体调节),此时还需要添加一个超参,我们只关注存在leaf node的positive rate远高于total positive rate的树,当前样本total positive rate 9.5%,设定超参显示阈值为40%,返回的树中去掉一些难以解释的feature,如
逐步去掉后,重跑随机森林,获得一些规则如下:

两条规则的positive rate分别是40.6%和45.2%

2 VS sniffer
同样的数据集,最小sample size = 30,sniffer结果如下:

从图中不难看出,由于sniffer的机制原因,sniffer能发现规则的最高positive rate仅29%,而且sniffer对连续变量分箱后并不会尝试合并,往往会取到一个连续变量中间某段,如上图划线的1-4,2-4等,这导致规则解释性较弱

3 思考与改进
3.1 小结
通过暴力枚举求出最优解计算复杂度上是不现实的,sniffer仅搜索了部分枚举可能;"基于决策树(随机森林)的拒绝规则发现"方法每棵树是一种贪心搜索思想,引入森林进行足够多次的贪心搜索,采取feature sample增加各种组合出现的可能性,引入超参对森林中不符合要求的树进行"剪枝"(砍树),虽然也是搜索部分解空间,但遵循了一定搜索方向,我在实践中获得了高positive rate的组合
3.2 改进点
3.2.1 目前子树对于categorical features是数值编码后按照continuous variable进行split,这里可以借鉴lightgbm对categorical features的处理方法
3.2.2 将连续变量中缺失值单独识别为一组
3.2.3 该方法仍然是部分解空间的搜索,有没有什么细节变化能进一步提高搜索的覆盖程度和有效性?

留言

熱門文章