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

article/2025/9/25 22:29:55

一、相关理论

本篇博文主要介绍南京大学周志华教授在2017年提出的一种深度森林结构——gcForest(多粒度级联森林)。近年来,深度神经网络在图像和声音处理领域取得了很大的进展。关于深度神经网络,我们可以把它简单的理解为多层非线性函数的堆叠,当我们人工很难或者不想去寻找两个目标之间的非线性映射关系,我们就多堆叠几层,让机器自己去学习它们之间的关系,这就是深度学习最初的想法。既然神经网络可以堆叠为深度神经网络,那我们可以考虑,是不是可以将其他的学习模型堆叠起来,以获取更好的表示性能,gcForest就是基于这种想法提出来的一种深度结构。gcForest通过级联的方式堆叠多层随机森林,以获得更好的特征表示和学习性能。

深度神经网络虽然取得很好的性能,但是也存在一些问题。第一、要求大量的训练数据。深度神经网络的模型容量很大,为了获得比较好的泛化性能,需要大量的训练数据,尤其是带标签的数据。获取大规模数据需要耗费很大的人工成本;第二、深度神经网络的计算复杂度很高,需要大量的参数,尤其是有很多超参数(hyper-parameters)需要优化。比如网络层数、层节点数等。所以神经网络的训练需要很多trick;第三、深度神经网络目前最大的问题就是缺少理论解释。就像“炼丹”一样,反正“丹药”出来了,怎么出来的我也不知道。

gcForest使用级联的森林结构来进行表征学习,需要很少的训练数据,就能获得很好的性能,而且基本不怎么需要调节超参数的设置。gcForest不是要推翻深度神经网络,也不是以高性能为目的的研究,只是在深度结构研究方面给我们提供了一些思路,而且确实在一些应用领域获得了很好的结果,是一项很有意义的研究工作。

二、算法介绍

2.1 级联森林结构

    

图一 级联森林结构图

图一表示gcForest的级联结构。

每一层都由多个随机森林组成。通过随机森林学习输入特征向量的特征信息,经过处理后输入到下一层。为了增强模型的泛化能力,每一层选取多种不同类型的随机森林,上图给了两种随机森林结构,分别为completely-random tree forests(蓝色)和random forests(黑色),每种两个。其中,每个completely-random tree forests包含500棵树,每个节点通过随机选取一个特征作为判别条件,并根据这个判别条件生成子节点,直到每个叶子节点只包含同一类的实例而停止;每个random forests同样包含500棵树,节点特征的选择通过随机选择√d个特征(d为输入特征的数量),然后选择基尼系数最大特征作为该节点划分的条件。

图二 类分布向量生成流程

图二表示每个森林的类分布向量生成流程。

随机森林中每棵决策树对于输入特征向量都会产生一个关于每类的预测概率,对于三分类,则为一个三维向量,然后对所有树的产生的概率分布向量进行平均来产生随机森林输出的类分布向量。然后对当前层的每个随机森林输出的类分布向量与原始的特征向量进行拼接,作为下一层的输入。对于三分类,假设每层有4棵树,则下一层的输入特征向量维度为(3×4 + length of x)。

2.2 多粒度扫描

图三 特征预处理流程

图三表示对输入特征使用多粒度扫描的方式产生级联森林的输入特征向量。

对于400维的序列数据,采用100维的滑动窗对输入特征进行处理,得到301(400 - 100 + 1)个100维的特征向量。对于20×20的图像数据,采用10×10的滑动窗对输入特征进行处理,得到121((20-10+1)*(20-10+1))个10×10的二维特征图。然后将得到的特征向量(或特征图)分别输入到一个completely-random tree forest和一个random forest中(不唯一,也可使用多个森林),以三分类为例,会得到301(或121)个3维类分布向量,将这些向量进行拼接,得到1806(或726)维的特征向量。

2.3 总体流程

图四 gcForest总流程图

图四为gcForest的总体流程图。

第一步:使用多粒度扫描对输入特征进行预处理。以使用三个尺寸的滑动窗为例,分别为100-dim,200-dim和300-dim。输入数据为400-dim的序列特征,使用100-dim滑动窗会得到301个100-dim向量,然后输入到一个completely-random tree forest和一个random forest中,两个森林会分别得到的301个3-dim向量(3分类),将两个森林得到的特征向量进行拼接,会得到1806-dim的特征向量。同理,使用200-dim和300-dim滑动窗会分别得到1206-dim和606-dim特征向量。

第二步:将得到的特征向量输入到级联森林中进行训练。首先使用100-dim滑动窗得到的1806-dim特征向量输入到第一层级联森林中进行训练,得到12-dim的类分布向量(3分类,4棵树)。然后将得到的类分布向量与100-dim滑动窗得到的特征向量进行拼接,得到1818-dim特征向量,作为第二层的级联森林的输入数据;第二层级联森林训练得到的12-dim类分布向量再与200-dim滑动窗得到的特征向量进行拼接。作为第三层级联森林的输入数据;第三层级联森林训练得到的12-dim类分布向量再与300-dim滑动窗得到的特征向量进行拼接,做为下一层的输入。一直重复上述过程,直到验证收敛。

表一 超参数和默认设置总结。黑体字表示影响较大的超参数,"?"表示需要根据不同任务进行调节。

表一对比了深度神经网络和gcForest的超参数设置。从表中可以看出,gcForest所需超参数更少,结构更加简单。

三、算法实现

官方开源地址:https://github.com/kingfengji/gcForest

3.1 安装

将代码clone到本地,然后将lib下的gcforest复制到你的python路径:

$ cp -r lib/gcforest/ ~/anaconda3/lib/python3.5/site-packages/

3.2 使用

from gcforest.gcforest import GCForest
gc = GCForest(config) # should be a dict
X_train_enc = gc.fit_transform(X_train, y_train)
y_pred = gc.predict(X_test)

四、总结

相比于深度神经网络,gcForest具有以下优点:

1. 对于某些领域,gcForest的性能较之深度神经网络具有很强的竞争力;

2. gcForest所需参数少,容易训练;

3. gcForest对于超参数的设置不敏感,同样的超参数设置在不同数据集上都能获得很好的性能;

4. gcForest对于数据量没有要求,在小数据集上也能获得很好的性能。

【参考文献】

Deep Forest: Towards an Alternative to Deep Neural Networks

 


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

相关文章

从深度学习到深度森林方法(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…

windows server 2008R2/2012R2安装

Windows安装 1.镜像下载 镜像网站&#xff1a;https://msdn.itellyou.cn/ Windows Server 2012R2&#xff1a;cn_windows_server_2012_r2_vl_x64_dvd_2979220.iso 迅雷下载地址&#xff1a;ed2k://|file|cn_windows_server_2012_r2_vl_x64_dvd_2979220.iso|4453249024|1F71…

windowsserver2012R2安装教程

下载windowsserver2012R2系统镜像。 刻录光盘或是写入到U盘做成启动u盘&#xff0c;操作文档可搜索iso写入U盘。 服务器或是电脑开机从U盘启动安装。 现在安装。 输入激活码 NH3KG-P864D-XYCJH-82DMH-4CX8M -- Standard 7H6M3-4N78W-RFFKJ-H9KPW-K2C2M -- Datacenter 安装什…