Deep Forest:一种深度神经网络的替代模型架构

本文介绍了周志华教授团队提出的DeepForest模型,这是一种结合了随机森林与深度学习优点的方法。该模型通过多层次的森林结构处理图像和文本数据,表现媲美深度神经网络,但减少了对大量数据的依赖并提高了模型的泛化能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇博客主要参考了周志华老师团队在2017年IJCAI上发表的论文《Deep Forest: Towards an Alternative to Deep Neural Networks》。这篇文章的主要贡献是把深层次的神经网络的原理运用到了传统的机器学习算法“random forest”中去,并取得了和深度学习神经网络相当的效果。

众所周知,现在深度学习在工业界和学术界都非常的火,各种基于卷积神经网络和循环神经网络的各种模型在图像、文本处理方面都取得了很好的效果。在机器学习领域,现在几乎所有人的目光都转移到了基于深度学习模型的各种任务上来,即通过构建更加合理的神经网络结构提高基础模型的准确率;与之相对,那些传统的机器学习算法貌似被忽略了不少。而在这篇文章中,周志华老师就另辟蹊径,将随机森林模型进行有机的组合(主要是在深度上进行扩展),在文本和图像处理方面达到了和深度神经网络相当的效果。

首先,周老师提了一下目前深度神经网络的2个重要弊端:1 需要较大量的训练数据;2 针对A任务训练出来的网络结构,往往在B任务中效果非常的差,即基于深度神经网络的模型对任务敏感度更高,这样训练神经网络的过程更像是一种艺术技巧而非一种工程技巧。针对以上的两个问题,周老师将传统机器学习模型中的随机森林作为基础模型,提出了如下具有层级结构的网络:
Cascade Forest structure
这里写图片描述

图中的示例任务是一个三分类的任务,从上图可以清楚的看出,输入的特征向量在经过level 1的4个随机森林之后,转换为了4个维度为3的向量,向量每一维的含义是该样例属于该类别的概率,接下来在输入level 2的时候是将这12维的向量和之前的输入拼接起来进行输入,依次类推直到最后一层,然后把最后一层的4个3维向量对位取平均,最大的那一维就是该样例所属的类别。在每一层的4个forest中,两个黑的代表了2棵包含了500棵树的“Random forest”(即每一棵树的生成样本都是对原始数据进行有放回的抽样获得,所依赖的特征是随机从所有特征中抽取 n n 个 特 征 ,在树节点进行分裂的时候采取Gini指数进行特征筛选);而两个蓝的代表了2棵包含了500棵树的“Complete-random forest”(即每一棵树的生成样本都是对原始数据进行有放回的抽样获得,但是在树节点进行分裂的时候是随机选取一个特征进行分裂,这样得到的树模型会具有更高的鲁棒性)。但是针对每一层森林进行训练的时候,为了增强整体模型的鲁棒性,使用k-fold交叉验证的方式来确定每一个数据的概率分布向量值,具体执行起来就是将所有的数据划分成k份,每次都挑选其中的k-1份来进行训练,这样就会生成k个不同的模型。很显然每一个数据都会在其中的k-1模型中训练到,然后平均这k-1个模型的输出概率向量值来作为这个样本针对下一层的输入值。
大家可能注意到的是,在该应用场景中每一个森林的输出都是一个三维的向量,每一维度都代表了属于该类别的概率,具体是通过下图做到的:
这里写图片描述
可以看出在该森林中,每一棵决策树的输出都是一个三维的向量,然后把这些三维向量进行平均就得到了该森林的三维输出向量。那么每一棵树的三维向量是如何得到的呢,就是在训练集上落在每一个叶子节点中各个类别样本的比例。

在深度神经网络中有两种基本的模型:卷积神经网络和循环神经网络,分别用力处理具有序列特征和二维空间的数据,周老师结合这两种网络的本质原理,提出了一种被称之为Multi-Grained Scanning的网络结构,当然肯定也是基于随机森林,其结构如下所示:
Multi-Grained Scanning
这里写图片描述
首先采用滑窗法进行特征的提取,上面那个是进行序列数据的特征提取,下面按个是进行二维空间数据的特征提取,我们以下面那个为例来进行说明。这个图片本身大小是20*20,采用卷积窗口的大小是10*10,那么采用slide为1的移动步长就会产生(20-10+1)*(20-10+1)=121 个扫描结果。这里需要注意的“ All feature vectors extracted from positive/negative training examples are regarded as positive/negative instances”,也就是说这121个结果的label都是一致的(反正我这里感觉有点不太对劲),然后同样是两颗具有500棵树的森林(一蓝一黑),把这121个扫描碎片变成了121个3维向量,然后把这些向量进行拼接,就得到了原始图像的向量化表示。(这里训练forest A和forest B的时候,应该是把所有的图像一起输入,把这些图像对应的121个碎片一起进行训练)

我们从上面可以看到,把Multi-Grained Scanning和Cascade Forest structure进行组合,就可以得到了一个能够对图片进行分类的类深度卷积网络,如下图所示:
这里写图片描述
该例子以一个处理序列输入信号为例,来说明了该网络的工作原理。首先在Multi-Grained Scanning部分,可以看到有三个逻辑构建组成,这三个唯一的不同就是扫描的窗口大小不同(对应了CNN中不同的卷积器大小),这样一个样本在经过了Multi-Grained Scanning之后就变成了三个向量(分别对应了三个不同的卷积窗口,为了方便表示我们称之为A,B和C)。 然后首先A向量给level 1的4个forest进行训练,然后把level 1的4个输出向量和A拼起来进行level 2的4个forest的训练,以此类推知道最后一层输出结果。我个人感觉这样的层级连接结构和深度神经网络特别的像,只不过在训练模型的时候,深度神经网络采用了误差反向传播的方式,而该模型则是一层一层的进行训练,他的停止条件感觉也很特别:就是在新加一层之后模型在validate set上的准确率没有明显提升的话,就停止增长。

接下来周老师在多个数据集合多个任务上把他提出的模型和传统的深度神经网络进行对比,充分说明他提出模型的有效性和对不同任务的鲁棒性(即同一种结构的模型可以适配多种应用场景,就像图中的forest都是500棵树,在Multi-Grained Scanning中每一个扫描都采用了2个forest进行编码,在cascade forest部分每一个level的forest数量都是4个,而且是两黑两蓝)。同时周老师还提到,如果把最后一层的4个random forest换成GBDT的话效果还能够提升。

在未来工作方面,周老师指出该论文中在随机森林输出部分只是采取了最简单的一种对输入的编码方式,因为只利用到了随机森林的输出概率向量,其他的信息并没有利用到:比方说落入点的父节点信息,或者每一棵决策树对于一个样本判定的路径信息等。

不管怎样,周老师的这篇文章为我们打开了一个全新的视角来审视当下最火的深度神经网络模型和传统的机器学习算法的结合,还是挺有意义的。另外该模型的代码地址为:https://github.com/kingfengji/gcforest

<think>好的,用户想知道有哪些机器学习模型的性能比随机森林更优。首先,我需要回顾一下随机森林的特点。随机森林属于集成学习算法,通过多个决策树的投票或平均来提高准确性和鲁棒性,适用于分类和回归任务,尤其在处理高维数据和防止过拟合方面表现不错。用户可能已经了解随机森林的优点,现在想寻找更优的替代模型。 接下来,我应该考虑哪些模型通常在性能上超过随机森林。根据已有的知识,梯度提升机(如XGBoost、LightGBM、CatBoost)通常在结构化数据任务中表现更好,因为它们通过逐步修正错误来优化模型。此外,深度神经网络在处理非结构化数据(如图像、文本)时具有优势,但需要大量数据和计算资源。支持向量机(SVM)在高维稀疏数据或小样本情况下可能更好,而最近邻方法在低维稠密数据中有时更优。还有深度森林这样的模型,可能在某些场景下超越随机森林。 需要注意不同模型适用的数据类型和任务类型。例如,梯度提升对结构化数据有效,而神经网络适合非结构化数据。另外,模型比较还要考虑数据集大小、特征类型、计算资源等因素。用户可能没有明确这些细节,因此回答中需要提到这些影响因素,并建议根据具体情况选择模型。 还要检查是否有相关引用支持这些观点。例如,引用[3]提到随机生存森林在某些情况下优于传统方法,但可能其他集成方法如XGBoost在预测准确度上更高。同时,引用[4]提到交叉验证和参数调优的重要性,这可能影响模型性能比较的结果。 需要确保回答结构清晰,分点列出模型,并简要说明其优势和适用场景。最后提醒用户模型性能依赖于具体问题,建议通过实验验证。</think>根据当前机器学习领域的研究和实践,以下几种模型在特定场景下可能表现出优于随机森林的性能: ### 1. **梯度提升机 (Gradient Boosting Machines, GBM)** - **代表算法**:XGBoost、LightGBM、CatBoost - **优势**:通过序列化训练弱学习器(通常是决策树),逐步修正前序模型的误差,在结构化数据任务(如分类、回归)中通常能达到更高的预测精度。 - **适用场景**:金融风控、推荐系统、竞赛数据集等需要高精度的结构化数据任务。 - **数学表达**:目标函数为损失函数与正则化项之和 $$L(\theta) = \sum_{i=1}^n l(y_i, F(x_i;\theta)) + \sum_{k=1}^K \Omega(f_k)$$ 其中$F(x_i;\theta)$为集成模型,$\Omega(f_k)$为第$k$棵树的复杂度惩罚项[^4]。 ### 2. **深度神经网络 (Deep Neural Networks, DNN)** - **优势**:对非结构化数据(图像、文本、语音)具有强大的特征提取能力,通过多层非线性变换实现复杂模式识别。 - **适用场景**:计算机视觉、自然语言处理、时序数据分析。 - **案例**:在ImageNet图像分类任务中,ResNet等深度模型的准确率远超传统树模型。 ### 3. **支持向量机 (Support Vector Machines, SVM)** - **优势**:在高维稀疏数据或小样本场景中,通过核技巧实现有效分类边界划分。 - **适用场景**:文本分类、生物信息学中的基因数据分类。 - **数学表达**:优化目标为最大化间隔 $$\min_{w,b} \frac{1}{2}\|w\|^2 + C\sum_{i=1}^n \xi_i$$ 其中$C$为惩罚系数,$\xi_i$为松弛变量[^2]。 ### 4. **深度森林 (Deep Forest)** - **优势**:通过多层森林结构实现特征自动增强,在部分任务中表现优于传统随机森林。 - **特点**:每层森林的输出作为下一层的扩展特征,无需反向传播即可实现深度学习式的特征组合[^1]。 ### 5. **K-最近邻 (K-Nearest Neighbors, KNN)** - **优势**:在低维稠密数据中,基于局部相似性的预测可能更准确。 - **适用场景**:推荐系统(用户/物品特征维度低且稠密)、地理空间数据分析。 --- ### **模型性能对比的关键影响因素** 1. **数据规模**:随机森林在小数据上表现稳健,而神经网络需要大数据支撑 2. **特征类型**:结构化数据适合树模型,非结构化数据适合神经网络 3. **计算资源**:XGBoost训练速度优于深度森林,但GPU加速的神经网络效率更高 4. **任务类型**:生存分析中随机生存森林表现突出,但XGBoost-Survival可能更优[^3] --- ### **建议选择路径** 1. **结构化数据**:优先尝试XGBoost/LightGBM 2. **非结构化数据**:选择CNN/Transformer等深度架构 3. **需要可解释性**:可考虑SHAP值增强的梯度提升模型 4. **资源受限场景**:优化随机森林的超参数(如`max_depth`, `n_estimators`)可能比更换模型更有效[^4] 最终需通过交叉验证和特征工程确定最优模型,没有绝对"更优"的通用模型,只有更适合具体问题的解决方案。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值