参数敏感性分析

拖了很久了,有朋友等得花儿都谢了,还是稍微更新下哈,抱歉!

申明: 本文纯属个人见解,如果有错误欢迎交流指正哈


1.问题:什么是参数敏感性分析

在很多论文中,我们通常能看到形如以下形式的图表。

其通常在二维或三维图像基础上,辅以各点的不同颜色配合色块说明条来说明各个参数对模型目标函数的函数值的影响。

根据所属图表的表示方法,最佳颜色位置处的函数值应该是最优的。而沿着不同坐标轴进行函数值变化观测,则能对不同的参数敏感性进行分析。

该类图能对各个参数对目标函数值的影响变化进行分析,即所谓的参数敏感性分析。

2. 这类图怎么来?

结合我后面的调研发现,此类图通常需要进行大量的实验才能得出。其图上的每一个位置其实都是一次实验。以上述2图为例,图1的X,Y,Z三轴都有8个可取值,图上标记了8 × \times × 8 × \times × 8=512个点,也就是说,该图由512次实验得出。而图2相对容易,需要49次实验。

3. 简单总结

  • 参数敏感性分析不是特别好做,尤其是算法单次计算时间长的时候;
  • 这类图本身倒是可以很好画出来。可以参照:https://blog.csdn.net/lgl123ok/article/details/122231889
  • 示例图2可以用matlab的pcolor函数绘制
  • 如果合适,还是建议做这类分析,使模型更具说服力,且论文档次更高。

以上

  • 16
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
敏感性分析可以用来评估模型输出结果对模型输入参数敏感性,从而找到模型中最重要的参数。在 Python 中,可以使用 SALib 库来进行敏感性分析,并使用 Matplotlib 进行可视化。 以下是绘制敏感性指数分析图的步骤: 1. 安装 SALib 库。可以使用 pip 命令来安装: ```python pip install SALib ``` 2. 导入 SALib 和 Matplotlib 库: ```python import matplotlib.pyplot as plt from SALib.analyze import sobol from SALib.sample import saltelli ``` 3. 定义模型函数。例如,下面的函数计算了两个输入参数 x1 和 x2 的和: ```python def model(params): x1, x2 = params return x1 + x2 ``` 4. 定义输入参数的范围和数量。例如,下面的代码定义了两个参数 x1 和 x2,它们的范围分别为 [0, 1] 和 [0, 2],采样数量为 1000: ```python problem = { 'num_vars': 2, 'names': ['x1', 'x2'], 'bounds': [[0, 1], [0, 2]] } param_values = saltelli.sample(problem, 1000) ``` 5. 计算模型输出结果。例如,下面的代码计算了每个采样点对应的模型输出结果: ```python Y = np.zeros([param_values.shape[0]]) for i, X in enumerate(param_values): Y[i] = model(X) ``` 6. 计算敏感性指数。例如,下面的代码计算了两个输入参数 x1 和 x2 的 Sobol 敏感性指数: ```python Si = sobol.analyze(problem, Y) ``` 7. 绘制敏感性指数分析图。例如,下面的代码绘制了两个输入参数 x1 和 x2 的 Sobol 敏感性指数分析图: ```python fig, ax = plt.subplots(1, figsize=(10, 6)) labels = ['x1', 'x2'] ax.bar(labels, Si['ST']) plt.show() ``` 完整的代码如下: ```python import matplotlib.pyplot as plt from SALib.analyze import sobol from SALib.sample import saltelli import numpy as np def model(params): x1, x2 = params return x1 + x2 problem = { 'num_vars': 2, 'names': ['x1', 'x2'], 'bounds': [[0, 1], [0, 2]] } param_values = saltelli.sample(problem, 1000) Y = np.zeros([param_values.shape[0]]) for i, X in enumerate(param_values): Y[i] = model(X) Si = sobol.analyze(problem, Y) fig, ax = plt.subplots(1, figsize=(10, 6)) labels = ['x1', 'x2'] ax.bar(labels, Si['ST']) plt.show() ``` 这样就可以绘制敏感性指数分析图了。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值