随机森林------random forest

决策树
先说下决策树吧,具体的算法什么的就不讲了,很基本的东西,网上有很多。主要总结下三种特征选择的优缺点。

ID3 基于信息增益做特征选择,所以很容易受到某一特征特征值数量的干扰。信息增益会偏向于属性值多的那一个属性。

所以C4.5采用了信息率作为特征选择的标准。信息率就是在信息增益的基础上除以一个值,这个值与属性值的数量有关,属性值的数量越多该值越大,那么信息率也就越小。那么信息率就偏向于选择那些特征值较少的属性,所以我们用增益率做选择的时候,一般都是先选出几个信息增益较高的属性,在用信息率做选择。

随机森林

森林是什么,就是很多棵树,所以很明白了随机森林就是要用很多棵树来做分类。

那么为什么要用很多棵树呢。因为一棵树很容易发生过拟合,决策树对数据的扰动很敏感,尤其是完全长成的一棵树,所以我们希望用很多颗不同的树同时决策,来解决过拟合的问题。

那么如何使用多颗不同的树呢,这就是随机的思想,这里就用到了bagging。

bagging 说了什么,对于一份数据集,我们可以通过bootstrap来抽样,然后可以用抽样得来的不同数据集进行训练得到不同的树,bootstrap抽样其实就相当于对数据加了权重,这样训练出来的树的关注点就不同了。

在一个我们在训练树的时候,不再是用数据的所有属性来进行分支,而是随机的选择一些属性出来。这又加大了扰动,使得树变得更加的不同。

当然随机的选择属性相当于对原属性在原来的方向上做一个映射 ϕ(x) ,那么这个映射我们还可以做得更加的不同,我们的映射可以是原来一些特征的线性组合,这样我们的分类就变的更加不同了,以前每一次对数据集的切分都是垂直他的维度的。现在变成线性的了。后面会有例子。

随机森林------random forest_第1张图片

通过这种随机的扰动,让我们训练出了不同的决策树,这就是随机森林。

oob–out of bag

什么是oob,我们用bootstrap抽样的时候,如果抽样后的数据量要与之前的相等,那么最多有66.6%左右的数据会被选择,也就是说还有大概三分之一的数据是没有被用到的,那么没有被用到的数据可以干什么,可以用来验证我们学习的模型怎么样,从而调整参数。

那么假如我们要训练N棵树,就需要N次的bootstrap,那么对于一条数据 (xn,yn) ,他可能在训练第一颗树的时候被用到了,训练第二颗树的时候就没有被用到,我们看下图。

随机森林------random forest_第2张图片

那么这样,对于没有用到数据 (xn,yn) 的那些树来说,这些树组合起来作为 G ,我们就可以用这条数据来估计 G 的性能好坏。然后对于每一条记录我们都可以估计一个对应的 G ,综合起来,就是对G的估计验证。

Eoob(G)=1Nn=1Nerr(yn,G)

特征选择
随机森林还有一个重要的应用是可以进行特征选择。

特征选择是什么意思,就是我们把多余的无用的特征去掉。比如我们预测一个人的信用状况,那貌似和她的身份证号没什么关系吧。

那么特征选择有什么优点呢,首先降低了维度计算变得简单,其次特征维度降低之后有助于避免过拟合。缺点也是有的,比如如果维度删除的不正确反倒容易造成过拟合。

那么有什么手段进行特征选择呢。

一种就是例如线性模型这样给每个维度计算一个权值,然后根据权值的绝对值大小进行排序,越高的说明这个属性越重要,当然也可以加入正则化项,这样有的不重要的属性的权重值就会降低。

再有一种就是用随机森林的方法了。

我们说我们如何衡量一个属性的重要性呢?

如果一个属性它是重要的,那么我们往这个属性中添加一些noise,整个分类器的性能就会降低。
importance(i) = performence(i) - performence^'(i)

那么怎么向第i个属性中添加noise,一种方法就是我们把整个数据中第i个属性的属性值全部打乱然后重新分配,这种方法叫做 permutation

那么我们可以把这种方法应用到随机森林上。为什么要用随机森林呢,是因为随机森林有一个oob这样一种验证方法。不用再找新的验证集了。

importance(i)= Eoob(D)Eoob(Dp)

这里我们没有在扰乱i属性之后重新训练一个树来测试,而是在数据集上做了手脚。
随机森林------random forest_第3张图片

我们在用 (xn,yn) 验证 G 的时候,对于里面的每个树 gt ,我们总会应用到这个数据的i属性,那么在这个时候,我们把这个属性值替换就好了。替换成什么呢,我们这里只在对于 gt 的oob那些数据的i属性值当中选择。

你可能感兴趣的:(机器学习,随机森林,特征选择,bootstrap,机器学习,算法)