随机森林
今天的分享内容是随机森林,在集成学习中虽然相对简单,但是简单不等于其不使用,其实简单以为便于解释和稳定。既然叫做随机森林,又是集成模型,那么他基础当然就是决策树。决策树好处就是易于构建、易于使用和解释。但是因为决策树的精准度不高这个问题,所以我们通常首选的预测工具不会考虑决策树。精准度问题主要反映在决策树可以在训练数据集有良好表现,因其泛化能力不强而在测试集上表现一般。
所以才有了随机森林,随机森林通过灵活方式将简单决策树组合在一起,这样做好处就是可以大大提供决策树的精准度。
- 构建随机深林
- 如何使用随机深林
- 评估随机深林精准度
构建自提升数据集
这里要简答说一下 bootstrap 这个词,通常在集成学习中翻译成自提升,翻译是依靠自己力量的;自己做的。可以理解为利用现有资源来进行改善优化。
Chest Pain | Good Blood Circ. | Blocked Arteries | Weight | Heart Diseas |
---|---|---|---|---|
No | No | No | 125 | No |
Yes | Yes | Yes | 180 | Yes |
Yes | Yes | No | 210 | No |
Yes | No | Yes | 167 | Yes |
今天我们用数据集有点过小,但是我们目的是将随机森林讲清楚,介于这个目的也够用了。
要创建与原始数据集样本数量相同的(自提升)数据集,只需从原始数据集中随机选择样本。值得注意的是我们随机选取是允许重复选取同一样本数据的。
Chest Pain | Good Blood Circ. | Blocked Arteries | Weight | Heart Diseas |
---|---|---|---|---|
Yes | Yes | Yes | 180 | Yes |
No | No | No | 125 | No |
Yes | No | Yes | 167 | Yes |
Yes | No | Yes | 167 | Yes |
上面数据就是我们从原有数据集中随机地有放回地抽取数据组成数据集,注意最后两个样本是一样的。这样就创建了自提升数据集,是不是很简单。
随机选取特征
这样我们就通过随机选取样本得到了一个新的数据集。那么现在就可以以使用自提升数据集来创建决策树,但在每个步骤中,也是通过随机一定数量数据的特征(也就是表的列)进行训练决策树。
在这个例子中,暂时只考虑两特征(列)数据作为,在构建决策树根节点时,我们通常做法是会考虑数据所有特征来计算他们的信息增益率或 Gini 指数的大小来作为选取哪个节点作为根节点依据。
而在随机森林中,我们不会考虑所有特征,只是先随机选取Good Blood Circ. 和Blocked Arteries 作为根节点的候选特征,我们假设 Good Blood Circulation 这个特征可以很好完成数据分类。
Chest Pain | Good Blood Circ. | Blocked Arteries | Weight | Heart Diseas |
---|---|---|---|---|
Yes | Yes | Yes | 180 | Yes |
No | No | No | 125 | No |
Yes | No | Yes | 167 | Yes |
Yes | Yes | No | 210 | No |
首先根根节点选择 good circ。发现这个特征可以很好将数据集进行分类得到很好的精准度,然后去掉已经使用过特征,在剩余的特征进行随机选取作为下一步的创建分支。
到现在大家已经看出来所谓随机就是
- 随机选取数据样
- 随机选取数据特征
来构建决策树分类器
重复之前步骤,基于在原有数据集上随机选取来创建一个新的自提升数据集,并在随机选取特征来构建新的决策树。
通过自提升样本,和随机选取特征的方法,我们可以创检很多不同的决策树。这样从另一方面我们可以通过不同数据增加了决策树的见识,也可以说是一种数据增强的方式。
随机森林的使用
我们得到新的样本,然后将数据丢到我们构建第一颗决策树,然后第一颗决策树给出 yes 的估计。然后重复上面步骤,每一个构建的决策树都会给出数据的估计。
Chest Pain | Good Blood Circ. | Blocked Arteries | Weight | Heart Diseas |
---|---|---|---|---|
Yes | No | No | 168 | ??? |
假设最终我们得到结果,就是每颗决策树给出估计如下表
Yes | No |
---|---|
5 | 1 |
随机林中的所有决策树会对新的样本进行预测,最后通过随机森林对分类进行投票,投票最多的预测可以作为随机森林做出的预测结果。
这样集成基于自提升数据创建分类器来以投票方式给出估计的模型叫做装袋算法(Bagging) ,Bagging 词源于 Boostrapping 和 aggregate
typically about 1/3 of the original data does not end up in the bootstrapped dataset
通常,大约1/3的原始数据不会在引导数据集中结束
Chest Pain | Good Blood Circ. | Blocked Arteries | Weight | Heart Diseas |
---|---|---|---|---|
Yes | Yes | No | 210 | No |
这条数据就没有出现在之前数据集中,那么这些没有被选中的样本叫做袋外数据(Out-Of-Bag),正是因为这些数据没有加入新数据集,我们便可以利用这些数据来验证刚刚创建好的决策树,也就是验证数据集�
最终我们可以通过是否正确估计这些袋外数据的分类的比例来作为衡量随机森林的精确度的一个依据,也叫做袋外误差(Out-Of-Bag Errro)
那么这些袋外误差仅是告诉随机森林预测的好坏还是不够的,我们希望这些数据有助于构建出精准度高决策树,所以我们可以通过通过袋外误差来决定我们随机选择特征数量,具体地说如何我们先随机选取 2 特征来构建决策树看一看袋外误差怎么样,然后再选取 3 特征来构建随机森林看看其袋外误差怎么样,最后根据结果来调整选取的数量。
参考 StatQuest