
1) 【一句话结论】
多源数据(CFD计算与实验测量)的清洗与特征工程需分阶段处理(数据对齐、缺失/异常处理、物理一致性校验、特征提取与融合),结合船舶流体力学领域知识构建符合机器学习模型训练需求的统一、高质量训练数据集。
2) 【原理/概念讲解】
老师口吻解释核心概念:多源数据清洗针对CFD(数值模拟)和实验数据(测量)的差异,处理时间/空间步长不一致、缺失值(如CFD局部计算失败)、异常值(如实验设备故障);特征工程是从原始数据中提取对船舶流体力学预测(如阻力、升力)有意义的特征,如物理量(速度、压力)、统计量(均值、方差)、时序特征(梯度、积分)。简短类比:多源数据像不同来源的“流体样本”,清洗是去除杂质(如测量误差、计算缺失),特征工程是标注“物理属性(速度、压力)和统计属性(均值、方差)”,方便模型学习流体力学规律。
3) 【对比与适用场景】
| 方法类型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 缺失值处理 | 处理数据中的缺失值 | 均值/中位数填充(简单,可能引入偏差);机器学习插补(如KNN,更准确);删除(适用于少量缺失) | CFD数据局部缺失(如网格缺陷);实验数据少量缺失 | 均值填充可能改变数据分布,机器学习插补需足够样本 |
| 异常值检测 | 识别数据中的异常值(如离群点) | 统计方法(3σ原则,IQR);算法方法(Isolation Forest,局部异常因子) | 实验数据受干扰(如传感器故障);CFD计算误差 | 统计方法对分布敏感,算法方法更灵活 |
| 手工特征提取 | 领域专家手动设计特征 | 符合物理规律(如速度×面积);计算简单 | 船舶流体力学中物理量(速度、压力);统计量(均值、方差) | 需领域知识,可能遗漏重要特征 |
| 自动特征提取 | 机器学习自动生成特征 | PCA(降维)、自动编码器(特征压缩) | 高维数据(如CFD网格点数据);特征数量多 | 可能丢失物理意义,需结合手工特征 |
4) 【示例】
伪代码示例(处理CFD与实验数据):
# 步骤1:数据对齐(时间/空间步长)
def align_data(cfd_data, exp_data):
# 假设exp_data时间点更密集,用样条插值对齐CFD数据
cfd_aligned = pd.DataFrame()
for t in exp_data.index:
idx = cfd_data['time'].searchsorted(t, side='left')
if idx < len(cfd_data):
cfd_aligned = cfd_aligned.append(cfd_data.iloc[idx])
exp_aligned = exp_data
return cfd_aligned, exp_aligned
# 步骤2:缺失值处理(CFD用实验插补,实验用CFD插补)
def handle_missing(cfd_aligned, exp_aligned):
cfd_filled = cfd_aligned.fillna(exp_aligned) # CFD缺失用实验数据补
exp_filled = exp_aligned.fillna(cfd_filled) # 实验缺失用CFD数据补
return cfd_filled, exp_filled
# 步骤3:特征提取(物理量+统计量+物理一致性校验)
def extract_features(data):
# 物理量特征
features = {
'velocity': data['velocity'],
'pressure': data['pressure'],
'temp': data['temperature']
}
# 统计量特征
features.update({
'mean_velocity': data['velocity'].mean(),
'std_pressure': data['pressure'].std(),
'gradient': data['velocity'].diff()
})
# 物理一致性校验(伯努利方程:p + 0.5*ρ*v² = 常数)
data['bernoulli_residual'] = data['pressure'] + 0.5 * 1.225 * data['velocity']**2 - data['initial_pressure']
data = data[data['bernoulli_residual'].abs() < 100] # 假设阈值
return features
# 步骤4:数据融合
def merge_data(cfd_features, exp_features):
merged = pd.concat([cfd_features, exp_features], axis=1)
return merged
5) 【面试口播版答案】
面试官您好,针对船舶流体力学仿真中CFD计算结果与实验测量数据的清洗与特征工程问题,核心思路是分阶段处理:首先数据对齐,因为CFD和实验的时间/空间步长可能不同,用线性插值或样条插值对齐到统一步长(比如按时间点匹配);然后清洗,处理缺失值(比如CFD局部计算缺失用实验数据插补,实验数据缺失用CFD结果补全),检测异常值(如实验传感器故障的离群点,用Isolation Forest识别并剔除);接着特征工程,提取物理量特征(速度、压力等,符合流体力学基本方程),计算统计量(均值、方差),并校验物理一致性(比如压力与速度的关系是否符合伯努利方程,剔除不符合的异常特征);最后融合数据,形成包含物理和统计特征的训练集,用于模型训练。
6) 【追问清单】
7) 【常见坑/雷区】