Deep Forest

Deep Forest

简介

深度神经网络(DNN)的思路来组织随机森林(RF),极大地提高了随机森林的准确率

安装

pip install deep-forest

函数⚱️

用法详见测试代码

  • deepforest.CascadeForestClassifier:对Deep Forest的实现;

  • deepforest.DecisionTreeClassifierDeep Forest的树的实现;

注意事项

分类的类别需从0开始标记,即label={0,1,2…}

原论文阅读

background

  • 对**深度神经网络(DNN)**成功的原因分析:

    1. 一层一层的堆叠(layer-by-layer processing);
    2. 模型内部的数据表征方式的转变【例如LSTM中词向量的传递和维度变化】(in-model feature transformation);
    3. 足够的模型复杂度(sufficient model complexity);
  • DNN的缺陷:

    1. 超参数太多(too many hyper-parameters),模型表现十分依赖参数选择和训练(parameter tuning);
    2. 需要大量训练数据(a huge amount of training data);
    3. 黑箱系统(玄学),很难进行理论分析(theoretical analysis);
    4. 模型结构的确定先于模型训练;

inspiration

从DNN

  • DNN中观察到,在DNN每层的传播中,**数据特征(feature)**越来越集中,越来越抽象。

  • DNN的成功和模型复杂度关系不大,否则为什么无限扩大模型参数量并不能提升模型效果?

  • DNN的层次性和决策树的层次性不一样:

    • 决策树始终利用的是输入的数据,并没有对**数据表征(feature)**做出任何改变(work on the original feature representation),没有出现(in-model feature transformation);
    • DNN每一层的输出都会对**数据表征(feature)**做出改变;

从集成学习(Ensemble Learning)

  • 要做好集成学习,每个学习单元(learner)要做到准确(accurate) 多样(diverse)

  • 实践中常常会通过技巧提高模型的多样性

    • 数据采样(data sample manipulation)

      从原始数据集中采样出不同的子训练集来训练不同的学习单元(learner)

      例如:

      Bagging中的bootstrap sampling

      AdaBoost中的sequential importance sampling

    • 输入特征采样(input feature manipulation)

      从原始的数据特征中采样出不同的子特征(feature)生成子空间(subspace),训练不同的学习单元(learner)

    • 学习参数区别(learning parameter manipulation)

      不同的**学习单元(learner)**采用不同的参数训练;

    • 输出表征区别(output representation manipulation)

      对不同的学习单元使用不同的表征(representation)

gcForest

层次森林结构(Cascade Forest Structure)

Deep Forest_第1张图片

  • 每一层从其前面的层获取数据,再将数据传递到下一层;

  • 每一层都是随机森林的集成;

  • 每个森林中的树个数作为超参数;

  • 图中:

    • 黑色森林是随机森林(random forest)

      每个森林包括500棵随机树,树的每个节点从随机选择的 d \sqrt{d} d (d是特征个数)个候选特征中按照gini系数选择一个特征来切分;

    • 蓝色森林是完全随机树森林(completely-random tree forest)

      每个森林包括500棵完全随机树,树的每个节点会从所有的特征中选择一个特征切分出来,树生长直到完全是叶子;

    • 假设数据分为三类,每个随机森林将输出三维向量,然后将所有向量连接(concatenate)作为输出;

  • 每个随机森林的输出是所有树的平均,如下图:
    Deep Forest_第2张图片

  • 为了减小过拟合(overfitting)风险,每个随机森林的输出都使用K折交叉验证(k-fold cross validation)

    • 每个条数据会被训练k-1次,生成k-1个向量,然后平均作为该树的输出;
    • 交叉验证的结果作为判定条件,如果模型效果相对上一层有提高则继续扩展下一层,否则结束;

卷积特征提取(Multi-Grained Scanning)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ed6IuvGo-1612276362115)(./.md/p3.png)]

  • 用一个一维或者二维的窗口扫描原数据,将窗口数据提取出来作为新特征

  • 新特征送入训练,再将结果连接起来,作为最终的输出结果;

  • 有可能某些新特征与结果丝毫没有关系(例如:需要识别一张图片的汽车,但提取出来的小片段不包含任何相关内容),这时,可以把新特征看成一种output representation manipulation,可以提高模型的多样性;

  • 新特征太多时,可以对其进行采样

  • 模型中通常使用不同大小的窗口进行特征提取,如下图:
    Deep Forest_第3张图片

anipulation**,可以提高模型的多样性;

  • 新特征太多时,可以对其进行采样

  • 模型中通常使用不同大小的窗口进行特征提取,如下图:
    Deep Forest_第4张图片

代码

你可能感兴趣的:(机器学习,机器学习,决策树,深度学习)