随机森林是一种集成学习(Ensemble)方法,属于集成学习中的Bagging族,是一种典型的Bagging方法
随机森林
训练
- 假设训练集总大小为N,特征总数为K
- 有放回抽样N个训练样本
- 说明:这种有放回的抽样技术又称为自助法(Bootstrap)重采样技术
- 随机从所有特征中选取k个特征(k一般远小于总特征数K)
- 用bootstrap采样的结果(N个样本)和k个特征训练一棵决策树(训练时不剪枝,每棵树都尽可能生长)
- 重复上述三个步骤:bootstrap采样和训练新的决策树,直到生成m棵决策树
- 将m棵决策树组合成随机森林
预测
- 对于一个确定的未标记样本
- 经过每一棵决策树预测
- 投票产生结果,确定最终分类
优点
- 避免过拟合(bootstrap采样[随机]和随机选择部分特征)
- 便于处理高维度的数据
- 对高维度的数据无需做特征选择,全部保留也无所谓
- 可并行计算
- 模型实现简单
缺点
- 模型训练多棵树,所以训练时间长
- 预测时经过多棵树,预测时间长
参数
- 决策树类型: 三种(ID3,C4.5,CART)均可选,默认均分的三种算法混合到一起
- 决策树详细信息可参考ML——DT
- 树的数量m:
- n_estimators
- int i: n_estimators = i
- 默认为10
- 特征个数k(以Sklearn库为例):
- max_features = k
- int i: k = i
- float f: k = f * K
- sqrt: k = sqrt(K)
- log2: k = log2(K)
- None: k = K
- Sklearn.ensemble.RandomRorestClassifier默认是”auto”,也就是sqrt(K)
- 树的深度:
- max_depth
- 单棵树的深度
- 默认是None,不做限制
- int i: 指定树的深度为i
- 叶子节点最小样本数:
- int i: min_samples_leaf = i
- float f: min_samples_leaf = f * N
- 默认为1
问题: 随机森林的随机体现在哪里?
- 个人理解
- 体现在每棵树的训练样本随机,有放回采样(自助法(Bootstrap)重采样技术)
- 体现在每棵树的训练样本的特征随机, 对每棵树而言,随机从K个特征中选取k个特征,当前树的每个叶节点分裂时只能从这k个特征中选择