敏感性分析用于确定在特定条件下独立因素的集合对因变量的影响。
这是一种强有力的方法,用于确定模型的输出如何受到模型输入的一般影响。 在这篇文章中,我将简要概述使用 SALib(一个免费的 Python 敏感性分析包)进行敏感性分析。
一个称为敏感度指数的数值经常代表每个输入的敏感度。 敏感性指数有多种类型:
- 一阶指数:计算单个模型输入对输出方差的贡献。
- 二阶指数:计算两个模型输入对输出方差的贡献。
- 全阶指数:量化模型输入对输出方差的贡献,包括一阶效应(输入单独波动)和任何高阶交互。
什么是 SALib?
SALib 是一个基于 Python 的 开放源码 进行敏感性评估的工具包。 它有一个独立的工作流程,这意味着它不直接与数学或计算模型交互。 相反,SALib 负责生成模型输入(通过样本函数之一)并从模型输出计算灵敏度指数(通过分析函数之一)。
典型的 SALib 敏感性分析包括四个步骤:
- 确定模型输入(参数)和每个的样本范围。
- 要创建模型输入,请运行示例函数。
- 使用生成的输入评估模型并保存模型结果。
- 要计算灵敏度指数,请对输出使用分析功能。
Sobol、Morris 和 FAST 只是 SALib 提供的一些敏感性分析方法。 许多因素会影响哪种方法最适合给定的应用程序,我们将在后面看到。 目前,请记住,无论您采用何种技术,您只需要使用采样和分析这两个功能。 我们将引导您通过一个基本示例来说明如何使用 SALib。
SALib 示例 – Sobol 的敏感性分析
在此示例中,我们将检查 Ishigami 函数的 Sobol' 灵敏度,如下所示。 由于其高非线性和非单调性,Ishigami 函数被广泛用于评估不确定性和灵敏度分析方法。
步骤如下:
1. 导入 SALib
第一步是添加所需的库。 SALib 的示例和分析功能在 Python 模块中保持不同。 例如,导入卫星样本和 Sobol 分析函数如下所示。
我们还使用了 Ishigami 函数,该函数可作为 SALib 中的测试函数使用。 最后,我们导入 NumPy,因为 SALib 使用它将模型输入和输出存储在矩阵中。
2.模型输入
然后必须定义模型输入。 Ishigami 函数接受三个输入:x1、x2 和 x3。 在 SALib 中,我们构造了一个 dict 来指定输入的数量、名称以及每个输入的限制,如下所示。
3. 生成样本和模型
然后生成样本。 我们需要使用 Saltelli 采样器创建样本,因为我们正在进行 Sobol 灵敏度分析。 在这种情况下,参数值是一个 NumPy 矩阵。 我们可以通过运行 param values.shape 观察到矩阵是 8000 x 3。 使用 Saltelli 采样器创建了 8000 个样本。 Saltelli 采样器创建样本,其中 N 为 1024(我们提供的参数),D 为 3。(模型输入的数量)。
如前所述,SALib 不从事数学或计算模型评估。 如果模型是用 Python 编写的,您通常会遍历每个样本输入并评估模型:
如果模型不是用 Python 开发的,可以将示例保存到文本文件中:
param values.txt 中的每一行代表一个模型输入。 模型的输出应该以类似的样式保存到另一个文件中,每一行都有一个输出。 之后,输出可能会加载:
在本例中,我们将使用 SALib 中的 Ishigami 函数。 这些测试功能可以评估如下:
4. 执行分析
将模型结果加载到 Python 后,我们终于可以计算灵敏度指数。 在这个例子中,我们将使用 sobol.analyze 来计算一阶、二阶和全阶索引。
Si 是一个 Python 字典,具有键“S1”、“S2”、“ST”、“S1 conf”、“S2 conf”和“ST conf”。 _conf 键保存相关的置信区间,通常设置为 95%。 要输出所有索引,请使用关键字参数 print 到 console=True。 或者,如下图所示,我们可以从 Si 打印各个值。
我们可以看到 x1 和 x2 具有一阶敏感性,但 x3 似乎没有任何一阶影响。
如果总阶指数明显大于一阶指数,则肯定会发生高阶相互作用。 我们可以通过查看二阶索引来查看这些高阶交互:
我们可以观察到 x1 和 x3 具有显着的交互作用。 之后,可以将结果转换为 Pandas DataFrame 以供进一步研究。
5. 绘图
为了您的方便,我们提供了基本的图表设施。 plot() 函数为后续操作生成 matplotlib 轴对象。
结论
SALib 是一个复杂的敏感性分析工具包。 SALib 中的其他技术包括傅立叶幅度灵敏度测试 (FAST)、莫里斯方法和 Delta-Moment Independent Measure。 虽然它是一个 Python 库,但它旨在与任何类型的模型一起操作。
SALib 提供了一个易于使用的命令行界面,用于创建模型输入和评估模型输出。 退房 SALib 文档 了解更多信息。
发表评论