不确定性和敏感性分析

机器算法验证 多元分析 实验设计 不确定
2022-03-07 10:51:31

我有以下问题:

给定标量、有序整数和无序整数(即标签)的输入,我想估计:xny

  1. 哪些输入能最好地解释输出。
  2. 一个输入的变化在多大程度上意味着输出的变化。

这应该与不确定性和敏感性分析有关,这是相当广泛的领域。您是否知道与我的问题相关的任何方法/资源?

3个回答

您可以尝试此处提供的工具之一。那是 matlab 解决方案,非常好的代码和现代方法。首先,我建议您尝试使用库中的图形工具来了解数据。

由于您没有在此处提供有关所需内容的详细信息,因此对隐含的方法有一些评论:

全球敏感性分析全局敏感性分析是研究如何将模型输出中的不确定性(数值或其他)分配给模型输入中不同的不确定性来源。如果不是因为文献中遇到的大多数分析都是本地的或一次一个因素,那么全局可能在这里是一个不必要的规范。

蒙特卡罗(或基于样本)分析蒙特卡洛 (MC) 分析基于对随机选择的模型输入执行多次评估,然后使用这些评估的结果来确定模型预测中的不确定性,并将它们对这种不确定性的贡献分配给输入因素。MC 分析涉及为每个输入因素选择范围和分布;从第一步中指定的范围和分布生成样本;评估样本中每个元素的模型;不确定性分析和敏感性分析。

响应面法此过程基于对所考虑模型的响应面近似的开发。然后将该近似值用作不确定性和敏感性分析中原始模型的替代值。分析涉及为每个输入因子选择范围和分布,开发实验设计,定义评估模型的因子值组合,模型评估,构建原始模型的响应面近似,不确定性分析和敏感性分析。

筛选设计在处理包含大量输入因子(数百个)的模型时,因子筛选作为第一步可能很有用。输入因子是指在模型执行之前可以在模型中更改的任何数量。这可以是模型参数、输入变量或模型场景。通常,只有少数输入因素和因素组对模型输出有显着影响。

局部(差分分析)局部 SA 在局部研究输入因素对模型的影响,即在输入因素空间中的某个固定点。局部 SA 通常通过计算输出函数相对于输入变量的偏导数来执行(微分分析)。为了以数值方式计算导数,输入参数在标称值附近的小区间内变化。区间与我们对变量的了解程度无关,通常对所有变量都相同。

表单排序当分析人员对 Y 的大小(及其潜在变化)不感兴趣,但对 Y 超过某个临界值的概率不感兴趣时​​,FORM 和 SORM 是有用的方法。约束 (Y-Ycrit < 0) 确定输入因子 X 空间中的超曲面。X 的某个设计点与超曲面之间的最小距离是感兴趣的数量。

祝你好运!

为了解决第一个问题,我建议您看一下典型相关分析和一种称为切片逆回归的最近的降维技术关于后者,参见 Ker Chau Li 的初始论文

用于降维的切片逆回归(带讨论)。美国统计协会杂志,86(414):316-327,1991。

它可以在 Internet 上免费获得。带有(有趣的)评论的版本,您可能不得不考虑购买。

在您的情况下选择方法的一些重要参数是:

  • 输入的维度(n=3、n=15 和 n=50 是非常不同的问题);
  • 获得一次评估所需的时间(0.1 秒、5 分钟和 5 小时也是非常不同的问题);
  • 您可以对模型做出的假设:它是线性的吗?单调吗?

您还提到了可能的多元输出。如果您有几个代表完全不同的事物,只需进行几次独立的敏感性分析。

如果它们高度相关或具有功能性,那么它也会大大改变问题。

在采用给定的方法之前,您应该明确所有这些要点。

您或许可以使用基于方差的全局敏感性分析方法来回答第二个问题。根据Saltelli (2008),敏感性分析是

“......关于如何将模型输出中的不确定性分配给模型输入中不同来源的不确定性的研究......”

这些方法,例如 Saltelli 书中提到的那些方法,通常侧重于首先生成输入样本,随后通过模型运行以生成输出,然后进行分析。由此产生的输出度量,如总灵敏度指数和一阶灵敏度指数代表了每个输入因素对输出方差的主效应贡献。基于方差的方法分解输出中的方差。它们的计算要求很高,并且需要特定的输入样本。StiSi

出于您的目的,假设您拥有现有的数据牧场,则可以使用另一种方法,例如 Delta Moment-Independent Measure (Borgonovo 2007, Plischke et al. 2013) 建议的方法,并在 Python 库SALib中实现。

从示例中获取的以下代码允许您从现有数据生成敏感度指数:

from SALib.analyze import dgsm
from SALib.util import read_param_file

# Read the parameter range file
problem = read_param_file('../../SALib/test_functions/params/Ishigami.txt')

# Perform the sensitivity analysis using the model output
# Specify which column of the output file to analyze (zero-indexed)
Si = dgsm.analyze(problem, param_values, Y, conf_level=0.95,     print_to_console=False)
# Returns a dictionary with keys 'vi', 'vi_std', 'dgsm', and 'dgsm_conf'
# e.g. Si['vi'] contains the sensitivity measure for each parameter, in
# the same order as the parameter file