随机森林------random forest
来源:互联网 发布:excel07建立数据透视表 编辑:程序博客网 时间:2024/06/10 04:15
决策树
先说下决策树吧,具体的算法什么的就不讲了,很基本的东西,网上有很多。主要总结下三种特征选择的优缺点。
ID3 基于信息增益做特征选择,所以很容易受到某一特征特征值数量的干扰。信息增益会偏向于属性值多的那一个属性。
所以C4.5采用了信息率作为特征选择的标准。信息率就是在信息增益的基础上除以一个值,这个值与属性值的数量有关,属性值的数量越多该值越大,那么信息率也就越小。那么信息率就偏向于选择那些特征值较少的属性,所以我们用增益率做选择的时候,一般都是先选出几个信息增益较高的属性,在用信息率做选择。
随机森林
森林是什么,就是很多棵树,所以很明白了随机森林就是要用很多棵树来做分类。
那么为什么要用很多棵树呢。因为一棵树很容易发生过拟合,决策树对数据的扰动很敏感,尤其是完全长成的一棵树,所以我们希望用很多颗不同的树同时决策,来解决过拟合的问题。
那么如何使用多颗不同的树呢,这就是随机的思想,这里就用到了bagging。
bagging 说了什么,对于一份数据集,我们可以通过bootstrap来抽样,然后可以用抽样得来的不同数据集进行训练得到不同的树,bootstrap抽样其实就相当于对数据加了权重,这样训练出来的树的关注点就不同了。
在一个我们在训练树的时候,不再是用数据的所有属性来进行分支,而是随机的选择一些属性出来。这又加大了扰动,使得树变得更加的不同。
当然随机的选择属性相当于对原属性在原来的方向上做一个映射
通过这种随机的扰动,让我们训练出了不同的决策树,这就是随机森林。
oob–out of bag
什么是oob,我们用bootstrap抽样的时候,如果抽样后的数据量要与之前的相等,那么最多有66.6%左右的数据会被选择,也就是说还有大概三分之一的数据是没有被用到的,那么没有被用到的数据可以干什么,可以用来验证我们学习的模型怎么样,从而调整参数。
那么假如我们要训练N棵树,就需要N次的bootstrap,那么对于一条数据
那么这样,对于没有用到数据
特征选择
随机森林还有一个重要的应用是可以进行特征选择。
特征选择是什么意思,就是我们把多余的无用的特征去掉。比如我们预测一个人的信用状况,那貌似和她的身份证号没什么关系吧。
那么特征选择有什么优点呢,首先降低了维度计算变得简单,其次特征维度降低之后有助于避免过拟合。缺点也是有的,比如如果维度删除的不正确反倒容易造成过拟合。
那么有什么手段进行特征选择呢。
一种就是例如线性模型这样给每个维度计算一个权值,然后根据权值的绝对值大小进行排序,越高的说明这个属性越重要,当然也可以加入正则化项,这样有的不重要的属性的权重值就会降低。
再有一种就是用随机森林的方法了。
我们说我们如何衡量一个属性的重要性呢?
如果一个属性它是重要的,那么我们往这个属性中添加一些noise,整个分类器的性能就会降低。
importance(i) = performence(i) - performence^'(i)
那么怎么向第i个属性中添加noise,一种方法就是我们把整个数据中第i个属性的属性值全部打乱然后重新分配,这种方法叫做 permutation
那么我们可以把这种方法应用到随机森林上。为什么要用随机森林呢,是因为随机森林有一个oob这样一种验证方法。不用再找新的验证集了。
importance(i)=
这里我们没有在扰乱i属性之后重新训练一个树来测试,而是在数据集上做了手脚。
我们在用
- 随机森林Random Forest
- 随机森林--Random Forest
- 随机森林Random Forest
- 随机森林(Random Forest)
- random forest(随机森林)
- 随机森林Random Forest
- Random Forest(随机森林)
- 随机森林 Random Forest
- Random Forest 随机森林
- 随机森林------random forest
- 随机森林(random forest)
- 随机森林,random forest
- 随机森林 random forest
- 随机森林 Random Forest
- Random Forest随机森林算法
- 随机森林(Random Forest)
- 随机森林(Random Forest)
- random forest(随机森林)
- 写给刚选择软件工程的你
- 算法——洗洗脑子吧
- Java源码-简单手绘程序
- python核心编程第九章练习
- LeetCode 342 Power of Four
- 随机森林------random forest
- linux学习笔记
- 多线程下载文件和断点续传的简单实现
- Hibernate的HQL简单查询语句
- 关于c++的struct与class区别
- 博客开篇
- 随机数math包 switch 的用法 笔记
- POJ 1035 Spell checker
- 第三章:linear models for regression