ML——RF

随机森林是一种集成学习(Ensemble)方法,属于集成学习中的Bagging族,是一种典型的Bagging方法


随机森林

训练

  • 假设训练集总大小为N,特征总数为K
  • 有放回抽样N个训练样本
    • 说明:这种有放回的抽样技术又称为自助法(Bootstrap)重采样技术
  • 随机从所有特征中选取k个特征(k一般远小于总特征数K)
  • 用bootstrap采样的结果(N个样本)和k个特征训练一棵决策树(训练时不剪枝,每棵树都尽可能生长)
  • 重复上述三个步骤:bootstrap采样和训练新的决策树,直到生成m棵决策树
  • 将m棵决策树组合成随机森林

预测

  • 对于一个确定的未标记样本
  • 经过每一棵决策树预测
  • 投票产生结果,确定最终分类

优点

  • 避免过拟合(bootstrap采样[随机]和随机选择部分特征)
  • 便于处理高维度的数据
  • 对高维度的数据无需做特征选择,全部保留也无所谓
  • 可并行计算
  • 模型实现简单

缺点

  • 模型训练多棵树,所以训练时间长
  • 预测时经过多棵树,预测时间长

参数

  • 决策树类型: 三种(ID3,C4.5,CART)均可选,默认均分的三种算法混合到一起
  • 树的数量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个特征中选择