前言
随机森林源于决策树 如果对决策树不了解的可以看看这篇: 如何构建一棵决策树
决策树的局限
决策树的构建要利用大量的数据,但是当用这个构建好的决策树来对一批新的数据进行分类时,决策树并不能灵活地处理这些新数据
随机森林综合了决策树简洁的特征,同时又具备灵活性,因此随机森林在精确性方面也得到了极大的提高
构造随机森林
第一步:构建bootstraped数据集
大小与原始数据集的一致 且允许样本重复出现多次(有放回的抽取) 下面的3和4就是重复的
第二步:构造单棵森林中的树
使用刚刚创建的boostraped数据集 随机选取几个特征 这里我们选了这两个 然后计算Gini系数确定哪个作为根节点
特征被用了以后就不能再用了 然后同样的从剩下的特征随机选部分来构造剩下的树(就是在构造决策树啦) 这里选择了Chest Pain和Weight
总结一下构造森林里的一棵树的过程
- 构建boostraped数据集
- 使用该数据集构造决策树(特征是随机选择的)
第三步:重复上述步骤构造森林
按上述方法做个多次 我们就能随机生成多棵决策树啦
如何用森林进行预测
我们得到了好多棵树 怎么用它来预测呢?
我们把数据集在每棵树都跑一遍结果 然后统计他们的结果(投票)
所以这个预测样本的最终预测结果为Yes
什么叫Bagging
多次抽取数据+投票统计确定总结果
评估森林的好坏
我们在确定boostraped数据集的时候允许样本出现多次 那肯定有几个样本是没有被用到的 (实际中验证样本不止一个的)
我们就把这些没用到的当做验证集 放到森林里跑 然后让他们投票 看看准确率怎么样
我们可以回过头改变一下构建boostraped数据集时用到的特征数量 看看准确率有没有提高
所以 构造森林的整个过程应该是这样迭代的
- 构建随机森林
- 评估森林
- 改变选取的特征数量重复第一步
通常来说,我们最初使用的变量数目为总变量数目的平方根,例如在前面的案例中,总变量数目是4,它的平方根是2,那么我们一开始就先使用2个变量作为每次运算时变量的数目,然后在这个数目上下进行调整
缺失值的处理
训练集中存在缺失值
先猜一个初始值
- 因为缺失的这个数据 label是No 我们就看所有label是No的样本 用出现次数最多的值(blocked=No出现最多次)来填充
- 数值特征也是一样只不过他填充的是平均值(125与210的平均值)
猜完之后就能构造boostraped数据集和森林了
我们用所有的样本来跑一遍森林 看看存在缺失值的那个样本和哪个样本到达叶子节点的路径一致
先跑第一棵树看看
样本3和4 的路径是一样的 所以我们用一个相似矩阵把它记录下来 (行列分别表示样本编号)
然后再跑第二棵树
发现样本234都是一样的路径
再次完善刚刚的矩阵
跑完森林里的所有树之后 矩阵最终长这样
处理一下 同除树的总数(这里是10)得到
这些值就是计算缺失值时不同样本的权重了
对于Block这个特征
除了缺失值外,在剩下的数据中,Yes的频率是1/3,No的频率是2/3
那么对Yes的加权频率计算为频率*权重
频率是上面计算出的1/3
权重往下看
患者2中Yes对应的近似值为0.1(矩阵4,2)然后除以患者4中所有近似值的和 得到Yes的权重是0.1
所以就是1/3*0.1=0.03
同理算出No的加权频率
算出来比Yes大 所以缺失值填充No
数值特征一样的处理
猜测的数据多次重复上述步骤(放到森林里跑 得到矩阵 用矩阵计算值) 直到数据不再怎么变化
验证集存在缺失值
先创建2个数据的复制 label各不同
用刚刚提到的初始化方法猜一下(相同label 出现次数多的特征值)
在森林跑一下看看谁的效果好
可见上面那个预测正确的多 所以我们就用Block=Yes来填充缺失值