敏感性分析一览

news2024/11/25 21:53:54

敏感性分析

    • Sobol
    • Morris
    • Fourier Amplitude Sensitivity Test (FAST)
    • Random Balance Designs - Fourier Amplitude Sensitivity Test (RBD-FAST)
    • Delta Moment-Independent Measure
    • Derivative-based Global Sensitivity Measure (DGSM)
    • Fractional Factorial Sensitivity Analysis
    • High Dimensional Model Representation
    • PAWN
    • Regional Sensitivity Analysis
    • Discrepancy Sensitivity Indices

注:最后两种暂时还没有集成到SALib1.4.7中,需要手动添加官网相关代码。
已手动整理相关代码, 此处跳转。

一个模型有自变量(输入数据)和因变量(输出结果),因变量随自变量的变化而变化,其变化程度与自变量、因变量两者之间关系的强弱决定,敏感性分析便是对强弱关系进行定量讨论,通常将其定量结果称为敏感指数。

敏感指数由三种形式组成。一阶指数衡量单个自变量对因变量方差的贡献;二阶指数衡量两个自变量之间的交互作用对因变量方差的贡献;全阶指数衡量衡量所有自变量(包括一阶效应和其他高阶交互作用)对因变量方差的贡献。

为了方便进行敏感性分析,我们使用Python的敏感性分析库SALib完成计算工作,其包含若干个分析方案,具体如下。

所有方法均以以下相同problem为自变量
定义自变量

problem = {
    'num_vars': 3,
    'names': ['x1', 'x2', 'x3'],
    'bounds': [[-3.14159265359, 3.14159265359],
               [-3.14159265359, 3.14159265359],
               [-3.14159265359, 3.14159265359]]
}

Sobol

# 生成自变量
SALib.sample.sobol.sample(problem: Dict, N: int, *, calc_second_order: bool = True, scramble: bool = True, skip_values: int = 0, seed: int | Generator | None = None)
"""
problem: 自变量定义
N: 样本数量,建议为2的倍数,且不大于skip_values
calc_second_order: 是否需要二阶指数计算,默认为True
scramble: 是否添加干扰,默认为True
skip_values: 需要跳过的序列数目,建议为2的倍数,默认是0
seed: 随机种子
"""

# 敏感分析
SALib.analyze.sobol.analyze(problem, Y, calc_second_order=True, num_resamples=100, conf_level=0.95, print_to_console=False, parallel=False, n_processors=None, keep_resamples=False, seed=None)
"""
problem: 自变量定义
Y: 因变量
calc_second_order: 是否需要二阶指数计算,默认为True
num_resamples: 重采样次数,默认为100
conf_level: 置信区间水平,默认为0.95
print_to_console: 是否输出到操作台,默认为False
parallel: 是否并行分析,默认为False
n_processors: 并行进程数,当parallel=True时使用
keep_resamples: 是否存储中间重采样结果,默认为False
seed: 随机种子
"""
# 结果
print(Si)
# {
#     'S1': 
#     	array([0.31683154, 0.44376306, 0.01220312]), 
#     'S1_conf': 
#     	array([0.0612548 , 0.05702573, 0.05750855]), 
#     'ST': 
#     	array([0.55586009, 0.44189807, 0.24467539]), 
#     'ST_conf': 
#     	array([0.07651133, 0.04224496, 0.02889387]), 
#     'S2': 
#     	array([[        nan,  0.00925429,  0.23817211],
#        	   [        nan,         nan, -0.0048877 ],
#        	   [        nan,         nan,         nan]]), 
#     'S2_conf': 
#     	array([[       nan, 0.08265217, 0.11277348],
#        	   [       nan,        nan, 0.06331599],
#        	   [       nan,        nan,        nan]])
# }

请添加图片描述

Morris

# 生成自变量
SALib.sample.morris.sample(problem: Dict, N: int, num_levels: int = 4, optimal_trajectories: int = None, local_optimization: bool = True, seed: int = None)
"""
problem: 自变量定义
N: 轨迹数量
num_levels: 网格层数,偶数,默认为4
optimization_trajectories: 要采样的最佳轨迹数量,范围为2到N
local_optimization: 是否使用局部优化,默认为True
seed: 随机种子
"""

# 敏感分析
SALib.analyze.morris.analyze(problem: Dict, X: ndarray, Y: ndarray, num_resamples: int = 100, conf_level: float = 0.95, scaled: bool = False, print_to_console: bool = False, num_levels: int = 4, seed=None)
"""
problem: 自变量定义
X: 自变量
Y: 因变量
calc_second_order: 是否需要二阶指数计算,默认为True
num_resamples: 重采样次数,默认为100
conf_level: 置信区间水平,默认为0.95
print_to_console: 是否输出到操作台,默认为False
parallel: 是否并行分析,默认为False
n_processors: 并行进程数,当parallel=True时使用
keep_resamples: 是否存储中间重采样结果,默认为False
seed: 随机种子
"""
# 结果
print(Si)
#           mu   mu_star     sigma  mu_star_conf
# x1  7.354122  7.354122  6.242112  3.968815e-01
# x2 -0.110250  7.875000  7.878168  5.248703e-15
# x3  0.362430  6.486250  9.000676  3.725592e-01
# {
#     'names': ['x1', 'x2', 'x3'], 
#     'mu': array([ 7.35412153, -0.11025   ,  0.36243017]), 
#     'mu_star': masked_array(
#         data=[7.354121529806647, 7.875000000000724, 6.4862503552631114],
#         mask=[False, False, False],
#         fill_value=1e+20), 
#     'sigma': array([6.24211213, 7.87816828, 9.000676  ]), 
#     'mu_star_conf': masked_array(
#         data=[0.39688154270651804, 5.248702595241132e-15, 0.37255924946508345],
#         mask=[False, False, False],
#         fill_value=1e+20)
# }

请添加图片描述

Fourier Amplitude Sensitivity Test (FAST)

# 生成自变量
SALib.sample.fast_sampler.sample(problem, N, M=4, seed=None)
"""
problem: 自变量定义
N: 样本数量
M: 干扰参数,默认为4
seed: 随机种子
"""

# 敏感分析
SALib.analyze.fast.analyze(problem, Y, M=4, num_resamples=100, conf_level=0.95, print_to_console=False, seed=None)
"""
problem: 自变量定义
Y: 因变量
M: 干扰参数,默认为4
num_resamples: 重采样次数,默认为100
conf_level: 置信区间水平,默认为0.95
print_to_console: 是否输出到操作台,默认为False
seed: 随机种子
"""
# 结果
print(Si)
# {
#     'S1': [0.3081232160181247, 0.4420505304594682, 1.0406181235617822e-28], 
#     'ST': [0.5519123814033295, 0.46920370910272835, 0.23930621330436663],
#     'S1_conf': [0.013434507989869757, 0.015813518018138756, 0.015093897483613204], 
#     'ST_conf': [0.041141026199615446, 0.04117206451357777, 0.04071053209490691],
#     'names': ['x1', 'x2', 'x3']
# }

请添加图片描述

Random Balance Designs - Fourier Amplitude Sensitivity Test (RBD-FAST)

# 生成自变量
SALib.sample.latin.sample(problem, N, seed=None)
"""
problem: 自变量定义
N: 样本数量
seed: 随机种子
"""

# 敏感分析
SALib.analyze.rbd_fast.analyze(problem, X, Y, M=10, num_resamples=100, conf_level=0.95, print_to_console=False, seed=None)
"""
problem: 自变量定义
X: 自变量
Y: 因变量
M: 干扰参数,默认为4
num_resamples: 重采样次数,默认为100
conf_level: 置信区间水平,默认为0.95
print_to_console: 是否输出到操作台,默认为False
seed: 随机种子
"""
# 结果
print(Si)
# {
#     'S1': [0.31806056031674595, 0.4450789986938868, 1.5359880927191816e-06],
#     'S1_conf': [0.0556645519811434, 0.07578207765070516, 0.0214559062090626],
#     'names': ['x1', 'x2', 'x3']
# }

请添加图片描述

Delta Moment-Independent Measure

# 敏感分析
SALib.analyze.delta.analyze(problem: Dict, X: ndarray, Y: ndarray, num_resamples: int = 100, conf_level: float = 0.95, print_to_console: bool = False, seed: int = None, y_resamples: int = None, method: str = 'all')
"""
problem: 自变量定义
X: 自变量
Y: 因变量
num_resamples: 重采样次数,默认为100
conf_level: 置信区间水平,默认为0.95
print_to_console: 是否输出到操作台,默认为False
seed: 随机种子
y_resamples: 重采样时使用的样本数
method: 计算"delta"、"sobol"或两者"all",默认为all
"""
# 结果
print(Si)
#        delta  delta_conf        S1   S1_conf
# x1  0.194729    0.021577  0.302742  0.039161
# x2  0.254878    0.022195  0.313650  0.052195
# x3  0.134645    0.020917  0.006901  0.010473
# {
#     'delta': array([0.19472928, 0.25487771, 0.13464494]), 
#     'delta_conf': array([0.02157656, 0.02219531, 0.02091679]), 
#     'S1': array([0.30274202, 0.31365005, 0.00690086]), 
#     'S1_conf': array([0.03916104, 0.0521946 , 0.01047288]), 
#     'names': ['x1', 'x2', 'x3']
# }

请添加图片描述

Derivative-based Global Sensitivity Measure (DGSM)

# 敏感分析
SALib.analyze.dgsm.analyze(problem, X, Y, num_resamples=100, conf_level=0.95, print_to_console=False, seed=None)
"""
problem: 自变量定义
X: 自变量
Y: 因变量
num_resamples: 重采样次数,默认为100
conf_level: 置信区间水平,默认为0.95
print_to_console: 是否输出到操作台,默认为False
seed: 随机种子
"""
# 结果
print(Si)
# {
#     'vi': array([ 7.73312725, 24.37534083, 11.34887321]), 
#     'vi_std': array([16.43522688, 17.35675534, 24.40109617]), 
#     'dgsm': array([2.24329014, 7.07100245, 3.29217592]), 
#     'dgsm_conf': array([1.01703239, 1.0872397 , 1.60391344]), 
#     'names': ['x1', 'x2', 'x3']
# }

请添加图片描述

Fractional Factorial Sensitivity Analysis

# 生成自变量
SALib.sample.ff.sample(problem, seed=None)
"""
problem: 自变量定义
seed: 随机种子
"""

# 敏感分析
SALib.analyze.ff.analyze(problem, X, Y, second_order=False, print_to_console=False, seed=None)
"""
problem: 自变量定义
X: 自变量
Y: 因变量
second_order: 是否需要二阶指数计算,默认为True
print_to_console: 是否输出到操作台,默认为False
seed: 随机种子
"""
# 结果
print(Si)
# {
#     'names': ['x1', 'x2', 'x3', 'dummy_0'], 
#     'ME': array([-2.22146819e-12,  0.00000000e+00,  0.00000000e+00,  0.00000000e+00]), 
#     'interaction_names': [('x1', 'x2'), ('x1', 'x3'), ('x2', 'x3'), ('x1', 'dummy_0'), ('x2', 'dummy_0'), ('x3', 'dummy_0')], 
#     'IE': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
# }

请添加图片描述

High Dimensional Model Representation

# 敏感分析
SALib.analyze.hdmr.analyze(problem: Dict, X: ndarray, Y: ndarray, maxorder: int = 2, maxiter: int = 100, m: int = 2, K: int = 20, R: int = None, alpha: float = 0.95, lambdax: float = 0.01, print_to_console: bool = False, seed: int = None)
"""
problem: 自变量定义
X: 自变量,长度为N
Y: 因变量
maxorder: 最大扩展阶数,范围1-3,默认为2
maxiter: 最大拟合迭代次数,范围1-1000,默认为100
m: B-spline间隔数,范围2-10,默认为2
K: bootstrap迭代次数,范围1-100,默认为20
R: bootstrap样本数,范围100-N/2。默认为N/2,当K为1,R默认为Y的长度
alpha: 置信区间 F 检验,默认为0.95
lambdax: 正则化项,范围0-10,默认0.01
print_to_console: 是否输出到操作台,默认为False
seed: 随机种子
"""
# 结果
print(Si)
# {
#     'Sa': array([0.32098624, 0.32706979, 0.00551071, 0.01372589, 0.22420121,
#        0.03167076]), 
#     'Sa_conf': array([0.03449847, 0.03054272, 0.008012  , 0.00690539, 0.03165136,
#        0.01684393]), 
#     'Sb': array([ 0.01875264, -0.01008509, -0.00085121,  0.00878864,  0.01348094,
#         0.03473462]), 
#     'Sb_conf': array([0.0214207 , 0.03050578, 0.00305786, 0.00632993, 0.02066726,
#        0.02149721]), 
#     'S': array([0.33005615, 0.33421506, 0.00512609, 0.01459155, 0.20722952,
#        0.04286532]), 
#     'S_conf': array([0.03056583, 0.03283559, 0.0086171 , 0.00692596, 0.0308207 ,
#        0.02360502]), 
#     ...............
#     ...............
# }

请添加图片描述
请添加图片描述
请添加图片描述

PAWN

# 敏感分析
SALib.analyze.pawn.analyze(problem: Dict, X: ndarray, Y: ndarray, S: int = 10, print_to_console: bool = False, seed: int = None)
"""
problem: 自变量定义
X: 自变量,长度为N
Y: 因变量
S: 调节间隔,默认为10
print_to_console: 是否输出到操作台,默认为False
seed: 随机种子
"""
# 结果
print(Si)
# {
#     'minimum': array([0.172, 0.215, 0.07 ]), 
#     'mean': array([0.2446899 , 0.35838889, 0.12805354]), 
#     'median': array([0.261 , 0.3875, 0.114 ]), 
#     'maximum': array([0.359, 0.489, 0.257]), 
#     'CV': array([0.24174122, 0.26268279, 0.40149537]), 
#     'names': ['x1', 'x2', 'x3']
# }

请添加图片描述

Regional Sensitivity Analysis

# 敏感分析
SALib.analyze.rsa.analyze(problem: Dict, X: ndarray, Y: ndarray, bins: int = 20, target: str = 'Y', print_to_console: bool = False, seed: int = None)
"""
problem: 自变量定义
X: 自变量
Y: 因变量
bins: 使用的箱数,默认为20
target: 评估自变量("X")或因变量("Y"),默认为"Y"
print_to_console: 是否输出到操作台,默认为False
seed: 随机种子
"""
# 结果
print(Si)
# {
# 'x1': array([ 0.89094312,  0.76391302,  0.6901172 ,  0.07445683,  0.00810598,
#        -0.02019611, -0.01031206, -0.02119982, -0.01553581,  0.00392679,
#        -0.00631403,  0.01199807, -0.0249512 ,  0.01452995,  0.11153721,
#        -0.01175163,  0.3564372 ,  0.57950908,  0.78215635,  1.        ]), 
# 'x2': array([ 0.04154606,  0.0830033 ,  0.09267739,  0.05356006,  0.05618751,
#         0.02343257,  0.0891207 ,  0.02911934, -0.00066498, -0.01310919,
#        -0.00965545, -0.00484718,  0.00592457, -0.00896379,  0.06430754,
#         0.09513276,  0.05469668,  0.05782315,  0.0256584 ,  0.03686238]), 
# 'x3': array([ 0.83197838,  0.0348991 ,  0.03329039,  0.02259925,  0.01671094,
#         0.01156657,  0.014363  ,  0.01250926, -0.02117361,  0.00110074,
#        -0.01738245,  0.02128902, -0.00589163, -0.01071005,  0.04296997,
#         0.01399239,  0.00837767, -0.00838735,  0.04364362,  0.79882026]), 
# 'names': ['x1', 'x2', 'x3'], 
# 'bins': array([0.  , 0.05, 0.1 , 0.15, 0.2 , 0.25, 0.3 , 0.35, 0.4 , 0.45, 0.5 ,
#        0.55, 0.6 , 0.65, 0.7 , 0.75, 0.8 , 0.85, 0.9 , 0.95]), 
# 'target': 'Y'
# }

请添加图片描述

Discrepancy Sensitivity Indices

# 敏感分析
SALib.analyze.discrepancy.analyze(problem: Dict, X: ndarray, Y: ndarray, method: str = 'WD', print_to_console: bool = False, seed: int = None)
"""
problem: 自变量定义
X: 自变量
Y: 因变量
method: 差异类型("WD", "CD", "MD", "L2-star"),默认为"WD"。
print_to_console: 是否输出到操作台,默认为False
seed: 随机种子
"""
# 结果
print(Si)
# {
# 's_discrepancy': array([0.33467611, 0.33305819, 0.3322657 ]), 
# 'names': ['x1', 'x2', 'x3']
# }

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1053562.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter笔记:滚动之-无限滚动与动态加载的实现(GetX简单状态管理版)

Flutter笔记 无限滚动与动态加载的实现(GeX简单状态管理版) 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq…

Spring Framework 学习笔记5:事务

Spring Framework 学习笔记5:事务 1.快速入门 1.1.准备工作 这里提供一个示例项目 transaction-demo,这个项目包含 Spring 框架、MyBatis 以及 JUnit。 对应的表结构见 bank.sql。 服务层有一个方法可以用于在不同的账户间进行转账: Se…

云原生Kubernetes:对外服务之 Ingress

目录 一、理论 1.Ingress 2.部署 nginx-ingress-controller(第一种方式) 3.部署 nginx-ingress-controller(第二种方式) 二、实验 1.部署 nginx-ingress-controller(第一种方式) 2.部署 nginx-ingress-controller(第二种方式) 三、问题 1.启动 nginx-ingress-controll…

Python海洋专题五之水深地形图海岸填充

Python海洋专题五之水深地形图海岸填充 海洋与大气科学 上期读取nc水深文件,并出图 但是存在一些不完美,本期修饰 本期内容 障眼法:把大于零的数据填充为陆地的灰色; 把等于零的数据画等深线为陆地和海洋的分界线!…

怒刷LeetCode的第21天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一:哈希表 方法二:计数器数组 第二题 题目来源 题目内容 解决方法 方法一:分治法 方法二:快速幂 迭代 方法三:快速幂 递归 第三题 题目来源 题目内容 …

JUC第十二讲:JUC锁: 锁核心类AQS详解

JUC第十二讲:JUC锁: 锁核心类AQS详解 本文是JUC第十二讲,JUC锁: 锁核心类AQS详解。AbstractQueuedSynchronizer抽象类是核心,需要重点掌握。它提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架。 文章目录 J…

aarch64 平台 musl gcc 工具链手动编译方法

目标 手动编译一个 aarch64 平台的 musl gcc 工具链 musl libc 与 glibc、uclibc 等,都是 标准C 库, musl libc 是基于系统调用之上的 标准C 库,也就是用户态的 标准C 库。 musl libc 轻量、开源、免费,是一些 操作系统的选择,当前 Lite-OS 与 RT-Smart 等均采用自制的 mu…

【算法训练-贪心算法】一 买卖股票的最佳时机II

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【贪心算法】,使用【数组】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&…

开源校园服务小程序源码 校园综合服务小程序源码 包含快递代取 打印服务 校园跑腿【带详细部署教程】

校园综合服务小程序开源源码是一款功能强大的小程序,可用于搭建校园综合服务平台。共有6个选项可供选择,包括快递代取、打印服务、校园跑腿、代替服务、上门维修和其他帮助。 使用该源码需要自备服务器和备案过的域名,推荐使用2核4G服务器。最…

【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件

【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件 海洋与大气科学 软件 选择此软件是因为习惯了,matlab能看得到的界面。 新建文本 导入相关库 import netCDF4,numpy netCDF4:该包作用:读、写netCDF files. numpy:该包作用:…

【JavaScript】读取本地json文件并绘制表格

本文为避免跨域问题,使用了改造过的本地json文件的方法实现读取json数据并绘制表格。 如果发起http请求获取本地 json文件中数据,需要架设本地服务器,本文不做阐述。 概述 1、json在本地,并不需要从服务器下载。 2、采用jquery…

八、垃圾收集高级

JVM由浅入深系列一、关于Java性能的误解二、Java性能概述三、了解JVM概述四、探索JVM架构五、垃圾收集基础六、HotSpot中的垃圾收集七、垃圾收集中级八、垃圾收集高级👋垃圾收集高级 ⚽️1. CMS CMS 收集器是专为老年代空间设计的一个延迟极低的收集器,它通常会与一个稍微…

【每日一题】1498. 满足条件的子序列数目

1498. 满足条件的子序列数目 - 力扣(LeetCode) 给你一个整数数组 nums 和一个整数 target 。 请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。 由于答案可能很大,请将结果对 109 7 取余后…

buuctf-[WUSTCTF2020]CV Maker

打开环境 随便登录注册一下 进入到了profile.php 其他没有什么页面&#xff0c;只能更换头像上传文件&#xff0c;所以猜测是文件上传漏洞 上传一句话木马看看 <?php eval($_POST[a]);?>回显 搜索一下 添加文件头GIF89a。上传php文件 查看页面源代码&#xff0c;看…

设计模式7、桥接模式 Bridge

解释说明&#xff1a;将抽象部分与它的实现部分解耦&#xff0c;使得两者都能够独立变化 桥接模式将两个独立变化的维度设计成两个独立的继承等级结构&#xff08;而不会将两者耦合在一起形成多层继承结构&#xff09;&#xff0c;在抽象层将二者建立起一个抽象关联&#xff0c…

安卓 kuaishou 设备did和egid 学习分析

did和egid注册 接口 https://gdfp.ksapisrv.com/rest/infra/gdfp/report/kuaishou/android did 是本地生成的16进制 或者 获取的 android_id public static final Random f16237a new Random(System.currentTimeMillis()); public static long m19668a() { return f1623…

c#设计模式-结构型模式 之装饰者模式

&#x1f680;介绍 在装饰者模式中&#xff0c;装饰者类通常对原始类的功能进行增强或减弱。这种模式是在不必改变原始类的情况下&#xff0c;动态地扩展一个对象的功能。这种类型的设计模式属于结构型模式&#xff0c;因为这种模式涉及到两个类型之间的关系&#xff0c;这两个…

优化用户体验:解决element中el-tabs组件切换闪屏问题

前言 在现代 web 应用中&#xff0c;用户体验是至关重要的。然而&#xff0c;在使用 element 中的 el-tabs 组件时&#xff0c;相信有不少开发者都会遇到切换时的闪屏问题。这个问题可能导致用户在切换标签页时感到不适&#xff0c;降低了用户体验&#xff0c;本文将探讨这个问…

LeetCode面向运气之Javascript—第58题-最后一个单词的长度-99.83%

LeetCode第58题-最后一个单词的长度 题目要求 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 举例 输入&#xff1a;s “Hello World” 输出&#xff1a;5 输入&#xff1a;s " fly me to …

力扣 -- 97. 交错字符串

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:bool isInterleave(string s1, string s2, string s3) {int ms1.size();int ns2.size();//先判断s1的长度s2的长度是否等于s3的长度&#xff0c;如果不等&#xff0c;则s1和s2不可能拼接成s3if(mn!s3.size…