1. 材料数据清洗与特征工程导论
材料信息学把“成分—工艺—结构—性能”之间的关系当作可计算对象,而支撑这种计算的前提,是先把分散、异构、噪声严重的材料数据整理成可建模、可复现、可解释的数据集。材料数据清洗与特征工程,正是连接原始实验/计算记录与机器学习模型之间的关键工序。它既不是简单的“删空值”,也不是把数据丢进算法前的例行公事,而是决定模型上限、影响结论可信度的核心环节。
材料数据的四个典型特点
与图像、文本等常见数据相比,材料数据有鲜明的领域属性。第一是小样本、高维度:一个合金体系可能只有几十到几百条可靠实验记录,但描述符可以扩展到元素比例、原子半径、电负性、价电子浓度、混合焓、工艺温度、保温时间等几十甚至上百维。第二是多源异构:数据可能来自文献表格、实验记录本、DFT 计算输出、数据库导出、图像测量结果,单位、精度、命名方式都不统一。第三是噪声与缺失并存:性能测试存在仪器误差和批次差异,部分样品缺少成分微调记录或热处理细节。第四是物理约束强:成分归一化、电荷守恒、热力学可行性、相图边界等约束必须被尊重,否则会生成物理上不存在的“假样本”。
数据从哪里来
材料数据的主要来源可以分成四类。实验数据来自拉伸试验、硬度测试、电化学测试、热分析等,通常样本量小但物理意义明确;计算数据来自第一性原理、分子动力学、相场模拟等,规模大但依赖泛函和势函数选择;文献与数据库数据来自 Materials Project、OQMD、AFLOW、NIMS 等平台以及论文补充材料,覆盖面广但需要做实体对齐;过程与工艺数据来自设备日志和批次记录,包含温度曲线、气氛、冷却速率等时间序列信息。实际项目中,这四类数据往往需要合并到同一张“材料—工艺—性能”主表中,才能进入后续建模。
清洗与特征工程在材料信息学中的定位
可以把材料信息学的完整链路理解为:数据获取 → 数据清洗 → 特征工程 → 模型训练 → 验证与解释 → 实验反馈。清洗解决“数据能不能用”的问题,包括去重、单位统一、异常值识别、缺失值处理、成分归一化、批次一致性检查;特征工程解决“数据好不好用”的问题,包括物理描述符构造、量纲缩放、特征筛选、降维、编码分类变量、构造交互项。两者共同决定模型能否学到真实的构效关系,而不是记住噪声或数据泄漏。
整体工作流程
下面这张图给出从原始记录到可训练特征矩阵的主链路,并标出每一步最值得关注的检查点。它强调的不是“步骤数量”,而是数据形态和风险控制点的变化。
一个可执行的最小示例
假设我们有一份铝合金实验数据,字段包括 Al、Mg、Cu、Zn 的质量分数,T_sol(固溶温度,℃)、t_age(时效时间,h)、HV(硬度,HV)。原始数据中成分列有的按质量分数、有的按原子分数,且部分行总和不为 100。清洗时先统一为原子分数并归一化,再检查 HV 是否超出合理范围(例如 20–250 HV),对缺失的 t_age 按同批次中位数填补并打上标记。特征工程阶段可以构造 Mg/Zn 比、Cu+Mg 总量、固溶温度与时效时间的交互项,以及基于元素性质的加权平均原子半径。下面给出一个可参考的清洗与特征构造片段:
import pandas as pd
import numpy as np
df = pd.read_csv("al_alloy_raw.csv")
# 1) 成分归一化到 100 at.%
comp_cols = ["Al", "Mg", "Cu", "Zn"]
df[comp_cols] = df[comp_cols].div(df[comp_cols].sum(axis=1), axis=0) * 100
# 2) 异常值标记(不直接删除,保留可追溯性)
df["HV_flag"] = ~df["HV"].between(20, 250)
# 3) 缺失值处理:按批次中位数填补,并记录来源
df["t_age"] = df.groupby("batch")["t_age"].transform(
lambda s: s.fillna(s.median())
)
df["t_age_imputed"] = df["t_age"].isna()
# 4) 特征构造
df["Mg_Zn_ratio"] = df["Mg"] / df["Zn"].replace(0, np.nan)
df["Cu_Mg_sum"] = df["Cu"] + df["Mg"]
df["T_x_t"] = df["T_sol"] * df["t_age"]
# 5) 输出特征矩阵
X = df[["Al", "Mg", "Cu", "Zn", "T_sol", "t_age",
"Mg_Zn_ratio", "Cu_Mg_sum", "T_x_t"]]
y = df["HV"]
print(X.shape, y.shape)
运行后应检查 X.shape 是否与样本数一致,Mg_Zn_ratio 是否出现 inf 或异常大值,T_x_t 的量纲是否合理。如果某些特征在训练集和验证集上的分布差异过大,说明划分方式或清洗规则可能引入了偏差,需要回到清洗阶段调整。
常见风险与判断依据
- 数据泄漏:用全量数据计算均值再划分训练/验证,会把验证集信息带入训练。应按批次、合金体系或时间划分后再做统计。
- 单位不一致:质量分数与原子分数混用会导致成分描述符完全失真,必须显式记录转换依据。
- 过度清洗:把极端样品直接删除,可能丢掉最有价值的相变或强化信息。更稳妥的是标记并保留,在建模时做敏感性分析。
- 特征不可解释:纯数据驱动的多项式组合可能提升指标,但若与物理机制冲突,外推能力往往很差。优先选择有材料学含义的描述符。