【MATLAB第64期】基于MATLAB的无目标函数SOBOL等全局敏感性分析法模型合集(SOBOL,PAWN,GSA,GSUA,GSAT等) 【更新中】

news2024/9/25 23:18:03

【MATLAB第64期】基于MATLAB的无目标函数SOBOL等全局敏感性分析法模型合集(SOBOL,PAWN,GSA,GSUA,GSAT等) 【更新中】

引言

在前面几期,介绍了局部敏感性分析法,本期来介绍全局敏感性分析模型,因还在摸索中,所以更新较慢,敬请期待。
【MATLAB第31期】基于MATLAB的降维/全局敏感性分析/特征排序/数据处理回归问题MATLAB代码实现(持续更新)
【MATLAB第32期】【更新中】基于MATLAB的降维/全局敏感性分析/特征排序/数据处理分类问题MATLAB代码实现
【MATLAB第63期】基于MATLAB的改进敏感性分析方法IPCC,拥挤距离与皮尔逊系数法结合实现回归与分类预测

  1. 先介绍sobol有目标函数和无目标函数解决思路 。
  2. 后面会更新,通过遍历来筛选sobol样本数量,进行结果比对。

一、SOBOL(有目标函数)

(1)评价指标

评价指标包括:一阶影响指数S,总效应指数ST**

*一阶影响指数S:*显示由各个输入变量的方差产生的因变量的方差,根据一阶影响指数可以量化单个变量对模型的敏感程度

总效应指数ST:显示由每个输入变量的方差及其与其他输入变量的相互作用而产生的因变量的方差。

每个因变量和所有变量的 Sobol 指数都显示在专用的 Sobol 图中
,其中直方图按总效应指数ST排序。因变量对具有最高总效应指数ST的输入变量最敏感。

输入变量的总效应指数ST和一阶影响指数S之间的差异可以衡量该输入与其他输入变量之间相互作用的效果。


(2)运行思路

A、设定目标函数(3个变量,即维度D=3)
Y=X1^2+2*X2+X3-1

y=x(1)^2+2*x(2)+x(3)-1;

B、设定变量上下限

VarMin=[0 0 0];%各个参数下限
VarMax=[10  10 10];%各个参数上限

C、设定sobol其他参数

M=D*2 %2倍D数量的矩阵,提高样本丰富度
%则此时相当于共6个输入变量
VarMin=[0 0 0 0 0 0];%各个参数下限
VarMax=[10  10 10 10 10 10];%各个参数上限
nPop=4;%采样数量,样本数量(数量设置越大,准确率越高。为了方便展示数值,选取nPop=4)

D、生成sobol序列样本数据

这里要说,除了sobol序列函数可以生成样本数据,其他也可以, 比如正交设计、超立方抽样等等。很关键!!!举一反三即可

1、 生成多组N*M(即N行6列)的样本矩阵p。用自带函数sobolset生成。

p= sobolset(M)
**p  矩阵形式: 9007199254740992x6 sobolset**

2、 筛选nPop*M(即4行6列)的样本矩阵R。
两种思路,第一种直接选取前nPop行的p采样数据 ,优点是方便快捷,但是缺点是样本不随机,并没有考虑上下限对样本的影响 。

% 第一种
R=p(1:nPop,:);%选取前nPop行

在这里插入图片描述

% 第二种
for i=1:nPop% 选取前nPop行被上下限空间处理后的样本
    r=p(i,:);
    r=VarMin+r.*(VarMax-VarMin);
   R=[R; r]; 
end

本例因为最小和最大值一样,如果最小值和最大值均为0/1,则两种方法结果一致。
第二种方法R矩阵为:
在这里插入图片描述

明显第二种方法更符合逻辑。

E、R样本拆分变换(提高样本丰富度)

1.将矩阵的前D列设置为矩阵A,后D列设置为B列,在我们的例子中就是矩阵m的前3列设置为矩阵A,后3列设置为矩阵B。

A=R(:,1:D);% 每行代表一组参数,其中每列代表每组参数的一个参数;行数就代表共有几组参数
B=R(:,D+1:end);

在这里插入图片描述
在这里插入图片描述

2.构造nPop*D的矩阵ABi(i = 1,2,…,D),即用矩阵B中的第i列替换矩阵A的第i列,以本体为例:

for i=1:D
    tempA=A;
    tempA(:,i)=B(:,i);
    AB(1:nPop,1:D,i)=tempA;
end

AB=
在这里插入图片描述

经过这三步我们构造了A、B、AB1、AB2、AB3这五个矩阵,这样我们就有(D + 2) * nPop (即20)组x1、x2、x3输入数据,因此我们将有20组Y值。将上述的数据带入函数 ,这里详细的计算过程就不描述了。根据输入我们得出对应的Y值矩阵。
F、计算所有样本对应的Y值

for i=1:nPop
    YA(i)=myfun(A(i,:));  %A矩阵对应的YA值
    YB(i)=myfun(B(i,:));%B矩阵对应的YB值
    for j=1:D
        YAB(i,j)=myfun(AB(i,:,j));%YAB矩阵对应的YAB值
    end
end

[YA YB YAB1 YAB2 YAB3 ]组合起来
依次各列数据代表YA YB YAB1 YAB2 YAB3值
在这里插入图片描述

G、一阶影响指数S值、总效应指数ST值计算

1.计算公式:
在这里插入图片描述
var方差函数为matlab自带

2.一阶影响指数S值

VarX=zeros(D,1);% S的分子
S=zeros(D,1);
VarY=var([YA;YB],1);% S的分母。 计算基于给定的样本总体的方差(EXCEL var.p())
for i=1:D
    for j=1:nPop
         VarX(i)=VarX(i)+YB(j)*(YAB(j,i)-YA(j));
    end
     VarX(i)=1/nPop*VarX(i);
     S(i)=VarX(i)/VarY;  %一阶影响指数
end

在这里插入图片描述

3.总效应指数ST值
在这里插入图片描述绘图:
在这里插入图片描述
H、分析

1.回到目标函数:y=x(1)^2+2*x(2)+x(3)-1;
可根据数学所学知识,得X1项为幂函数,X2项为系数=2的一次函数,X3项为系数=1的一次函数
根据常识即理论可知,敏感度排序X1>X2>X3
通过SOBOL的总效应指数ST柱状图结果也可以证实以上结论。

2.其次,一阶影响指数S中,第二个变量对应的S为负值,表示单个变量对因变量的敏感度,即所谓的局部敏感性分析法。
|X1|>|X2|>|X3|
而全局要考虑不同变量对因变量的影响,即ST定义——每个输入变量的方差及其与其他输入变量的相互作用而产生的因变量的方差。

3.输入变量的总效应指数ST和一阶影响指数S之间的差异可以衡量该输入与其他输入变量之间相互作用的效果。

二、SOBOL(无目标函数)

1.解决思路

(1)针对简单线性数据及非线性数据,用函数拟合得到公式,随后思路与上面一致。
(2)无法拟合得到公式, 即复杂非线性函数,需要通过借用机器学习模型,作为训练学习模型(黑箱子模型)
本文具体研究攻克第二种情况
有个前提(模型拟合性较好,对应数据较好)
即训练学习模型, 训练集和测试集拟合效果很棒。
如果拟合效果差,SOBOL分析结果一定存在较大误差。

2.模型选择

1.选用最基本的BP神经网络(不建议用BP,因为随机初始权值阈值,会让模型不够稳定),数据也为本人经常用的案例数据 ,103*8

2.前7列代表输入变量, 最后1列代表因变量。

3.选用模型后,几个点需要注意:
(1)数据固定,即训练样本/测试样本固定, 所代表的模型评价才够稳定。
(2)使用固定算子函数代码 ,即 rng default 或者rng(M)等 ,固定输出结果,保证运行结果一致。此一致并不代表永远一致, 只是代表此刻你打开的软件, 不关闭情况下每次运行一致。跟matlab版本有关,不同人运行结果也不一样。
(3)最为关键的一点 ,变量的上下限不能超过案例数据的上下限,为了保证模型的普适性和有效性!!!
比如案例数据的训练样本中, X1-X7的最小值为:
[137 0 0 160 4.4 708 650]
X1-X7的最大值为:
[374 193 260 240 19 1049.90 902]
那么你的sobol序列生成的数据也只能在这个范围,才能保证BP模型的有效性。
(4)生成样本的数量当然以多为好, 但不能跟案例数据样本数量差距太大。
(5)模型测试(不多说了,常规BP回归分析操作)
在这里插入图片描述
在这里插入图片描述

训练集数据的R2为:0.99981
测试集数据的R2为:0.97683
训练集数据的MAE为:0.066274
测试集数据的MAE为:0.83485
训练集数据的MBE为:0.018943
测试集数据的MBE为:0.81483

训练集和测试集R2如果均大于0.9还是可以的,评价指标好坏主观进行判定。

(6)保存模型所需要的变量

save bpnet net P_train  P_test  ps_output ps_input
通过sobol生成样本进行仿真预测。 

3.SOBOL运行

在这里插入图片描述

4.SOBOL结果验证

此时还是有必要验证sobol的结果的。
最直观的就是对敏感性分析结果的结论进行验证:

根据上图,剔除S/ST较小的变量,使用BP一样的参数及样本(剔除后的),测试BP的效果。

看结果差异 ,如果差异不大,那么结果相对准确,如果差异大,那么sobol模型就有问题(模型为稳定模型,不建议用神经网络模型)。

此时,可以控制变量进行验证,如剔除X1/X2/X3/X4/X5/X6/X7其中一个变量,测试其他变量对因变量训练和测试结果。或者是剔除两个变量,或者剔除S/ST较小或者较大的变量进行测试等等。

一般情况下,剔除变量会造成结果变差。

因为BP不稳定,所以不对其进行验证,也不建议用BP进行训练学习。

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

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

相关文章

复现原型链污染

目录 原型链污染是什么 例1 复现 例2 复现 原型链污染是什么 第一章中说到,foo.__proto__指向的是Foo类的prototype。那么,如果我们修改了foo.__proto__中的值,是不是就可以修改Foo类呢? 做个简单的实验: // foo是一个…

【Linux】揭秘:提升dd命令效率的秘密武器!

红帽RHCE试听课程:如何快速实现对服务器密码爆破?https://mp.weixin.qq.com/s/JUpf8G86jvnNwvKLUfWcLQ 红帽RHCE试听课程:linux系统下,用这个命令可以提高60%的工作效率https://mp.weixin.qq.com/s/pZVjMI1PLJzrA8hoPzkgMA 大家好…

LNMP及论坛搭建(第一个访问,单节点)

LNMP:目前成熟的一个企业网站的应用模式之一,指的是一套协同工作的系统和相关软件 能够提供静态页面服务,也可以提供动态web服务,LNMP是缩写 L:指的是Linux操作系统。 N:指的是nginx,nginx提…

MS17-010永恒之蓝漏洞复现

一,认识永恒之蓝 1,简介 永恒之蓝,代号MS17-010。爆发于2017年,其通过控制用户主机,利用SMB协议的漏洞来获取系统的最高权限,进而可以窃取信息,偷窥隐私,甚至使系统瘫痪。曾爆发覆盖…

性能测试遇到问题怎么办?学会分析流程就不怕!

一、内存溢出 1、堆内存溢出 现象: (1)压测执行一段时间后,系统处理能力下降。这时用JConsole、JVisualVM等工具连上服务器查看GC情况,每次GC回收都不彻底并且可用堆内存越来越少。 (2)压测持续…

数据库数据恢复-Oracle数据库文件出现坏块的数据恢复案例

Oracle数据库故障&初检&分析: 打开Oracle数据库时报错,报错信息:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。用户急需恢复zxfg用户下的数据。 出现上述报错的可能原因包括:控制文件损坏、数…

【零基础学Rust | 基础系列 | 数据结构】元组,数组,向量,字符串,结构体

文章标题 简介:一,元组:1,定义元组:2,访问元组元素:3,元组解构:4,元组在函数中的应用: 二,数组:1,数组的声明和…

核心交换机新增了一个网段,现在下面PC可以获取地址访问内网 ,访问外网说DNS有问题不通

环境: SANGFOR AF 8.0.75 SANGFOR AC 13.0.47 H3C S6520-26Q-SI 问题描述: 1.在核心交换机上新规划了一个网段192.168.200.0/24,现在下面PC可以正常获取IP地址和DNS,正常访问内网服务和其它地址段IP ,访问外网说DNS有问题不通打不开网页 2.DNS解析失败,ping dns服务…

C++初阶 - 7.STL简介

目录 1.什么是STL 2.STL的版本 3.STL的六大组件 4.STL的重要性 5.如何学习STL 6.STL的缺陷 1.什么是STL STL(standard template libiary-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法…

Django实现音乐网站 ⑷

使用Python Django框架制作一个音乐网站,在系列文章3的基础上继续开发, 本篇主要是后台歌曲类型表、歌单表模块功能开发。 目录 表结构设计 歌曲类型表结构 歌单表结构 创建表模型 创建表 后台注册表模型 引入表模型 后台自定义 总结 表结构设计…

在线考试系统ssm学生线上答疑问答试卷管理java jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 在线考试系统ssm 系统有1权限:管理员 二…

Docker Compose构建lnmp

目录 Compose的优点 编排和部署 Compose原理 Compose应用案例 安装docker-ce 阿里云镜像加速器 安装docker-compose docker-compose用法 Yaml简介 验证LNMP环境 Compose的优点 先来了解一下我们平时是怎么样使用docker的?把它进行拆分一下: 1…

低代码已经发展到什么水平了?

在数字化转型的浪潮下,企业和组织迫切需要更快速、高效的应用开发方式来满足日益复杂的业务需求。而低代码开发作为一种创新的开发方式,正在引领着应用开发的新潮流。低代码开发允许开发者以可视化的方式快速构建应用,减少了繁琐的代码编写&a…

微服务——elasticsearch

初识ES——什么是elasticsearch elasticsearch的发展 初识ES——正向索引和倒排索引 初识ES——es与mysql的概念对比 类比到mysql中是表结构约束 概念对比 初始ES——安装es和kibana 1.部署单点es 1.1创建网络 要安装es容器和kibana容器并让他们之间相连,这里…

编辑接口和新增接口的分别调用

在后台管理系统中,有时候会碰到新增接口和编辑接口共用一个弹窗的时候. 一.场景 在点击新增或者编辑的时候都会使用这个窗口,新增直接调用接口进行增加即可,编辑则是打开这个窗口显示当前行的数据,然后调用编辑接口。 二.处理方法 在默认的情况下,这个窗口用来处理…

AOP的实战(统一功能处理模块)

一、用户登录权限效验 用户登录权限的发展从之前每个方法中自己验证用户登录权限,到现在统一的用户登录验证处理,它是一个逐渐完善和逐渐优化的过程。 1.1 最初用户登录验证 我们先来回顾一下最初用户登录验证的实现方法: RestController…

Android入门教程||Android 架构||Android 应用程序组件

Android 架构 Android 操作系统是一个软件组件的栈,在架构图中它大致可以分为五个部分和四个主要层。 Linux内核 在所有层的最底下是 Linux - 包括大约115个补丁的 Linux 3.6。它提供了基本的系统功能,比如进程管理,内存管理,设…

Redis的缓存穿透、缓存击穿和缓存雪崩

目录 一、解释说明 二、缓存穿透 1. 什么是缓存穿透? 2. 常见的两种解决方案 (1)缓存空对象 (2)布隆过滤 3. 编码解决商品查询的缓存穿透问题 三、缓存雪崩 1. 什么是缓存雪崩? 2. 缓存雪崩解决方…

蓝桥杯上岸每日N题 第七期(小猫爬山)!!!

蓝桥杯上岸每日N题 第七期(小猫爬山)!!! 同步收录 👇 蓝桥杯上岸必背!!!(第四期DFS) 大家好 我是寸铁💪 冲刺蓝桥杯省一模板大全来啦 🔥 蓝桥杯4月8号就要开始了 &a…

JS中的原型和原型链

原型 1.普通对象 每个对象都有一个__proto__属性,该属性指向对象的原型属性 const obj { name: 张三 }console.log(obj, obj.__proto__);console.log(Object, Object.prototype);我们可以得出:obj.proto Object.prototype console.log(obj.__proto__ Object.pr…