4. 多模态特征工程与预处理

多模态影像组学融合建模的第一步,不是急着把 CT、MRI、PET 的特征拼在一起,而是先让每一路特征“干净、可比、可融合”。多模态数据天然存在三类麻烦:不同模态的采集协议、体素间距、灰度分布不同;不同中心、不同扫描仪的批次差异会伪装成“生物学信号”;不同模态的缺失模式也完全不同。因此,本节把预处理拆成五个相互衔接的环节:缺失值处理、异常值检测、特征标准化、批次效应校正、模态特异性归一化策略。它们不是线性流水线,而是一个需要反复回看的闭环。

一、缺失值处理:先分清缺失机制

影像组学特征缺失通常有三种来源:一是模态本身缺失,例如部分患者只做了 CT 没做 MRI;二是分割或提取失败,例如肿瘤边界不清导致某类纹理特征无法计算;三是特征在某个中心被整列丢弃。处理前应先判断缺失比例:若某特征缺失率超过 40%,一般建议直接剔除;缺失率在 5%~40% 之间,可考虑插补;低于 5% 时,简单插补对模型影响有限。

对于连续型特征,常用中位数插补或 K 近邻插补。K 近邻插补的关键是距离度量必须建立在“已观测特征”上,且应先在训练集上拟合插补器,再变换验证集,避免信息泄漏。对于模态整体缺失,更合理的做法是“缺失指示 + 可用模态建模”:为每个模态增加一个 0/1 缺失标记,让模型显式知道该模态不可用,而不是用均值伪造一个看似合理的 MRI 特征。示例中,若某患者 MRI 缺失,可将其 MRI 特征全部置为训练集中位数,同时把 mri_missing 置为 1,并在融合层对该模态分支做掩码。

二、异常值检测:区分“错误值”与“真实极端”

异常值不等于错误值。影像组学中,某些高阶纹理特征本身分布偏态,出现极端值是正常的。因此建议先做分布诊断,再决定处理方式。常用方法有三类:基于统计的 Z 分数或 IQR 法则、基于密度的孤立森林、基于重构误差的自编码器。对单模态特征,IQR 法则简单有效:低于 Q1−1.5×IQR 或高于 Q3+1.5×IQR 的点标记为可疑。但要注意,若某中心整体偏移,IQR 会把该中心大量样本误判为异常。

更稳妥的策略是“分层检测”:先按中心分层计算 IQR,再合并可疑点;对确认由分割错误、单位错误或提取失败造成的异常值,采用截断(Winsorize)到 1% 和 99% 分位数;对无法判断来源的极端值,保留但增加鲁棒性变换,如对偏态特征做对数或 Box-Cox 变换。示例中,若某患者的 glcm_contrast 值为 0.002,而训练集中位数为 0.35,且该患者分割体积异常小,则应优先回查分割掩膜,而不是直接删除样本。

三、特征标准化:让不同量纲可比

不同影像组学特征的量纲差异极大:一阶统计特征可能在 0~3000 HU 之间,而形状特征可能在 0~1 之间。若直接送入 SVM、逻辑回归或 K 近邻,大尺度特征会主导距离计算。常用标准化方式包括 Z 分数标准化、Min-Max 归一化和鲁棒标准化。Z 分数适合近似正态分布的特征;Min-Max 适合需要固定边界的场景,但对异常值敏感;鲁棒标准化使用中位数和 IQR,更适合含异常值的影像组学特征。

关键原则是:标准化参数只能从训练集计算,再应用到验证集和测试集。若在全体数据上计算均值和方差,测试集信息会泄漏到训练过程,导致评估虚高。示例中,训练集某特征均值为 120.5、标准差为 18.3,则验证集样本应使用同一组参数变换,而不是重新计算验证集均值。

四、批次效应校正:把“中心差异”从信号中剥离

多中心数据中,批次效应常表现为同一特征在不同中心分布整体平移或缩放。若不加校正,模型可能学会“按中心分类”而非“按疾病分类”。常用方法有 ComBat、ComBat-Seq(针对计数数据)以及基于线性混合模型的校正。ComBat 的核心思想是:对每个特征,估计批次相关的位置和尺度参数,并在保留生物学协变量(如年龄、性别、标签)的前提下移除批次效应。

实际操作中,应把中心作为批次变量,把诊断标签作为保护协变量。若某中心样本量过小(如少于 10 例),ComBat 估计不稳定,可考虑将该中心与相近中心合并,或改用简单的中位数中心化。校正后应检查:不同中心的特征分布是否重叠增加,同时标签相关的差异是否仍然保留。若校正后标签区分度大幅下降,说明校正过度,需要调整保护协变量或改用更保守的方法。

五、模态特异性归一化策略:不是所有模态都该用同一把尺子

CT、MRI、PET 的物理意义不同,归一化策略也应不同。CT 的 HU 值具有绝对物理意义,通常只需窗宽窗位截断和 Z 分数标准化,不建议做全局 Min-Max,否则会破坏不同扫描间的可比性。MRI 没有绝对灰度标准,同一组织在不同序列、不同扫描仪下信号差异大,因此更适合按模态、按序列分别做 Z 分数或直方图匹配。PET 的 SUV 值虽有一定标准化,但受注射剂量、体重、扫描时间影响,建议先按体重或瘦体重归一化,再做鲁棒标准化。

融合前,还应对每个模态内部做“模态内标准化”,再对融合后的特征做“跨模态对齐”。例如,可先对 CT、MRI、PET 各自做鲁棒标准化,再用典型相关分析或对比学习把三个模态映射到共享空间。这样既保留了模态特异性,又让融合层看到的是可比表示。

多模态影像组学预处理闭环 缺失值 → 异常值 → 标准化 → 批次校正 → 模态特异性归一化 → 融合 CT 特征 HU · 形状 · 纹理 MRI 特征 T1/T2/DWI · 纹理 PET 特征 SUV · 代谢体积 ① 缺失值处理 • 缺失率 >40% → 剔除 • 5%~40% → KNN/中位数 • 模态缺失 → 指示变量 • 训练集拟合,验证集变换 mri_missing = 1 MRI 分支掩码 ② 异常值检测 • 分层 IQR / Z 分数 • 孤立森林 / 自编码器 • 回查分割与单位错误 • 截断至 1%~99% 分位 glcm_contrast 0.002 → 回查掩膜 ③ 特征标准化 • Z 分数:均值/标准差 • Min-Max:固定边界 • 鲁棒:中位数/IQR • 参数仅来自训练集 μ=120.5, σ=18.3 验证集复用同一参数 ④ 批次效应校正 • 批次 = 中心 / 扫描仪 • 保护协变量 = 诊断标签 • ComBat / 线性混合模型 ⑤ 模态特异性归一化 • CT:HU 截断 + Z 分数 • MRI:按序列 Z 分数 • PET:SUV 归一化 + 鲁棒 校正后回看分布 关键原则 训练集拟合,验证集变换 分层检测,避免中心误判 模态内归一化 + 跨模态对齐

六、把五个环节串成可复现的流程

实际项目中,建议把上述步骤固化为一个可复现的预处理脚本,并记录每一步的参数来源。下面给出一个简化的配置示例,用于说明关键参数应如何保存:

preprocess:
  missing:
    drop_threshold: 0.40
    imputer: knn
    n_neighbors: 5
    add_missing_indicator: true
  outlier:
    method: iqr
    factor: 1.5
    stratify_by: center
    action: winsorize
    lower_pct: 0.01
    upper_pct: 0.99
  scaling:
    method: robust
    fit_on: train
  batch:
    method: combat
    batch_key: center
    protect: [label, age]
  modality_norm:
    CT:  {method: zscore, clip_hu: [-1000, 3000]}
    MRI: {method: zscore, per_sequence: true}
    PET: {method: robust, suv_normalize: true}

执行后应输出三份诊断结果:一是缺失率与插补前后分布对比;二是异常值标记数量及处理前后箱线图;三是批次校正前后各中心特征的 PCA 或 t-SNE 重叠程度。判断标准是:校正后不同中心的样本应充分混合,但不同标签的样本仍应保持可分离。若两者不能同时满足,说明校正强度或保护协变量设置需要调整。

模态特异性归一化不是“多做一步”,而是融合建模能否成立的前提。CT 的 HU、MRI 的任意灰度、PET 的 SUV 若不做区分处理,融合层学到的可能只是扫描仪差异。
严禁在全体数据上计算标准化参数或插补参数。任何使用验证集/测试集统计量的操作,都会造成信息泄漏,使交叉验证结果虚高,最终在外部测试集上失效。

最后需要强调:预处理不是一次性动作。当新增中心、新增模态或更换扫描协议时,应重新检查缺失模式、异常值分布和批次效应,必要时重新拟合校正参数。把预处理参数与模型权重一起版本化管理,才能保证多模态融合模型在真实临床数据上稳定复现。