第四章:材料特征工程与描述符
做材料发现这些年,我越来越觉得:特征工程比模型本身更重要。你想想看,模型再牛,喂进去的是垃圾,出来的还是垃圾。这就像做菜——食材不好,厨神也救不了。
这一章,我们就聊聊怎么把材料的“基因”提取出来,变成计算机能理解的语言。
4.1 元素属性特征:材料的“身份证”
每个元素都有自己的脾气。比如电负性、原子半径、电离能、价电子数……这些基础属性,就是材料的“身份证号”。
我个人习惯,先把元素周期表上的常见属性整理成一个表:
| 属性 | 含义 | 典型用途 |
|---|---|---|
| 电负性 | 原子吸引电子的能力 | 判断键的极性、反应活性 |
| 原子半径 | 原子的大小 | 预测晶格常数、掺杂难易 |
| 电离能 | 失去电子的难易 | 判断金属性、催化活性 |
| 价电子数 | 参与成键的电子数 | 预测化合价、配位方式 |
但光有单个元素属性还不够。做合金或化合物时,我们得算组合属性。比如A-B二元体系,我常用:
- 电负性差:Δχ = |χ_A - χ_B|,越大越容易形成离子键
- 原子半径比:r_A / r_B,影响固溶度
- 价电子浓度:VEC = (V_A + V_B) / 2,预测相稳定性
避坑指南:我曾经在预测高熵合金的相结构时,只用了电负性差,结果模型一塌糊涂。后来发现,必须同时考虑原子尺寸差和混合焓,三个特征缺一不可。
4.2 结构特征:RDF 与 ADF
元素属性是“静态”的,但材料性能往往取决于“动态”的结构。这里就要请出两个老朋友:径向分布函数(RDF)和角分布函数(ADF)。
4.2.1 径向分布函数(RDF)
RDF说白了就是:以某个原子为中心,其他原子在距离r处出现的概率。它能告诉我们材料的短程有序和长程有序。
举个例子,我做过一个非晶合金的项目。晶态和非晶的RDF长啥样?
- 晶态:尖锐的峰,长程有序,峰位对应晶面间距
- 非晶:宽化的峰,短程有序,长程无序
代码实现其实不复杂,用Python的pymatgen库就能算:
from pymatgen.analysis.diffraction.xrd import XRDCalculator
from pymatgen.core import Structure
# 加载结构
struct = Structure.from_file("POSCAR")
# 计算RDF(这里用XRD模拟,实际RDF用MD或DFT输出)
calculator = XRDCalculator()
pattern = calculator.get_pattern(struct)
# 提取峰位和强度
for peak in pattern.x:
print(f"2θ = {peak:.2f}°, d = {pattern.d_hkls:.3f} Å")
我的经验:RDF的截断半径很关键。太短会丢失长程信息,太长又引入噪声。我一般取10-15 Å,具体看体系大小。
4.2.2 角分布函数(ADF)
ADF关注的是键角分布。比如水分子H-O-H的键角是104.5°,如果算出来偏离太多,说明结构有问题。
ADF在描述配位几何时特别有用。比如:
- 四面体配位:键角约109.5°
- 八面体配位:键角90°和180°
- 三角平面:键角120°
我曾在做MOF材料时,用ADF判断孔道结构的扭曲程度。嗯,这个方法比肉眼盯着看靠谱多了。
4.3 组合特征:1+1 > 2
单个特征往往不够用。把多个特征组合起来,常常能发现意想不到的规律。
我常用的组合方式有:
- 加法组合:比如电负性 + 原子半径,形成“离子势”
- 乘法组合:比如电负性 × 价电子数,描述成键强度
- 比值组合:比如半径比、电负性比,无量纲化后更稳定
- 多项式组合:比如 (电负性差)^2,捕捉非线性关系
举个例子:预测钙钛矿的容忍因子t时,公式是 t = (r_A + r_O) / √2(r_B + r_O)。这就是一个典型的组合特征——把A位、B位和氧的半径组合在一起,直接决定了结构的稳定性。
4.4 领域知识嵌入:让模型“懂”物理
纯数据驱动的方法有个问题:它不知道物理规律。比如它可能预测出“负的弹性模量”,这在物理上是不可能的。
所以,我建议把领域知识嵌入到特征中。怎么做?
- 物理约束:比如能量必须为正,力必须平衡
- 对称性约束:比如晶体学对称操作,特征必须保持不变
- 热力学约束:比如吉布斯自由能最小化
我做过一个项目,预测催化剂的吸附能。纯数据模型误差很大,后来我把d带中心(一个物理量)作为特征嵌入,误差直接降了一半。
注意:领域知识嵌入不是越多越好。加太多约束,模型会变得僵化,失去泛化能力。我的原则是:只加那些经过实验验证的、普适的物理规律。
4.5 本章知识体系
下面这张图,是我梳理的本章核心逻辑。你可以把它当作一个“特征工程路线图”:
这张图把四个核心模块串起来了。从左到右,从基础到高级。我个人建议,做特征工程时,先走一遍这个流程:元素属性 → 结构特征 → 组合特征 → 领域知识嵌入。每一步都问自己:这个特征真的有用吗?
最后一个小技巧:特征不是越多越好。我见过有人堆了200个特征,结果模型过拟合得一塌糊涂。记住奥卡姆剃刀——如无必要,勿增实体。先选10-20个关键特征,跑通了再加。
公众号:蓝海资料掘金营,微信deep3321