ALAMODE专题

ALAMODE验证:训练、三折分组与独立留出

通过真实Si64力数据比较谐波、三阶与四阶模型,说明成组划分、误差提取、XML力预测和独立检查。

更新于 2026-11-05约 4 分钟阅读按任务与环境选择适用配置
阅读本篇目录

力常数能拟合训练数据,还不够说明它适合预测新的位移。高阶拟合教程的Si64 SW实例额外保留了未用于拟合的位移方向,本页展示如何查看这些结果。

1. 先按位移方向分组#

本例32个随机方向,每个方向都有三个幅度和正负位移。它们彼此相关,不能把同一方向的正位移放进训练、负位移放进测试。

用途 方向编号 每个方向快照数 总快照数
全训练 0–23 3幅度×2符号=6 144
独立留出 24–31 6 48
每一折验证 训练方向中的8个 6 48
每一折拟合 其余16个训练方向 6 96

三折按照训练方向编号对3取余划分。同一方向的所有幅度和符号始终在同一折;独立留出的8个方向不参与任何一折拟合。

位移分组与保留阶数对照

2. 在终端跑完整流程#

新解压目录、已分配CPU环境中执行:

module load alamode/1.5.0
bash run.sh

如果按步骤分别运行,依次为:

python make-displacements.py
python extract-forces.py
python fit_models.py
python analyze_ifcs.py
python plot.py

不要在已执行过 run.sh 的目录再重复整套命令;脚本保留已有数据并要求换新目录。目录里的 fit/order1-*、order2-*、order3-*分别对应最高保留FC2、FC3、FC4。

本例用分组脚本组织三折,每折调用原生 alm 做OLS,再独立计算验证力误差。没有把ALAMODE的 CV=3 当作OLS选项。 软件内部的 CV 关键字用于enet或adaptive-lasso等正则化流程,参数与本例不同。官方CV参数说明

3. 查看实际独立留出误差#

以下是48个留出快照按位移幅度分组后、对所有原子和笛卡尔力分量计算的均方根误差,单位eV/Å。每种幅度有8个方向×2符号=16个快照。

分量RMS位移 / Å 仅FC2 FC2+FC3 FC2+FC3+FC4
0.005 0.00119312 0.000238495 8.46385e-06
0.015 0.0105532 0.000627667 6.14014e-05
0.03 0.0424069 0.00277516 0.000246344

训练、分组验证与留出误差

最高幅度0.03Å下,仅谐波的误差约0.0424eV/Å,加入三阶项后约0.00278eV/Å,再加入四阶项后约0.000246eV/Å。这说明在本例位移范围与SW模型内,高阶项改善了力的重建;不能据此推断任意温度、结构变化或化学环境下都保持相同精度。

4. 用CSV与NPZ看清哪些是留出点#

head analysis/force-errors.csv
cat analysis/SUMMARY.json

force-errors.csv逐快照记录模型阶数、折号、用途、方向、幅度及力误差。SUMMARY.json给出分组后的汇总。要仅查看全训练模型在独立留出数据上的结果:

python - <<'PY'
import csv
with open('analysis/force-errors.csv') as f:
    rows = list(csv.DictReader(f))
for row in rows:
    if row['fit'] == 'order3-full' and row['split'] == 'holdout':
        print(row['direction'], row['amplitude_A'], row['sign'], row['RMSE_eV_A'])
PY

NPZ中同时保留了不同用途的数据,画独立留出图时必须使用 split筛选:

python - <<'PY'
import numpy as np
a = np.load('analysis/force-predictions.npz')
mask = a['split'] == 'holdout'
error = a['predicted_F_eV_A'][mask] - a['native_F_eV_A'][mask]
print('留出快照数:', mask.sum())
print('全体留出力分量RMSE eV/Angstrom:', np.sqrt(np.mean(error**2)))
PY

四阶模型对独立留出原子力的预测

图中只包含48个独立留出快照,训练点未混入散点或误差分布。

5. 为什么还要核对XML、Hessian与能量导数#

analyze_ifcs.py直接读取原生Cartesian XML力常数,按周期超胞和后缀重复指标的阶乘权重计算Taylor力。它还将XML重建的FC2与原生完整Hessian对比,并检查平移约束;对四阶Taylor能量做独立有限差分后,所选分量的力误差最大约1.7×10⁻¹¹eV/Å。

这一步检查的是文件解释、单位和能量/力的一致性,不等于额外算了一次DFT,也不等于对完整SW势做了新的能量有限差分。原子力的物理对照仍来自真实LAMMPS留出数据。

cat analysis/VALIDATION.json
python plot.py
ls figures

本例保留位移范围内的教学对照。继续做RTA热导率、声子线宽或SCPH时,还需检查相应q网格、统计模型、截断范围与稳定性,不能只凭力拟合误差给出这些性质。ALAMODE专题

需要根据你的体系选择资源?联系讨论计算需求。实际可用软件与权限,以当前账户和运行环境为准。

查看配图

放大后可滚动查看细节,按 Esc 关闭。

100%查看原图 ↗