1. 课程导论与材料数据基础

各位同学好,我是你们这门课的老朋友。今天咱们正式开篇,聊聊材料性能预测模型的根基——数据。

说实话,我刚开始做材料计算那会儿,哪有什么数据驱动啊。都是自己吭哧吭哧跑DFT,一个结构算三天,出来一条数据。现在想想,真是原始社会。但时代变了,材料基因组理念一出来,整个领域都换了玩法。

1.1 材料基因组理念:从试错到设计

材料基因组,说白了就是想把材料研发从「炒菜式」的试错,变成「搭积木式」的设计。你想想看,传统方法做个新材料,从配方到测试,少说三五年。但如果我们把材料的成分、结构、性能之间的关系摸透了,是不是就能像查字典一样,直接找到想要的材料?

我个人习惯把材料基因组理解成三个要素:

  • 高通量计算:用计算机批量算,一天跑几千个结构
  • 高通量实验:自动化设备同时做几百组实验
  • 数据挖掘:从海量数据里找规律,建模型

这三者缺一不可。我在项目中遇到过不少团队,要么只堆数据不建模,要么模型建得漂亮但数据质量一塌糊涂。嗯,这里要提醒大家:数据是地基,地基不稳,楼盖得再高也得塌。

1.2 数据驱动范式:机器学习凭什么能预测材料性能?

很多人问我:「老师,材料物理规律那么复杂,机器学习真能搞定?」

我的回答是:能,但有前提。

传统计算材料学靠的是解薛定谔方程,精度高但慢。机器学习呢?它不关心物理本质,它只关心输入和输出之间的映射关系。你给它一万个材料的成分、结构、工艺参数,再告诉它对应的性能,它就能自己学会那个映射函数。

说白了,就是「看多了自然就会了」。就像你看了几千张猫的图片,不用懂猫的解剖学,也能一眼认出猫。

但这里有个坑——外推能力。机器学习模型在训练数据覆盖的范围内表现很好,一旦遇到全新的、没见过的材料类型,预测结果可能就离谱了。我曾经用某个模型预测一种新型高熵合金的硬度,结果偏差了30%多,就是因为训练集里没有类似成分的样本。

避坑指南: 千万不要迷信模型的预测值。一定要用物理常识做交叉验证。如果模型说某个材料的带隙是负的,那肯定有问题。

1.3 材料数据库介绍:你的数据从哪来?

做材料机器学习,第一步就是找数据。好在现在开源数据库已经相当丰富了。我给大家列几个常用的:

数据库名称 主要数据类型 数据量级 特点
Materials Project 晶体结构、电子结构、热力学性质 15万+ 最全面,API接口成熟
OQMD 相稳定性、形成能 100万+ 数据量大,适合高通量筛选
AFLOW 能带结构、态密度、弹性常数 300万+ 计算流程标准化
NOMAD 原始计算数据(DFT输入输出) 1000万+ 数据最原始,可复现性高

我个人最常用的是Materials Project。为什么?因为它的API做得最好,用Python几行代码就能拉数据。我给你们看个例子:

from pymatgen.ext.matproj import MPRester

# 用你的API key替换下面的字符串
mpr = MPRester("你的API_KEY")

# 查询所有含Li和Fe的氧化物
criteria = {
    "elements": ["Li", "Fe", "O"],
    "nelements": 3
}
properties = ["material_id", "formula_pretty", "band_gap", "formation_energy_per_atom"]
data = mpr.query(criteria, properties)

print(f"共找到 {len(data)} 个材料")
for d in data[:5]:
    print(d["formula_pretty"], d["band_gap"], d["formation_energy_per_atom"])

这段代码我用了好几年,基本没出过问题。但要注意,API有调用频率限制,别一次性拉太多数据,否则会被封IP。我曾经就吃过这个亏,半夜跑脚本,第二天发现账号被限制了。

1.4 数据获取与清洗:80%的时间都在干这个

很多初学者以为做机器学习就是调模型、调参数。其实真正花时间的,是数据获取和清洗。我做过统计,一个完整的材料预测项目,数据相关工作占了80%的时间。

数据获取主要有三种方式:

  1. 从公开数据库下载:最快,但数据质量参差不齐
  2. 自己计算/实验:最可靠,但成本高、周期长
  3. 从文献中手动提取:适合小规模、特定领域的数据

数据清洗才是真正的技术活。我给大家总结几个常见问题:

  • 缺失值:有些材料的某个性能没测,怎么办?直接删掉?还是用平均值填充?我个人建议,如果缺失比例小于5%,直接删;如果大于20%,要考虑是不是这个性能本身就难测,可能需要用其他特征来预测。
  • 异常值:比如某个材料的带隙是100 eV,明显不合理。这种多半是计算错误或者单位搞错了。我一般用3σ原则或者箱线图来检测。
  • 重复数据:同一个材料在不同数据库里可能重复出现。需要根据化学式和空间群去重。
  • 特征工程:原始数据里可能只有成分和结构,但我们需要构造一些衍生特征,比如电负性差、原子半径比、价电子数等。这些特征往往比原始特征更有预测力。
小技巧: 清洗数据时,一定要保留原始数据的备份。我见过太多人把原始数据覆盖了,结果发现清洗错了,又得重新下载。血的教训啊。

1.5 本章知识体系总览

为了让大家对本章内容有个整体认识,我画了一张图:

材料性能预测模型训练与调优 · 第一章知识体系 材料数据基础 材料基因组理念 高通量计算 · 高通量实验 · 数据挖掘 数据驱动范式 输入→映射→输出 · 外推能力限制 材料数据库 Materials Project · OQMD AFLOW · NOMAD 数据获取与清洗 缺失值处理 · 异常值检测 重复数据去重 · 特征工程 实践工具 pymatgen · MPRester API Python数据清洗流程 核心:数据质量决定模型上限

这张图把本章的核心内容串起来了。从材料基因组理念出发,到数据驱动范式,再到具体的数据获取和清洗方法,最后落到实践工具上。大家学完这一章,应该能回答三个问题:数据从哪来?数据怎么洗?洗完之后怎么用?

好了,第一章的内容就到这里。记住一句话:数据质量决定模型上限。后面几章我们会一步步搭建模型,但如果没有今天打下的数据基础,一切都是空中楼阁。


专注资料整理