随机森林
- boostraping:pull-up-by-your-own
利用自己的资源:一种有放回抽样的方法
分类:投票
- 回归:平均
* Bagging的思想
- 在样本集中(重采用)选出n个样本
- 在所有属性上,对这n个样本建立分类器(ID3,C4.5,CART,SVM,LR等)
- 重复以上两步m次,得到m个分类器
- 将数据放在m个分类器上,最后根据这m个分类器的投票结果,决定数据属于哪个属性
* bagging的应用场合
适合若分类器:
- 不稳定:随机采样会得到比较不同的基分类器
- 每个分类器的准确率略高于50%
- 例如决策树
不适合强分类器:
- 稳定:随机采用对结果的影响不大
- 反而可能不如不集成
- 例如:K近邻
* bagging采样的数据集
- 63.8%用来训练数据
- 其余用了测试数据
1. 随机森林
- 在bagging的基础上做了修改
- 63.8% 是训练集合,其余是测试集合
- 随机森林:不同树的关联性和每颗树的能力
- 构建决策树,每次分裂,从全特征候选p集中选取m 个进行分裂,一般 m=srqt(p)
- m是为了控制不同树之间的关联性,m大关联性大,所以m选择比p小的多
* 算法(forest-RI)
- 从样本集中用boostrap采样,选择n个样本(0.638)
- 从所有属性随机抽取k个属性(k=sqrt(m))
- 选择最佳分割属性作为节点,创建CART树,但是不剪枝
- 重以上m次,即创建了m颗树
- m颗cart树形成随机森林,通过投票决定结果
* 算法(forest-RC)
- 使用输入特征的线性组合
- 使用已有的特征构成线性组合
- 组合系数是[-1,1]之间的随机数
* 随机森林不存在过拟合
2. 特征选择
http://blog.csdn.net/jasonding1354/article/details/47066917
* OOB error估计
- boostrap中1/3的样本不会出现在采用样本中,不参加决策树的构建;1/3的样本称为袋外数据oob(out-of-bag)
- errOOB1:每颗决策树,选择相应的袋外数据(oob)计算袋外误差
- 是G-平均得到(测试集数据(2/3),oob是剩余数据(1/3))
* perutation-test
- 通过将第i个维度的特征的所有数据重新的随机调整位置,然后比较一下原始数据和调整之后的数据表现的差距,来评价特征的重要性
* 随机森林OOB特征选择
- 首先建立m颗决策树,然后分别计算每棵树的OOB袋外误差errOOB1
- 计算特征的重要性,随机的修改OOB的每个特征,再次计算errOOB2
- 按特征重要性排序,然后剔除后面不重要的特征
- 重复,只到选出n个特征
* 非线性问题可以通过RF来选择特
3. 随机森林的组合策略
* 平均法
* 投票法
* 学习法
次级学习器
stacking学习法,从初级学习器中训练出初级学习器,然后生成新的数据集合(初级学习器的输出被当做样例输入特征,而初级学习器的标记仍被当做样例标记)
- 过拟合问题:用初级学习器未使用的样本来产生次级学习器
4. 随机森林的参数
- k=sqrt(m)
- 树的个数:400
- 树的深度:8-10
http://www.cnblogs.com/pinard/p/6156009.html
补充
- Bagging的弱学习器之间的确没有boosting那样的联系。它的特点在“随机采样”
- bagging对于弱学习器没有限制,这和Adaboost一样。但是最常用的一般也是决策树和神经网络。
- 由于Bagging算法每次都进行采样来训练模型,因此泛化能力很强,对于降低模型的方差很有作用。当然对于训练集的拟合程度就会差一些,也就是模型的偏倚会大一些。