决策树
先说下决策树吧,具体的算法什么的就不讲了,很基本的东西,网上有很多。主要总结下三种特征选择的优缺点。
ID3 基于信息增益做特征选择,所以很容易受到某一特征特征值数量的干扰。信息增益会偏向于属性值多的那一个属性。
所以C4.5采用了信息率作为特征选择的标准。信息率就是在信息增益的基础上除以一个值,这个值与属性值的数量有关,属性值的数量越多该值越大,那么信息率也就越小。那么信息率就偏向于选择那些特征值较少的属性,所以我们用增益率做选择的时候,一般都是先选出几个信息增益较高的属性,在用信息率做选择。
随机森林
森林是什么,就是很多棵树,所以很明白了随机森林就是要用很多棵树来做分类。
那么为什么要用很多棵树呢。因为一棵树很容易发生过拟合,决策树对数据的扰动很敏感,尤其是完全长成的一棵树,所以我们希望用很多颗不同的树同时决策,来解决过拟合的问题。
那么如何使用多颗不同的树呢,这就是随机的思想,这里就用到了bagging。
bagging 说了什么,对于一份数据集,我们可以通过bootstrap来抽样,然后可以用抽样得来的不同数据集进行训练得到不同的树,bootstrap抽样其实就相当于对数据加了权重,这样训练出来的树的关注点就不同了。
在一个我们在训练树的时候,不再是用数据的所有属性来进行分支,而是随机的选择一些属性出来。这又加大了扰动,使得树变得更加的不同。
当然随机的选择属性相当于对原属性在原来的方向上做一个映射 ϕ(x) ,那么这个映射我们还可以做得更加的不同,我们的映射可以是原来一些特征的线性组合,这样我们的分类就变的更加不同了,以前每一次对数据集的切分都是垂直他的维度的。现在变成线性的了。后面会有例子。
通过这种随机的扰动,让我们训练出了不同的决策树,这就是随机森林。
oob–out of bag
什么是oob,我们用bootstrap抽样的时候,如果抽样后的数据量要与之前的相等,那么最多有66.6%左右的数据会被选择,也就是说还有大概三分之一的数据是没有被用到的,那么没有被用到的数据可以干什么,可以用来验证我们学习的模型怎么样,从而调整参数。
那么假如我们要训练N棵树,就需要N次的bootstrap,那么对于一条数据 (xn,yn) ,他可能在训练第一颗树的时候被用到了,训练第二颗树的时候就没有被用到,我们看下图。
那么这样,对于没有用到数据 (xn,yn) 的那些树来说,这些树组合起来作为 G− ,我们就可以用这条数据来估计 G− 的性能好坏。然后对于每一条记录我们都可以估计一个对应的 G− ,综合起来,就是对G的估计验证。
特征选择
随机森林还有一个重要的应用是可以进行特征选择。
特征选择是什么意思,就是我们把多余的无用的特征去掉。比如我们预测一个人的信用状况,那貌似和她的身份证号没什么关系吧。
那么特征选择有什么优点呢,首先降低了维度计算变得简单,其次特征维度降低之后有助于避免过拟合。缺点也是有的,比如如果维度删除的不正确反倒容易造成过拟合。
那么有什么手段进行特征选择呢。
一种就是例如线性模型这样给每个维度计算一个权值,然后根据权值的绝对值大小进行排序,越高的说明这个属性越重要,当然也可以加入正则化项,这样有的不重要的属性的权重值就会降低。
再有一种就是用随机森林的方法了。
我们说我们如何衡量一个属性的重要性呢?
如果一个属性它是重要的,那么我们往这个属性中添加一些noise,整个分类器的性能就会降低。
importance(i) = performence(i) - performence^'(i)
那么怎么向第i个属性中添加noise,一种方法就是我们把整个数据中第i个属性的属性值全部打乱然后重新分配,这种方法叫做 permutation
那么我们可以把这种方法应用到随机森林上。为什么要用随机森林呢,是因为随机森林有一个oob这样一种验证方法。不用再找新的验证集了。
importance(i)= Eoob(D)−Eoob(Dp)
这里我们没有在扰乱i属性之后重新训练一个树来测试,而是在数据集上做了手脚。
我们在用 (xn,yn) 验证 G− 的时候,对于里面的每个树 gt ,我们总会应用到这个数据的i属性,那么在这个时候,我们把这个属性值替换就好了。替换成什么呢,我们这里只在对于 gt 的oob那些数据的i属性值当中选择。