机器学习:决策树之随机森林
2016-03-26 21:27
218 查看
个人理解:
决策树的随机森林本质上是一种bagging方法,是通过组合一系列弱分类器得到强分类器的的过程。随后分4步:
(1)随机采样
随机多次地从原数据集中选择N个样本点作为决策树的训练样本。
对于行采样,采用有放回的方式,也就是在采样得到的样本集合中,可能有重复的样本。
假设输入样本为N个,那么采样的样本也为N个,这选择好了的N个样本用来训练一个决策树,作为决策树根节点处的样本,同时使得在训练的时候,每一棵树的输入样本都不是全部的样本,使得相对不容易出现过拟合。
(2)完全分裂
对采样之后的数据使用完全分裂的方式建立出决策树,这样决策树的某一个叶子节点要么是无法继续分裂的,要么里面的所有样本的都是指向的同一个分类。分裂的办法是:采用上面说的列采样的过程从这m个属性中采用某种策略(比如说信息增益)来选择1个属性作为该节点的分裂属性。
决策树形成过程中每个节点都要按完全分裂的方式来分裂,一直到不能够再分裂为止(如果下一次该节点选出来的那一个属性是刚刚其父节点分裂时用过的属性,则该节点已经达到了叶子节点,无须继续分裂了)。
(3)构建决策树
每一棵树都是一个弱决策树,因此分类效果差。
(4)多数表决
多个决策树的结果分类中取投票数最多的类别作为最终分类结果。
参考网上回答:就像一个专家,只精通一个方面的知识,但是所有专家的意见组合起来,就可能得出一个接近正确答案的结果。
---------------------------------------------------
随机森林(Random Forest)优点:
在数据集上表现良好
在当前的很多数据集上,相对其他算法有着很大的优势
它能够处理很高维度(feature很多)的数据,并且不用做特征选择
在训练完后,它能够给出哪些feature比较重要
在创建随机森林的时候,对平均误差使用的是无偏估计
训练速度快
在训练过程中,能够检测到feature间的互相影响
容易做成并行化方法
实现比较简单
---------------------------------------------------
生成一棵未剪枝的决策树的过程
以下简写LUT (X,Y):
LearnUnprunedTree(X,Y)
首先,以上是未剪枝决策树的生成过程,一般很多的决策树算法都会包含剪枝过程来避免over-fitting。但是由于随机森林的两个随机采样的过程保证了随机性,所以就算不剪枝也不容易出现over-fitting,这也是随机森林的优势之一。
其次,按上述办法生成的每一棵决策树的分类能力很有限(从M个feature中选择m让每一棵决策树进行学习),但是组合在一起形成森林之后分类能力就大大加强了,这点很像adaboost里面的弱分类器组合成强分类器的思想,并且最后都是通过带权重的方式组合起来。
最后,随机森林有2个参数需要人为控制,一个是森林中树的数量,一般建议取很大。另一个是m的大小,推荐m的值为M的均方根。
机器学习中的算法:决策树模型组合之随机森林Random Forest
决策树的随机森林本质上是一种bagging方法,是通过组合一系列弱分类器得到强分类器的的过程。随后分4步:
(1)随机采样
随机多次地从原数据集中选择N个样本点作为决策树的训练样本。
对于行采样,采用有放回的方式,也就是在采样得到的样本集合中,可能有重复的样本。
假设输入样本为N个,那么采样的样本也为N个,这选择好了的N个样本用来训练一个决策树,作为决策树根节点处的样本,同时使得在训练的时候,每一棵树的输入样本都不是全部的样本,使得相对不容易出现过拟合。
(2)完全分裂
对采样之后的数据使用完全分裂的方式建立出决策树,这样决策树的某一个叶子节点要么是无法继续分裂的,要么里面的所有样本的都是指向的同一个分类。分裂的办法是:采用上面说的列采样的过程从这m个属性中采用某种策略(比如说信息增益)来选择1个属性作为该节点的分裂属性。
决策树形成过程中每个节点都要按完全分裂的方式来分裂,一直到不能够再分裂为止(如果下一次该节点选出来的那一个属性是刚刚其父节点分裂时用过的属性,则该节点已经达到了叶子节点,无须继续分裂了)。
(3)构建决策树
每一棵树都是一个弱决策树,因此分类效果差。
(4)多数表决
多个决策树的结果分类中取投票数最多的类别作为最终分类结果。
参考网上回答:就像一个专家,只精通一个方面的知识,但是所有专家的意见组合起来,就可能得出一个接近正确答案的结果。
---------------------------------------------------
随机森林(Random Forest)优点:
在数据集上表现良好
在当前的很多数据集上,相对其他算法有着很大的优势
它能够处理很高维度(feature很多)的数据,并且不用做特征选择
在训练完后,它能够给出哪些feature比较重要
在创建随机森林的时候,对平均误差使用的是无偏估计
训练速度快
在训练过程中,能够检测到feature间的互相影响
容易做成并行化方法
实现比较简单
---------------------------------------------------
生成一棵未剪枝的决策树的过程
以下简写LUT (X,Y):
LearnUnprunedTree(X,Y)
输入: X是RxM的矩阵,Xij表示第i个样本的第j个特征。 Y是Rx1的向量,Yi表示第i个样本的类别标签。 输出: 一棵未剪枝的树 如果X的所有样本值都相同,或Y的所有类别标签相同,或者R<2,则产生一个叶结点,该结点的类别即是X中最多数的类别。 否则 从M个特征中随机挑选m个 这m个特征中,信息增益最大的记为p。(信息增益的计算方法见下文) 如果特征p的取值是非连续的(如性别:“男”,“女”) 则对p的任一取值v 用Xv表示特征p取值为v的样本,Yv为其对应类别 Childv =LUT(Xv,Yv) 返回一个树结点,在特征p处分裂,孩子的数量与特征p的不同取值数量相同。第v’个孩子即是Childv = LUT(Xv,Yv) 如果特征p的取值是连续的(如温度,长度等),设t为最佳分裂阈值 XLO 表示 特征p的值<t的样本集合,YLO为其对应类别 ChildLO = LUT(XLO, YLO) XHI 表示 特征p的值>=t的样本集合,YHI为其对应类别 ChildLO = LUT(XHI , YHI) 返回一个树结点,在特征p处分裂,有2个孩子,分别是ChildLO = LUT(XLO, YLO) 和ChildLO = LUT(XHI , YHI)。
首先,以上是未剪枝决策树的生成过程,一般很多的决策树算法都会包含剪枝过程来避免over-fitting。但是由于随机森林的两个随机采样的过程保证了随机性,所以就算不剪枝也不容易出现over-fitting,这也是随机森林的优势之一。
其次,按上述办法生成的每一棵决策树的分类能力很有限(从M个feature中选择m让每一棵决策树进行学习),但是组合在一起形成森林之后分类能力就大大加强了,这点很像adaboost里面的弱分类器组合成强分类器的思想,并且最后都是通过带权重的方式组合起来。
最后,随机森林有2个参数需要人为控制,一个是森林中树的数量,一般建议取很大。另一个是m的大小,推荐m的值为M的均方根。
机器学习中的算法:决策树模型组合之随机森林Random Forest
相关文章推荐
- eventlet引发的学习-python协程:eventlet[待续]
- 20145231第四周学习笔记
- 据廖雪峰python3教程----python学习第六天
- ExtJs之Ajax模式的表单数据加载
- looking for thunder link
- jquery学习总结
- 关于学习swift遇到的问题吧3-26
- J - Just a Magic String
- Protocol概述
- 我用Python写自动刷代理服务IP的经过
- TFIDF并不能用来说明特征词的重要与否,只是用来区分不同文档
- Leetcode 40. Combination Sum II
- .服务生命周期,开启方式,绑定服务,远程服务
- 【Spark】Spark应用执行机制
- BZOJ 1067[SCOI 2007]
- implement of deep neural network --- python
- understand - 笔记
- 图解HTTPS协议加密解密全过程
- java 复杂链表的复制
- 优先队列问题 get it !!