如何评价周志华深度森林模型

article/2025/9/25 18:34:53

这篇文章背后的思路实际上是这样的:

DNN(或者说 MLP)其实就是堆起来的广义线性模型(比如 logistic,但也有其他激活函数)。它能够自动发现特征与标签之间的非线性关系,当决策边界非线性,并且你懒得手动去找非线性关系时,可以用它一把梭。

既然广义线性模型能这么玩,为何随机森林,或其它回归器/预测器能不能也这么玩?随机森林本身就是集成了,为何要再集成一次,不要关心这个,这个模型的好处就是,随机森林可以无缝替换为任何预测器。

答案当然是可以,但有个小的变化。要注意广义线性模型是参数模型,所以在 DNN 中,我们采用非贪婪式(也就是所谓的端到端)训练(除了自编码器)。但如果把随机森林堆起来,就不能这样,因为没有所谓的正向和反向传播过程。只能将每个森林训练完毕,再把输出扔给下一层。

后来它就成为了 Kaggle 上常用的 Stacking,或者 Blending 集成:

原理大致是这样:

将输入分成互斥的 K 份,对于每一份训练一个预测器,使用其它几份用于训练,当前的那份用于预测。将这些预测器放进一组,并连接预测结果。之后,重复这个操作来训练几组其它的预测器(最好是不同类型的),并得到其它一些预测结果。将这些预测结果叠起来作为新的特征,重复这个过程。在最后一轮重复中进行常规的分类或者回归操作。

以上是训练过程,对于预测过程,将输入依次扔给每一轮的每组预测器,每组的结果取平均(或众数),不同组的结果堆叠起来扔给下一层。

要注意两点:1)对于任何一个预测器,训练集和测试集都是不相交的,这样保证了它的质量。2)经过一轮之后,下一轮的输入还是个数据集,也就是说这个过程可以反复进行下去。不出现过拟合的情况下,你想进行多少轮就进行多少轮,每轮想创建几组就创建几组。

的确这样很有效,不仅仅根据论文里的数据,这种方法长期占据 Kaggle 的前 10% 就足以说明这一点。

除了有效之外,这种方法实现了非参数预测器的堆叠。众所周知,非参数预测器的开销比参数预测器小的多,所以 Stacking 开销据说也比 DNN 小。

但我不得不说,从思路上来看的确很水,于是就变了谁先把数据跑对了谁能发 paper。据说我这边一个师兄也提前想出来了,并且做出来了,效果不错,但是他发在了 bioinfo 的相关期刊上,根本没人注意。可见选对领域很重要,跟着生物真是倒八辈子霉。

以上。


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

相关文章

gcForest分布式深度森林及其在套现欺诈自动检测中的应用

分布式深度森林及其在套现欺诈自动检测中的应用 摘要 互联网企业每天面对处理大规模机器学习应用的请求,需要一个能够处理超大数据任务的分布式系统.深度森林是最近提出的一个利用树作为组件深度学习框架,在各种领域取得不错的结果.然而并没有在超大规模数据任务上测试.在这项…

【论文解读】关于深度森林的一点理解

2017年年初,南京大学周志华老师上传了一篇名为:Deep Forest:Towards An Alternative to Deep Neural Networks的论文,一石激起千层浪,各大媒体纷纷讨论着,这似乎意味着机器学习的天色要变,实则不…

随机森林算法的扩展-深度森林(deep forest)

深度学习最大的贡献,个人认为就是表征学习(representation learning),通过端到端的训练,发现更好的features,而后面用于分类(或其他任务)的输出function,往往也只是普通的…

多标签学习与深度森林学习笔记

周志华老师团队Multi-Label Learning with Deep Forest (MLDF)报道很多,各大机器学习平台也都就这篇文章的亮点给出了分析。近日在准备组会报告时较为详细地拜读了一下,也由此简单了解了一下多标签学习的相关内容。 正如论文作者所述,MLDF的…

论文阅读:Deep forest/深度森林/gcForest

最近组会汇报了这篇文章,简单把思想梳理下来了,对了搜索深度森林的时候可能会看到Deep Forest: Towards an Alternative to Deep Neural Networks,这两篇文章的内容基本上是一致的,只在叙述方面有一些很小的不同。 下面是我做的p…

【冰糖Python】深度森林 DeepForest

此文为记录DeepForest的简单使用 原文《Deep Forest: Towards an Alternative to Deep Neural Networks》 “A key advantage of deep forest is its adaptive model complexity depending on the dataset. The default setting on hyper-parameters enables it to perform r…

使用深度森林(Deep Forest)进行分类-Python

一、什么是深度森林? 传统DNN的不足: 1、需要大量的数据集来训练; 2、DNN的模型太复杂; 3、DNN有着太多的超参数 gcForest的优势: 1、更容易训练; 2、性能更佳; 3、效率高且可扩展、支持…

深度森林浅析

深度森林 深度学习最大的贡献是表征学习(representation learning),通过端到端的训练,发现更好的features,而后面用于分类(或其他任务)的输出function,往往也只是普通的softmax&…

深度森林原理及实现

目录 背景 级联森林 多粒度扫描 代码 总结 背景 深度森林(Deep Forest)是周志华教授和冯霁博士在2017年2月28日发表的论文《Deep Forest: Towards An Alternative to Deep Neural Networks》中提出来的一种新的可以与深度神经网络相媲美的基于树的模型,其结构…

论文阅读:深度森林

论文地址:https://arxiv.org/pdf/1702.08835.pdf 相关代码:https://github.com/kingfengji/gcForest 深度森林是南大周志华老师前两年提出的一种基于随机森林的深度学习模型。 当前的深度学习模型大多基于深度学习神经网络(DNN)…

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("…