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 各自做鲁棒标准化,再用典型相关分析或对比学习把三个模态映射到共享空间。这样既保留了模态特异性,又让融合层看到的是可比表示。
六、把五个环节串成可复现的流程
实际项目中,建议把上述步骤固化为一个可复现的预处理脚本,并记录每一步的参数来源。下面给出一个简化的配置示例,用于说明关键参数应如何保存:
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 重叠程度。判断标准是:校正后不同中心的样本应充分混合,但不同标签的样本仍应保持可分离。若两者不能同时满足,说明校正强度或保护协变量设置需要调整。
最后需要强调:预处理不是一次性动作。当新增中心、新增模态或更换扫描协议时,应重新检查缺失模式、异常值分布和批次效应,必要时重新拟合校正参数。把预处理参数与模型权重一起版本化管理,才能保证多模态融合模型在真实临床数据上稳定复现。