为什么基于树的模型在表格数据任务中比深度学习更优?

2024-01-11 21:20

本文主要是介绍为什么基于树的模型在表格数据任务中比深度学习更优?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

论文 | Why do tree-based models still outperform deep learning on tabular data?

代码 | https://github.com/LeoGrin/tabular-benchmark

虽然深度学习在计算机视觉、自然语言处理等领域取得了显著的成果,但在处理表格数据任务方面,深度学习模型的表现并不如树模型。大多数从业人员和数据科学竞赛仍然倾向于使用树模型处理表格数据任务。本文通过研究回答了基于树模型(如随机森林)比深度学习表现更好的原因,以帮助我们了解为什么会出现这种情况,以及如何利用这些经验为我们的任务选择最适合的算法。

图片

问 :为什么在表格数据任务中基于树的模型优于深度学习?

原因1 :神经网络偏向输出过于平滑的解

简单来说,神经网络很难创建最佳拟合函数,特别是对于非平滑函数或决策边界时,而随机森林在处理奇怪、不规则或锯齿状模式时表现更好。这可能是由于神经网络使用了梯度反向传播进行参数更新。梯度依赖于可微分的参数空间,而这些空间的定义是平滑的。而尖锐、断裂和随机的函数通常是不可微分的。

下图清楚地展示了基于树的方法(随机森林)和深度学习器之间的决策边界差异。可以看到,随机森林能够在x轴(对应日期特征)上学习到MLP无法学习到的不规则模式。

图片

原因2 :无信息特征对神经网络影响更大

另一个非常重要的因素是特征的质量。如果将无关的特征输入神经网络,结果会非常糟糕(而且会浪费更多的资源来训练模型)。表格数据集包含许多无用信息特征。对于每个数据集,我们根据特征重要性(由随机森林排名)逐渐删除越来越多的特征。

下图4显示,去除高达一半的特征对GBT的分类准确性影响不大。此外,对于已删除特征的GBT进行测试的准确性(即低于某个特征重要性阈值的特征)在删除高达20%的特征时非常低,直到50%时才相当低,这表明大多数这些特征是无信息的,而不仅仅是冗余的。

图片


使用MLP的神经网络架构对无信息特征不够稳健。在下图5中展示的两个实验中,我们可以看到去除无信息特征(5a)减少了MLPs(Resnet)和其他模型(FT Transformers和基于树的模型)之间的性能差距,而添加无信息特征(5b)则扩大了这种差距。
 

图片


上述实验证明,删除无信息特征对于MLP模型的帮助更大,因此这些特征的减少可以抵消由于删除信息性特征而导致的准确性降低。

原因 3 :神经网络对特征的旋转具有不变性,但是表格数据通常不具备旋转不变性

特征的旋转不变性指的是,当数据发生旋转时,特征的值不发生改变。在图像识别中,例如边缘检测算子Sobel算子,它可以检测出图像中的边缘,而且在图像旋转的情况下,边缘的位置和方向可能会发生变化,但是Sobel算子检测到的边缘的强度和位置不会发生改变。

神经网络具有旋转不变性是因为它们的学习过程不依赖于特征的方向。当应用旋转矩阵时,神经网络的权重矩阵和输入特征矩阵都会被旋转,但由于神经网络的权重矩阵可以自适应地调整来适应旋转后的特征矩阵,因此神经网络的性能不会受到影响。这种旋转不变性使得神经网络能够在处理图像等数据时表现出色,因为图像的方向可能是任意的,但神经网络能够识别出相同的物体。

表格数据通常不具备旋转不变性。因为表格数据的每个特征都有固定的位置和方向,如果对表格数据进行旋转,特征的位置和方向也会随之改变,从而影响模型的性能。因此,在处理表格数据时,通常需要进行特征工程,将特征转换为具有旋转不变性的形式,例如使用极坐标表示数据。

下图6展示了随机旋转数据集时测试准确性的变化,证实只有Resnet具有旋转不变性。而且随机旋转会打乱模型的排序表现,NN模型高于基于树的模型,Resnet模型高于FT Transformer模型。

图片

本文分析了在表格数据任务中基于树的模型优于深度学习的几个可能的原因,包括目标函数中存在不规则模式、无信息特征以及不具有旋转不变性的表格数据。同时,本文还开源了一个测试基准,允许研究人员使用同样的方法和数据集来设计新的架构,并将其与论文的结果进行比较,以促进表格深度学习研究的发展。

TODO:build tabular-specific neural network

这篇关于为什么基于树的模型在表格数据任务中比深度学习更优?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/595736

相关文章

Java中注解与元数据示例详解

《Java中注解与元数据示例详解》Java注解和元数据是编程中重要的概念,用于描述程序元素的属性和用途,:本文主要介绍Java中注解与元数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参... 目录一、引言二、元数据的概念2.1 定义2.2 作用三、Java 注解的基础3.1 注解的定义3.2 内

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe