You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAI TabularLearner中prob与class输出相同张量的问题及procs疑问

FastAI泰坦尼克Tabular Learner问题解答

问题背景

本人是FastAI新手,刚完成FastAI第一节课,正在使用Kaggle的“Machine Learning From Disaster”泰坦尼克数据集实现Tabular Learner,代码如下:

from fastcore.all import *
from fastai.tabular.all import *
df = pd.read_csv('/kaggle/input/titanic/train.csv')

# 保留相关变量
df = df[['Survived', 'Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare']]

# 分类变量与连续变量定义
cat_names = ['Sex', 'Pclass']
cont_names = ['Age', 'SibSp', 'Parch', 'Fare']

# 不清楚作用,但示例代码中存在且似乎必要
procs = [Categorify, FillMissing, Normalize]

dls = TabularDataLoaders.from_df(df, procs=procs, cat_names=cat_names, cont_names=cont_names, y_names="Survived", bs=64)

learner = tabular_learner(dls)
learner.fit(50)

# 预测样本:输入前去掉目标列
sample = df.iloc[0]
sample = sample.drop(['Survived'])

row, clas, prob = learner.predict(sample)

打印row的结果:

Sex  Pclass  Age_na       Age     SibSp     Parch     Fare  Survived
0  1.0     3.0     1.0 -1.983648  0.401285  0.751157 -0.32982  0.711407

但打印clas和prob时得到相同张量,而clas本应返回0或1的分类索引:

clas: tensor([0.7114])
prob: tensor([0.7114])

问题

  1. 为何会出现这种情况?
  2. procs是什么,为何是必要的?

问题解答

1. clas与prob返回相同值的原因

这是因为未明确指定任务为二分类任务。默认状态下,tabular_learner会把Survived列的0/1数值当作回归任务处理,而非分类任务。此时模型输出的是连续值,clas和prob都会返回这个连续预测值,而非分类索引和对应概率。

解决方法:初始化tabular_learner时指定分类相关的指标或损失函数,让FastAI识别这是分类任务。例如:

# 指定准确率指标,自动触发分类模式
learner = tabular_learner(dls, metrics=accuracy)
# 或者明确指定分类损失函数
learner = tabular_learner(dls, loss_func=CrossEntropyLossFlat(), metrics=accuracy)

修改后训练,clas会返回0或1的分类索引,prob会返回对应两个类别的概率数组(如tensor([0.2886, 0.7114]),分别对应未存活和存活的概率)。

2. procs的作用与必要性

procs是FastAI中用于表格数据预处理的操作集合,每个元素是一个预处理类,负责将原始表格数据转换为模型可接收的格式:

  • Categorify:将字符串或离散分类变量(如Sex、Pclass)转换为数字编码,同时建立类别与索引的映射,让模型能处理非数值型分类特征。
  • FillMissing:自动填充连续变量中的缺失值(如泰坦尼克数据集的Age列存在大量缺失),并且新增[列名]_na列(如Age_na)标记该位置是否为填充的缺失值,给模型补充额外特征信息。
  • Normalize:对连续变量做标准化处理(减去均值、除以标准差),让所有连续特征处于相近的数值范围,避免数值较大的特征主导模型训练,提升模型收敛速度与效果。

这些预处理是必须的:原始表格数据通常存在非数值分类、缺失值、数值范围差异大等问题,直接输入模型会导致训练失败或效果极差,procs自动化完成这些标准化流程,符合深度学习模型的输入要求。


内容的提问来源于stack exchange,提问作者Shrey Joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:31:14