论文阅读:深度森林

article/2025/9/25 22:37:26

论文地址:https://arxiv.org/pdf/1702.08835.pdf
相关代码:https://github.com/kingfengji/gcForest

深度森林是南大周志华老师前两年提出的一种基于随机森林的深度学习模型。

当前的深度学习模型大多基于深度学习神经网络(DNN),其中每一层都是可微的,在训练过程中通过反向传播调参。而本篇介绍的深度森林算法基于不可微的子模型,该算法把多个随机森林串联起来组成了深度学习模型。

作者认为深度模型的优越性主要在于:深度网络多层建构;模型特征变换;模型足够复杂。文中提出基于树模型的gcForest也可满足以上三点。相对于深度学习神经网络,它还有如下优势:使用较少的超参数;模型的复杂度可根据数据情况自动调整;使用模型的默认参数往往也能达到不错的学习效果。

DNN的缺点:

  • DNN超参数太多,调参难度大,需要大量技巧
  • DNN一般在大数据集上训练效果好,在中小数据集上表现较差,标注成本大
  • DNN是难以解释的黑盒模型
  • DNN需要事先设计网络结构,它的设计往往比实际需要的复杂度更高
  • 在很多数据比赛中GBDT类模型效果往往更好

灵感

作者设计灵感主要来源于深度学习模型和集成模型。

深度学习模型利用层层堆叠方法提升效果,因为即使给浅层网络设置很多单元,效果也不如深层网络;另外,决策树及GBDT决策树算法虽然也是层层推进,但效果也不如DNN的原因可能是它不能逐层提取更多特征,也就是说不支持模型内部特征转换(feature transformation),且这些机器学习模型只有有限的复杂度。

集成模型中多模型集成比单模型有更好泛化效果。子模型需要兼顾准确性,多样性,互补性。比如森林中设置树模型多样性常常采用的方法有:数据采样方式不同,特征不同,模型参数不同,定义的输出不同等。

实现方法

森林堆叠

gcForest方法集成了多个森林,具体构建方法如下:

此例解决的是一个多分类问题,从左向右运行。模型输入是左侧的Input Feature Vector,最终输出为输入x属于三种类别的概率;模型深度为N层,每层包含两个完全随机树森林和两个随机森林;每一层的输入是前层的输出和基本特征(Input Feature Vector),输出为12个新特征(4模型x3类别)并传向后一层;使用验证集评价模型效果,当模型不再变好时停止继续训练。

多粒度扫锚

DNN的重要优点在于识别出特征相关性,gcForest使用给特征分组的方法加入对特征相关性的支持:

假设输入400维特征,设置窗口宽度100,可取到301组特征,代入模型,产生903个输出(子模型输出x属于三个类别的概率301x3=903),如果使用两个森林ForestA和ForestB,则经过一层之后,输出1806个新特征。

再延展到更加复杂的结构:使用不同大小的滑动窗口:

示例中分别使用了大小为100、200、300的滑动窗口,并使用不同的森林Forest A/B/C分别处理,以达到更好效果(具体效果见实验部分)。

参数对比

从参数对比中可以看到,DNN需要设计和尝试更多参数,而gcForest参数少,并且使用默认参数往往也能达到不错的效果。

实验

文中实验主要在DNN擅长的领域,如图片、音频、自然语言处理等领域,使用中大规模数据对比多模型的使用效果。

实验结果

图片分类:使用MNIST数据集,其中train 60000,test 10000,对比效果如下:

人脸识别

另外,文中还对比了音乐片断分类、手势识别、影评情感分类等,详见论文。

低维数据与高维数据

文中测试了模型在三种低维数据集上的表现LETTER:16个特征,训练集16000测试集4000;ADULT:14个特征,训练集32,561测试集16,281,YEAST:8个特征训练集1038测试集446。

也测试了在高维数据集CIFAR-10:训练集50000测试集10000图片,共10个类别,8192个特征。对比效果如下:

可以看到优化的DNN方法ResNet,AlexNet明显优于gcForest,而gcForest在DNN以外的其它方法中效果最优;并且可以看到经过多滑动窗口和将最后一层替换成gbdt后,gcForest方法也有明显改进。

运行时间

当使用25000实例5000特征,一层用时267.1秒。如果使用不同粒度,模型可以并行训练。

多粒度特征叠加

上图中使用多粒度特征时,将不同粒度提取的特征分别代入模型,此处实验将不同粒度提取的特征连接后统一代入模型,方法相对更简单,其效果与上述方法差别不大,模型效果对比如下:

使用方法

从github开源项目的demo中可以看到GCForest使用方法非常简单,类似Sklearn中的模型接口。

总结

文中讨论的gcForest在目前很多深度学习领域表现也不错,并非想使用它去取代目前的DNN模型,而是提出了另一种深度学习的实现方法和可能性。


http://chatgpt.dhexx.cn/article/JBE8jv7P.shtml

相关文章

Deep Forest(gcforest)通俗易懂理解

DeepForest(gcforest)深度森林介绍 1.背景介绍 当前的深度学习模型主要建立在神经网络上,即可以通过反向传播训练的多层参数化可微分非线性模块,周志华老师希望探索深度学习模型的新模式,探索不可微模块构建深度模型的可能性。从而提出了一…

【深度学习】Deep Forest:gcForest算法理解

一、相关理论 本篇博文主要介绍南京大学周志华教授在2017年提出的一种深度森林结构——gcForest(多粒度级联森林)。近年来,深度神经网络在图像和声音处理领域取得了很大的进展。关于深度神经网络,我们可以把它简单的理解为多层非…

从深度学习到深度森林方法(Python)

作者 |泳鱼 来源 |算法进阶 一、深度森林的介绍 目前深度神经网络(DNN)做得好的几乎都是涉及图像视频(CV)、自然语言处理(NLP)等的任务,都是典型的数值建模任务(在表格数据tabular …

深度森林(gcforest)原理讲解以及代码实现

GcForest原理 gcforest采用Cascade结构,也就是多层级结构,每层由四个随机森林组成,两个随机森林和两个极端森林,每个极端森林包含1000(超参数)个完全随机树,每个森林都会对的数据进行训练,每个森林都输出结…

有关 -fPIC 选项的编译问题

嵌入式 Linux 上基于 makefile 的编译,执行编译出现如下错误: error: test/fake_blemgr_test.o: requires unsupported dynamic reloc R_ARM_REL32; recompile with -fPIC 这个问题涉及到生成位置无关代码的机制,在我这里的情况是&#xff0…

-fpic 与-fPIC的区别

-fpic 与-fPIC的区别 前言 在编译动态库的时候,我们应该需要使用-fpic 或-fPIC参数。如下所示: 然后,使用gcc或g 命令生成动态库 pic 与PIC的异同 相同点:都是为了在动态库中生成位置无关的代码。通过全局偏移表(GOT&…

在字符串中删除指定的特定字符

使用C语言,编写一个尽可能高效的函数,删除字符串中特定字符。 思路:要求尽可能高效,定义一个256的int数组,将需要删除的字符ASCII作为数组下标,要删除的置1,注意点:处理后的字符串要…

实现一个删除字符串中的指定字符的简单函数

做出此函数只需将函数分步运行 第一步&#xff1a;确定函数接口和定义变量 因为是要删除字符串中的指定函数&#xff0c;所以要定义出字符串以及字符&#xff0c;即str[]和c。函数接口为void delchar&#xff08;char*str&#xff0c;char c); #include<stdio.h> int …

删除字符串某一指定子字符串

文章目录 功能&#xff1a;删除字符串某一指定子字符串业务场景实现方法1、Java实现 功能&#xff1a;删除字符串某一指定子字符串 业务场景 在数据库中有一个String类型的字符串&#xff0c;该字符串通过逗号进行分割&#xff0c;现在前端传过来字符串中的一个子字符串&…

删除字符串中指定的字符C语言详解

问题描述&#xff1a; 从键盘输入一个字符串和一个字符&#xff0c;删除字符串中所指定的字符&#xff0c;将结果保存到一个新的字符串中并输出 编译环境&#xff1a;vc 6.0; 代码 #include <stdio.h>int main() {char str1[80], str2[80], ch;int i,j0;printf("…

C语言删除字符串中的指定字符

一、函数方法&#xff08;推荐使用这个方法&#xff09; 只需要进行一次对目标字符串的遍历即可完成删除目标字符的功能&#xff0c;具体的代码如下所示&#xff1a; void delchar( char *str, char c ) {int i,j;for(ij0;str[i]!\0;i){if(str[i]!c)//判断是否有和待删除字符一…

C++ 删除指定字符串中的某些字符

C 删除指定字符串中的某些字符 题目 输入URL前缀和后缀&#xff0c;删除字符串中的“,/”&#xff0c;把URL拼接在一起且后边有“/”。 用例&#xff1a; 输入&#xff1a;/abhdsjvf/,/afsggfd 输出&#xff1a;/abhdsjvf/afsggfd/ 程序实现&#xff1a; #include<iostrea…

Windows server 2012 R2安装教程

镜像下载地址&#xff1a; ed2k://|file|cn_windows_server_2012_r2_vl_with_update_x64_dvd_6052729.iso|5545527296|BD499EBCABF406AB82293DD8A5803493|/ 1&#xff0c;语言&#xff0c;键盘输入法&#xff0c;默认&#xff0c;点击下一步 2&#xff0c;点击 现在安装 3&…

SQL Serevr 2012 安装教程

需要的工具 SQL Server 2012R2 镜像 ISO WINDOWS SERVER 2012R2 操作系统 安装过程 1、打开安装文件&#xff0c;打开 setup 应用程序图标 2、在 SQL server 安装中心窗口中&#xff0c;点击安装– 点击全新 SQL Server 独立安装或向现有安装添加功能 3、点击确定 4、输入产…

Microsoft SQL Server 2008 R2 官方简体中文正式版下载(附激活序列号密钥)

微软官方发布的Microsoft SQL Server 2008 R2 简体中文完整版。基于SQL Server 2008提供可靠高效的智能数据平台构建而成&#xff0c;SQL Server 2008 R2 提供了大量新改进&#xff0c;可帮助您的组织满怀信心地调整规模、提高 IT 效率并实现管理完善的自助 BI。此版本中包含应…

SqlServer2012下载+安装+启动(资源+密钥)

一、下载 此处提供一个下载链接。具体地址如下&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1zaMOa-nA19mZxStrBK9jjg 提取码&#xff1a;k03s 下载压缩包是SqlServer2012版镜像&#xff0c; 二、安装 直接双击下载得到的镜像文件&#xff0c;后双击文件夹的如下set…

超详细windows server2012 r2 虚拟机安装步骤

1、Windows Server 2012 R2简介 Windows Server 2012 R2 是基于Windows8.1 以及Windows RT 8.1 界面的新一代 Windows Server 操作系统&#xff0c;提供企业级数据中心和混合云解决方案&#xff0c;易于部署、具有成本效益、以应用程序为重点、以用户为中心。 在 Microsoft 云…

server 2012 各个版本的安装及激活教程

服务器引导盘的部分我就不多解释了&#xff0c;直接讲重点&#xff0c;需要注意的地方 Windows Server 2012 R2 安装密钥&#xff08;只适用安装&#xff0c;不支持激活&#xff09; 标准版 NB4WH-BBBYV-3MPPC-9RCMV-46XCB 数据中心版 BH9T4-4N7CW-67J3M-64J36-WW98Y 安装的…

VMware虚拟机安装Windows Server 2012 R2

想必同学们已经开学了&#xff0c;也都进入了军训阶段吧&#xff0c;而很多计算机网络专业的同学们要开始接触到Windows Server了&#xff0c;这也是计算机网络技术专业的专业基础课程&#xff0c;想当年我们实训课学习使用的好像是2008版的&#xff0c;也不晓得现在各个学校会…

win2012 R2安装与配置

安装win2012 R2的时候&#xff0c;我们最好使用update的iso镜像&#xff0c;不然安装完后会出很多问题&#xff0c;比如vmtools安装不了。 iso镜像迅雷下载&#xff1a; ed2k://|file|cn_windows_server_2012_r2_with_update_x64_dvd_6052725.iso|5545705472|121EC13B53882E50…