【MATLAB第84期】基于MATLAB的波形叠加极限学习机SW-ELM代理模型的sobol全局敏感性分析法应用

【MATLAB第84期】基于MATLAB的波形叠加极限学习机SW-ELM代理模型的sobol全局敏感性分析法应用

前言

跟往期sobol区别:
1.sobol计算依赖于验证集样本,无需定义变量上下限。
2.SW-ELM自带激活函数,计算具有phi(x)=e^x激活函数的单层神经网络的一阶和总Sobol指数
本篇文章将演示如何实现波形叠加极限学习机SW-ELM来计算示例模型的一阶和总Sobol指数。

共有四个部分:
1.生成训练和验证集
2.构建ELM的参数。要使用多少个基函数?使用什么正则化参数?要测试哪些稀疏化参数?
3.SW-ELM代理构建并执行全局敏感性分析
4.绘图

一、生成训练和验证集

clear all
res = xlsread('数据集.xlsx');

%%  划分训练集和测试集
%temp = randperm(103);
temp=1:103
P_train = res(temp(1: 80), 1: 7)';
T_train = res(temp(1: 80), 8)';
M = size(P_train, 2);

P_test = res(temp(81: end), 1: 7)';
T_test = res(temp(81: end), 8)';
N = size(P_test, 2);

%%  数据归一化
[p_train, ps_input] = mapminmax(P_train, 0, 1);
p_test = mapminmax('apply', P_test, ps_input);

[t_train, ps_output] = mapminmax(T_train, 0, 1);
t_test = mapminmax('apply', T_test, ps_output);

%%  转置以适应模型
p_train = p_train'; p_test = p_test';
t_train = t_train'; t_test = t_test';

二、ELM参数设置

model_data.nneurons=500;%隐藏层神经元的数量,即ELM基函数
model_data.lambda=1e-4;%L2正则化参数
p_list=[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 0.99];%这里列出了所有要测试的稀疏化参数。
p_sz = length(p_list); %要测试的稀疏化参数的数量

ndim = size(p_train,2); %输入维度
s_sz = size(p_train,1);%训练集大小
Xd_train = p_train; Yd_train = t_train;

va_sz = size(p_test,1); % 验证集数量
Xd_valid = p_test; Yd_valid = t_test;

三、SW-ELM代理构建并执行全局敏感性分析

 elm_valid = exp(Xd_valid * W + bias) * beta;
rel(j) = rel(j) + norm(Yd_valid - elm_valid) / norm(Yd_valid); %选择哪一个稀疏化参数最好的相对误差估计
[W,bias,beta] = ELM(Xd_train,Yd_train,model_data);
elm_valid = exp(Xd_valid * W + bias) * beta; 
T_sim2 = mapminmax('reverse', elm_valid, ps_output);
error = norm(T_test' - T_sim2) / norm(T_test'); % SW-ELM误差
[sobolR,sobolT,sig2] = sobol_elm(W,beta,bias); % 最后这个函数计算灵敏度指数

四、绘图

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

五、代码获取

1.阅读首页置顶文章
2.关注优快云
3.根据自动回复消息,回复“84期”以及相应指令,即可获取对应下载方式。

Matlab实现全局敏感性分析有多种方法,以下为你详细介绍: ### 方法 - **基于SAFE工具箱**:SAFE工具箱是用于执行全局敏感性分析的强大工具,提供了一系列函数,支持多种敏感性分析方法,包括基本效应测试、区域敏感性分析、基于方差(Sobol)的敏感性分析以及PAWN方法。基本效应测试可评估模型输入对输出的基本影响;区域敏感性分析用于分析模型在不同输入区域内的敏感性;基于方差(Sobol)的敏感性分析通过方差分解来量化输入变量对输出变量的贡献;PAWN方法是一种基于分位数的敏感性分析方法,适用于非线性模型[^2]。 - **基于累积分布函数的方法**:全局敏感性分析(GSA)是一组数学技术,旨在评估不确定性通过数值模型的传播,特别是理解不同不确定性来源对模型输出变异性的相对贡献。该方法使用灵敏度指数,将相对影响总结为一个标量度量,不确定性来源可能包括模型参数、外部数据误差等[^3]。 - **SOBOL全局敏感性分析模型**:如基于MATLABSOBOL全局敏感性分析模型运用(含无目标函数,考虑代理模型)可进行全局敏感性分析[^1]。 - **波形叠加极限学习机SW - ELM代理模型sobol全局敏感性分析法**:可利用该代理模型进行全局敏感性分析,通过一些代码步骤完成模型构建和分析过程[^4]。 ### 代码示例 #### 1. 使用SAFE工具箱 安装时需将SAFE工具箱文件夹添加到MATLAB的搜索路径中,调用函数时根据需要选择合适的敏感性分析方法,调用相应的函数进行分析。以下为简化示意: ```matlab % 安装:将SAFE工具箱文件夹添加到MATLAB的搜索路径中 % 假设已经添加好路径 % 调用基于方差(Sobol)的敏感性分析函数示例 % 这里只是示意函数调用,实际需要根据具体情况准备输入输出数据 % 准备输入数据x和输出数据y x = rand(100, 3); % 示例输入数据 y = 4*x(:,1).^2 + 3*x(:,2) + x(:,3); % 示例输出数据 % 调用Sobol敏感性分析函数(假设SAFE中有sobol_analysis函数) % 实际函数名需参考SAFE文档 sobol_result = sobol_analysis(x, y); % 结果解读 % 根据输出结果,评估模型输入对输出的敏感性 ``` #### 2. 简单的全局敏感性分析法示例 ```matlab clear all clc hold off % sample of size N N = 100; % sample generation x1 = rand(N, 1) - 0.5; x2 = rand(N, 1) - 0.5; x3 = rand(N, 1) - 0.5; plot(x1, x2, 'o') hold on plot(x1, x3, 'o') % model evaluations y = 4*x1.^2 + 3*x2 + x3; % set n. of stripes r = 10; for i = 1:r t = (i - 1)/r - 0.5; ind = find(x1 < t + 1/r & x1 > t); condmean1(i) = mean(y(ind)); ind = find(x2 < t + 1/r & x2 > t); condmean2(i) = mean(y(ind)); ind = find(x3 < t + 1/r & x3 > t); condmean3(i) = mean(y(ind)); end S1 = var(condmean1); S2 = var(condmean2); S3 = var(condmean3); plot(x1, y, 'o') hold on; grid plot([-.5 + 1/(2*r):1/r:.5 - 1/(2*r)], condmean1, 'ro') figure plot(x2, y, 'o') hold on; grid plot([-.5 + 1/(2*r):1/r:.5 - 1/(2*r)], condmean2, 'yo') figure plot(x3, y, 'o') hold on; grid plot([-.5 + 1/(2*r):1/r:.5 - 1/(2*r)], condmean3, 'go') ``` #### 3. 波形叠加极限学习机SW - ELM代理模型sobol全局敏感性分析法示例 ```matlab % 假设已经有训练集和验证集数据p_train, t_train, p_test, t_test va_sz = size(p_test, 1); % 验证集数量 Xd_valid = p_test; Yd_valid = t_test; % SW - ELM代理构建并执行全局敏感性分析 elm_valid = exp(Xd_valid * W + bias) * beta; rel(j) = rel(j) + norm(Yd_valid - elm_valid) / norm(Yd_valid); % 选择哪一个稀疏化参数最好的相对误差估计 [W, bias, beta] = ELM(Xd_train, Yd_train, model_data); elm_valid = exp(Xd_valid * W + bias) * beta; T_sim2 = mapminmax('reverse', elm_valid, ps_output); error = norm(T_test' - T_sim2) / norm(T_test'); % SW - ELM误差 [sobolR, sobolT, sig2] = sobol_elm(W, beta, bias); % 最后这个函数计算灵敏度指数 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随风飘摇的土木狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值