github页面:
https://github.com/rouyang2017/SISSO
在这个github项目下包含模块:

- var_global.f90 ! 声明全局变量
- libsisso.f90 ! 数学运算的子程序和函数
- DI.f90!模型稀疏化(描述符识别)
- FC.f90!使用存储在内存中的数值数据特征进行特征构建
- FCse.f90!使用存储在内存中的表达式树特征进行特征构建
- SISSO.f90!主程序
安装
git clone https://github.com/rouyang2017/SISSO.git
cd SISSO
---编译 SISSO 并行程序需要 Fortran MPI 编译器。推荐使用 Intel 编译器。
确定编译器与 MPI wrapper 是否可用:
which ifx
which mpiifx || true
which mpiifort || true
which mpifort || true

在"src"文件夹中,执行以下操作:
mkdir ~/bin/
- mpiifx -fp-model precise var_global.f90 libsisso.f90 DI.f90 FC.f90 FCse.f90 SISSO.f90 -o ~/bin/SISSO
或者
- mpiifx -O2 var_global.f90 libsisso.f90 DI.f90 FC.f90 FCse.f90 SISSO.f90 -o ~/bin/SISSO
区别是:
第一个命令安装的能够提高浮点计算的 准确性 和运行间 可重复性
第二个命令安装的 快约 2 倍
(可选,保持环境整洁)然后
sudo mkdir /opt/SISSO
sudo mv ~/bin /opt/SISSO
加入环境变量:
nano ~/.bashrc
在文件中添加行:
#SISSO
export PATH=/opt/SISSO/bin/:$PATH
然后
source ~/.bashrc
which SISSO

解除内存限制
ulimit -s unlimited
计算模板
计算模板位于克隆的SISSO项目目录下:
input_templates
包含
--SISSO.in(输入文件)
--train.dat_regression(回归示例数据)
--train.dat_regression_multitask(多任务回归示例数据)
--train.dat_classification(分类示例数据)
--train.dat_classification_multitask(多任务分类示例数据)

计算测试
回归计算测试
在系统其他位置建立一个测试文件夹,然后拷贝 输入文件 和 训练数据
cp /media/waler/4TB/installer/SISSO/SISSO/input_templates/SISSO.in .
cp /media/waler/4TB/installer/SISSO/SISSO/input_templates/train.dat_regression ./train.dat
串行运行SISSO
SISSO |tee out
并行运行SISSO
mpirun -np 4 SISSO |tee out
运算流程:
- FC(Feature Construction) :从初始特征空间
Phi00生成更高阶组合特征Phi01、Phi02 - SIS(Sure Independence Screening) :筛选子空间(你这里从
Phi02选出 141 个进入子空间) - SIS(Sure Independence Screening) :筛选子空间(你这里从
Phi02选出 141 个进入子空间)
计算完成后生成如下文件:
Models/(模型结果文件)
SIS_subspaces/(SIS 选出的子空间)
SISSO.out(主输出汇总)
SISSO.out
可以从输出文件 SISSO.out 看总体结果与最优模型:
grep -n -E "Best|best|descriptor|RMSE|MAE|MaxAE|coeff" SISSO.out | head -n 50

我们接下来解释一下这些信息:
28:Metric for model selection: RMSE
53: 2D descriptor/model(y=sum(ci*di)+c0) :
58: coeff.(ci): 0.3119522717E+01 -0.2615952335E-03
60: RMSE and MaxAE: 0.6898298038E-03 0.9482663871E-03
第一行说明,SISSO 是用 RMSE(均方根误差) 作为模型优劣的判据
第二行说明,找到的最优模型是一个 2 维描述符, 模型形式是线性回归模型。
第三行就是两个拟合系数。对目标性质的贡献**主导;
**是一个较弱但必要的修正项
第四行给出了 RMSE 和 MaxAE 判断误差大小,数字越小说明拟合效果越好
Models文件夹
这个文件夹下包含了训练产生的模型的文件
例如 data_top1 表示排名第 1 的模型的数据

使用
报错
1:funit报错
(base) waler@7B12:/media/waler/4TB/Calculation/ML/SISSO/test$ SISSO | tee out.log
Error: Cannot read the parameter "funit"
Error while reading the parameter "funit" from SISSO.in
在 SISSO v3.5 遇到过同样现象:只要把 funit=(1:2)(3:3) 注释掉就能跑,但一旦保留就报 "Cannot read the parameter funit"。
原因:
发现是由于 编译时,使用了 mpiifx 替换了 mpiifort 引起的 。
但是ifort功能在最新版本intel中被移除,这意味着ifx必须使用。

解决方法:
在SISSO/src路径下,找到SISSO.f90
修改
do ll=1,nunit
为
do ll=1,nunit-1

然后重新编译即可。
mkdir ~/bin/
mpiifx -fp-model precise var_global.f90 libsisso.f90 DI.f90 FC.f90 FCse.f90 SISSO.f90 -o ~/bin/SISSO
sudo rm -r /opt/SISSO/bin
sudo mv ~/bin /opt/SISSO
source ~/.bashrc
which SISSO