Tabular Foundation Models
表格基础模型只需一次前向传播,就能对新表格进行预测,无需训练。了解 TabPFN 的工作原理,以及它何时优于提升树。
表格基础模型是预训练的神经网络,可以对新的行列表格和列列表格进行预测,而无需针对这些表格进行训练。给定带标签的表格和一组待预测行后,它们会使用上下文学习:带标签的行作为上下文输入模型,一次前向传播就能返回所有新行的预测结果,无需进行梯度下降更新。像 XGBoost、LightGBM 或 CatBoost 这样的梯度提升树模型,必须针对每个数据集单独拟合和调优。表格基础模型只需训练一次,就能将学到的知识应用于收到的任意小型表格。
TabPFN 如何从合成表格中学习#
最知名的例子是 TabPFN(表格先验数据拟合网络),由 Noah Hollmann、Samuel Müller、Frank Hutter 及其同事在弗赖堡大学创建,目前由 Prior Labs 公司继续开发。它是一种完全基于合成数据预训练的 Transformer。预训练会从数据生成过程的先验分布中抽取数百万个人工数据集,其中大多是随机结构因果模型,通过随机函数和噪声将特征与目标关联起来。对于每个合成数据集,网络会看到部分带标签的行,并学习预测留出的行,这是一种元学习。在大量此类任务中,网络学会近似该先验上的贝叶斯推断,因此在预测时,它表现得像一个学得的统计过程,而不是针对特定领域建立的模型。
首个版本于 ICLR 2023 发布,可处理最多 1,000 个训练行、100 个数值特征和 10 个类别的分类任务;其表现与 AutoML 系统相当,运行速度最高快 230 倍。TabPFN v2 于 2025 年 1 月发表于 Nature,将方法扩展到最多 10,000 行、500 个特征的数据集分类和回归,其中包括类别特征和缺失值。在分类任务中,运行 2.8 秒的 TabPFN v2 就胜过了经过 4 小时调优的最强基线集成。版本 2 为每个表格单元格提供独立表示,并在列间和行间交替进行注意力计算,因此不依赖固定的列顺序。后续版本进一步提高了上限;2026 年 5 月发布的 TabPFN-3 最多可接收 100 万个训练行。其他表格基础模型,例如 TabICL 和 Amazon 的 Mitra,也遵循相同方案:在合成表格上预训练,并在上下文中进行预测。
它们与梯度提升树的适用场景#
- 小型数据集:对于几百到几千行的数据,表格基础模型通常无需进行超参数搜索,就能达到或超过经过调优的树模型,而且其预测概率通常校准良好。
- 大型数据集:对于数百万行数据,提升树仍是实用的默认选择。注意力的成本会随着上下文行数增长,因此基础模型需要 GPU 和更多内存;每个预测批次还要重新处理完整的训练上下文,所以推理速度比计算树集成更慢。
- 自动化机器学习:AutoML 会针对每个新数据集搜索算法和设置。表格基础模型则用预训练期间一次性学到的知识,取代其中大部分搜索过程。
- 特征工程:仍然有用。如果列中缺少信息,模型无法将其恢复;如果标签有误,模型也无法修正。
运行 TabPFN#
tabpfn 包提供了一个符合 scikit-learn 风格的分类器。只有登录并接受 Prior Labs 的模型许可协议后,才能下载最新检查点;而下面选用的 v2 权重无需这一步即可下载:
from sklearn.datasets import load_breast_cancer
from sklearn.metrics import roc_auc_score
from sklearn.model_selection import train_test_split
from tabpfn import TabPFNClassifier
from tabpfn.constants import ModelVersion
# 569 tumors described by 30 numeric measurements
features, targets = load_breast_cancer(return_X_y=True)
x_train, x_test, y_train, y_test = train_test_split(features, targets, test_size=0.2, random_state=0)
# fit() stores the labeled rows as context; no weights are updated
model = TabPFNClassifier.create_default_for_version(ModelVersion.V2)
model.fit(x_train, y_train)
# One forward pass predicts every test row from that context
probabilities = model.predict_proba(x_test)[:, 1]
print(f"ROC AUC: {roc_auc_score(y_test, probabilities):.3f}")在未设置任何超参数的情况下,分类器在这个留出拆分上的 ROC AUC 约为 0.998。模型比较会在许多数据集上进行重复交叉验证,因为只有 114 行的测试拆分太小,无法区分性能强劲的模型。
许多实用表格由其他模型的输出构建而成。许多实用表格由其他模型的输出构建而成。在预测模式下,result.to_df() 会将每个 Ultralytics YOLO26 结果作为 Polars DataFrame 返回,每行对应一个检测结果,列包含类别名称、类别 ID、置信度和边界框坐标。这种行列格式正是表格基础模型用作上下文的格式。










