随机森林(Random Forest)
随机森林是树形分类器的一种,也是集成学习中的典型算法。
如果了解决策树,就可以知道决策树可以去做一些分类或者回归的工作。既然被称作“森林”,那么就是指把好多好多棵决策树放在一起,为一个机器学习问题服务。而“随机”,就是指每棵树所用的训练集,所分析的特征都是随机的,这就是随机森林算法的大致思想。
看起来还是蛮简单的,并不!
随机
随机的过程分为两方面:第一是训练数据随机抽取;第二是训练样本随机抽取。
假设样本集合中有 $m$ 个样本,随机森林中的每一棵树都需要在样本集中有放回抽取(Bootstrap Aggregation)$m$ 个样本,作为训练集。这样还能有差不多 $30\%$ 的样本没有被抽取,他们则被称作袋外样本。
至于为什么是 $30\%$ 左右,我们可以算一下:
假设有 $m$ 个样本,每一个样本有放回抽取,未被抽中的概率为 $1 - \frac 1 m$,那么如果抽 $m$ 次,都未被抽中的概率为
如果 $m$ 无限大,那么根据重要极限可以的计算出:
为什么使用有放回抽取这种抽样方式呢?
有放回抽样和无放回抽样一样,并不会对数据的分布产生差异,那你说有放回抽 $100$ 个和无放回抽样 $60$ 个有什么区别呢?
其实我也不知道,以下是自己的一些理解👇
首先可以确定的是,对于一棵树而言,有放回抽 $100$ 个和无放回抽 $60$ 个所训练出的决策树可能是不一样的。对于有放回抽取,某些数据可能在决策树中占有较大的比重,让这个树有着自己的“特点”;而对于任意的两棵树而言,有放回抽取的两棵树的交叉数据会比无放回抽取的多,那么两棵树之间就会有更大的“共性”。既有相同,又有不同,多好!
当然,这都是我瞎说的👆。
随机森林中的每棵树的特征,也是需要随机选择的。从 $n$ 个特征中随机选出 $k$ 个,并且需要 $k\ll n$。将所选取的训练集与特征对每颗树进行训练,并且不需要进行剪枝。那么这棵树就是随机森林中的一员啦!🎉
森林
将我们训练完的所有的 $T$ 颗决策树并且放在一起,随机森林模型就形成啦。它们分别对一个分类问题进行独立的预测,最后将所有的预测结果进行汇总,得票多的结果就是最终的预测结果。
随即森林算法大概就是这样啦!
袋外错误率(Out of Bag-Error)
袋外错误率是评价随机森林的重要指标。如何计算带外错误率呢?通过上文可以知道,每棵树都有 $37\%$ 的样本没有被抽取,换个角度来说,对于某个样本 $x^{(i)}$,它在 $63\%$ 的树中作为训练样本,在 $37\%$ 的树中作为袋外样本。将这个样本在 袋外样本的树 组成的森林中进行预测,并用投票法得出结果。如果有 $m’$ 个预测错误,那么袋外错误率为
这个过程很类似于交叉验证。袋外错误率也可以作为该随机森林的评价指标。
特征重要度(Feature Importance)
随机森林可以通过修改修改某一特征值而对最后的结果进行比较来判断出哪些是优秀的特征,来进行特征选择,得到性能更优的森林。
不仅对整个森林有着袋外错误率这样一个评价指标,对每颗决策树,也有着类似袋外误差的概念(这里绕的很乱)。对于随机森林中的某一颗数据中随机抽有特征 $nj$ 的决策树 $t_i$ 而言,假设有袋外数据 $m\alpha$,决策树 $ti$ 预测错误的数据量记为 $m\alpha’$ ,$ti$ 对袋外数据集的预测错误率记为 $err{\text{OOB}i}$,那么有
对于特征 $nj$,将它替换为噪声值,再次进行训练,得到新的决策树 $t_i$ 的误差 $err{\text{OOB}ij}$。对每棵有特征 $n_j$ 的决策树都如此操作,就会的到最终的特征 $n_j$ 的重要度
观察上式可以得出 $FI$ 越小的特征,越没有用,占用资源还没啥提升,可以弃之不用。
关于集成学习
随机森林中运用到了很多的决策树,各个树群策群力,采用投票的方式,对数据进行分类。随机森林是集成学习的经典算法,集成学习中强学习器(随机森林)由很多弱学习器(决策树)组成。
剩下的到时候学完再说。