机器学习之MATLAB代码--SMA_LSSVM(十一)
机器学习之MATLAB代码--SMA_LSSVM(十一)
- 代码
- 数据
- 结果
代码
以下代码按照图中顺序依次:
1、
clc;
clear all;
close all
addpath addpath%% 导入数据
% 训练集——190个样本
P_train = xlsread('data','training set','B2:G191')'; T_train= xlsread('data','training set','H2:H191')';
% 测试集——44个样本
P_test=xlsread('data','test set','B2:G45')';T_test=xlsread('data','test set','H2:H45')';N = size(P_test, 2); % 测试集样本数
M = size(P_train, 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);%% 模型训练与预测
SearchAgents_no=20;
Max_iteration=20;
dim=2;
lb=[0.001,0.001];%参数下限
ub=[500,100];%参数上限
type = 'function estimation';
%% c和g寻优
[sig2,gamma]=sma_ls(SearchAgents_no,Max_iteration,dim,ub,lb,type,p_train',t_train',p_test',t_test'); %%蝴蝶优化算法[alpha,b] = trainlssvm({p_train',t_train',type,sig2,gamma,'RBF_kernel'}); %sig2,gamma,
t_sim1= simlssvm({p_train',t_train',type,sig2,gamma,'RBF_kernel'},{alpha,b},p_train');
t_sim2= simlssvm({p_train',t_train',type,sig2,gamma,'RBF_kernel'},{alpha,b},p_test');
t_sim1=t_sim1';t_sim2=t_sim2';%% 数据反归一化
T_sim1 = mapminmax('reverse', t_sim1, ps_output);
T_sim2 = mapminmax('reverse', t_sim2, ps_output);%% 均方根误差
error1 = sqrt(sum((T_sim1 - T_train).^2) ./ M);
error2 = sqrt(sum((T_sim2 - T_test ).^2) ./ N);%% 绘图
figure
plot(1: M, T_train, 'r-*', 1: M, T_sim1, 'k-o', 'LineWidth', 1)
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'训练集预测结果对比'; ['RMSE=' num2str(error1)]};
title(string)
xlim([1, M])
grid offfigure
plot(1: N, T_test, 'r-*', 1: N, T_sim2, 'k-o', 'LineWidth', 1)
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string = {'测试集预测结果对比';['RMSE=' num2str(error2)]};
title(string)
xlim([1, N])
grid off%% 相关指标计算
disp(['训练集数据误差:'])
[mae_train,mse_train,rmse_train,mape_train,error_train,errorPercent_train,R_train]=calc_error(T_train,T_sim1); %
disp(['测试集数据误差:'])
[mae_test,mse_test,rmse_test,mape_test,error_test,errorPercent_test,R_test]=calc_error(T_test,T_sim2); %
2、
function [sig2,gamma]=sma_ls(N,Max_iter,dim,ub,lb,type,pn_train,tn_train,pn_test,tn_test);% 种群初始化
fobj=@(x)fun(x,pn_train,tn_train,pn_test,tn_test,type);
bestPositions=zeros(1,dim);
Destination_fitness=inf;%设置初始全最优适应度
AllFitness = inf*ones(N,1);%初始所有种群的适应度
weight = ones(N,dim);%每一个黏菌的权重
%种群初始化
X=initialization(N,dim,ub,lb); %%佳点集种群初始化
it=1; %初始迭代次数
lb=ones(1,dim).*lb; % 下界
ub=ones(1,dim).*ub; % 上界
z=0.02; % 初始参数z% 主循环
while it <= Max_iter
itfor i=1:N% 检查是否在范围内Flag4ub=X(i,:)>ub;Flag4lb=X(i,:)<lb;X(i,:)=(X(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;AllFitness(i) = fobj(X(i,:));end[SmellOrder,SmellIndex] = sort(AllFitness); %%筛选出最优和最差的种群worstFitness = SmellOrder(N);bestFitness = SmellOrder(1);S=bestFitness-worstFitness+eps; %避免分母为0的操作 %计算每一个黏菌的权重for i=1:Nfor j=1:dimif i<=(N/2) %参考源码,式2.5 weight(SmellIndex(i),j) = 1+rand()*log10((bestFitness-SmellOrder(i))/(S)+1);elseweight(SmellIndex(i),j) = 1-rand()*log10((bestFitness-SmellOrder(i))/(S)+1);endendend%更新当前最优的种群和适应度if bestFitness < Destination_fitnessbestPositions=X(SmellIndex(1),:);Destination_fitness = bestFitness;enda = atanh(-(it/Max_iter)+1); %参考原式2.4 b = 1-it/Max_iter;% 更新每一代种群的位置for i=1:Nif rand<z %Eq.(2.7)X(i,:) = (ub-lb)*rand+lb;elsep =tanh(abs(AllFitness(i)-Destination_fitness)); %Eq.(2.2)vb = unifrnd(-a,a,1,dim); %Eq.(2.3)vc = unifrnd(-b,b,1,dim);for j=1:dimr = rand();A = randi([1,N]); % two positions randomly selected from populationB = randi([1,N]);if r<p %Eq.(2.1)X(i,j) = bestPositions(j)+ vb(j)*(weight(i,j)*X(A,j)-X(B,j));elseX(i,j) = vc(j)*X(i,j);endendendendtrace(it,1)=Destination_fitness;trace(it,2)=mean( AllFitness);it=it+1;
end
%% %%%%%%%%%%%%%用SMA算法优化LSSVM中的参数c和g结束%%%%%%%%%%%%%%%%%%%%
bestX=bestPositions;
sig2=bestX(1);
gamma=bestX(2);
%%
figure;
hold on;
trace = round(trace*10000)/10000;
plot(trace(1:Max_iter,1),'r*-','LineWidth',1.5);
plot(trace(1:Max_iter,2),'bo-','LineWidth',1.5);
legend('最佳适应度','平均适应度');
xlabel('进化代数','FontSize',12);
ylabel('适应度','FontSize',12);
axis([0 Max_iter-1 0 100]);
grid on;
axis auto;line1 = '适应度曲线Accuracy[ISMAmethod]';
line2 = ['(终止代数=', ...num2str(Max_iter),',种群数量pop=', ...num2str(N),')'];
line3 = ['Best c=',num2str(sig2),' g=',num2str(gamma), ...' RMSE=',num2str((Destination_fitness))];
title({line1;line2;line3},'FontSize',12);
3、
%_________________________________________________________________________________
% Salp Swarm Algorithm (SSA) source codes version 1.0
%
% Developed in MATLAB R2016a
%
% Author and programmer: Seyedali Mirjalili
%
% e-Mail: ali.mirjalili@gmail.com
% seyedali.mirjalili@griffithuni.edu.au
%
% Homepage: http://www.alimirjalili.com
%
% Main paper:
% S. Mirjalili, A.H. Gandomi, S.Z. Mirjalili, S. Saremi, H. Faris, S.M. Mirjalili,
% Salp Swarm Algorithm: A bio-inspired optimizer for engineering design problems
% Advances in Engineering Software
% DOI: http://dx.doi.org/10.1016/j.advengsoft.2017.07.002
%____________________________________________________________________________________% This function initialize the first population of search agents
function Positions=initialization(SearchAgents_no,dim,ub,lb)Boundary_no= size(ub,1); % numnber of boundaries% If the boundaries of all variables are equal and user enter a signle
% number for both ub and lb
if Boundary_no==1Positions=rand(SearchAgents_no,dim).*(ub-lb)+lb;
end% If each variable has a different lb and ub
if Boundary_no>1for i=1:dimub_i=ub(i);lb_i=lb(i);Positions(:,i)=rand(SearchAgents_no,1).*(ub_i-lb_i)+lb_i;end
end
4、
function fitness=fun(Position,pn_train,tn_train,pn_test,tn_test,type)sig2=Position(2);gamma=Position(1);[alpha,b] = trainlssvm({pn_train,tn_train,type,gamma,sig2,'RBF_kernel'});predict_test = simlssvm({pn_train,tn_train,type,gamma,sig2,'RBF_kernel'},{alpha,b},pn_test);fitness= sqrt(sum((tn_test-predict_test).^2)/size(tn_test,1));
end
5、
function [mae,mse,rmse,mape,error,errorPercent,R]=calc_error(x1,x2)
%此函数用于计算预测值和实际(期望)值的各项误差指标
% 参数说明
%----函数的输入值-------
% x1:真实值
% x2:预测值%----函数的返回值-------
% mae:平均绝对误差(是绝对误差的平均值,反映预测值误差的实际情况.)
% mse:均方误差(是预测值与实际值偏差的平方和与样本总数的比值)
% rmse:均方误差根(是预测值与实际值偏差的平方和与样本总数的比值的平方根,也就是mse开根号,
% 用来衡量预测值同实际值之间的偏差)
% mape:平均绝对百分比误差(是预测值与实际值偏差绝对值与实际值的比值,取平均值的结果,可以消除量纲的影响,用于客观的评价偏差)
% error:误差
% errorPercent:相对误差
if nargin==2if size(x1,2)==1x1=x1'; %将列向量转换为行向量endif size(x2,2)==1x2=x2'; %将列向量转换为行向量endnum=size(x1,2);%统计样本总数error=x2-x1; %计算误差errorPercent=abs(error)./x1; %计算每个样本的绝对百分比误差mae=sum(abs(error))/num; %计算平均绝对误差mse=sum(error.*error)/num; %计算均方误差rmse=sqrt(mse); %计算均方误差根mape=mean(errorPercent); %计算平均绝对百分比误差r=corrcoef(x1,x2);R=r(1,2);%结果输出disp(['平均绝对误差mae为: ',num2str(mae)])disp(['均方误差mse为: ',num2str(mse)])disp(['均方误差根rmse为: ',num2str(rmse)])disp(['平均绝对百分比误差mape为: ',num2str(mape*100),' %'])disp(['拟合优度/关联系数R为: ',num2str(R)])elsedisp('函数调用方法有误,请检查输入参数的个数')
endend
数据
结果
如有需要代码和数据的同学请在评论区发邮箱,一般一天之内会回复,请点赞+关注谢谢!!
机器学习之MATLAB代码--SMA_LSSVM(十一)相关推荐
- 开源机器学习之MATLAB代码--LSTM-SVRNN(五)
机器学习之MATLAB代码--LSTM-SVRNN(五) 代码 数据 结果 代码 1.cdmnn.m文件 %% 组合模型 %% %% 数据导入 clc;clear;warning off; data= ...
- 机器学习之MATLAB代码--CEEMDAN+EEMD+EMD+VMD+IMF重构络(十八)
机器学习之MATLAB代码--CEEMDAN+EEMD+EMD+VMD+IMF重构络(十八) 压缩分量的EEMD代码 压缩分量的EEMD数据 压缩分量的EEMD结果 CEEMDAN代码 CEEMDAN ...
- 机器学习之MATLAB代码--MATLAB量子粒子群优化LSTM超参数负荷预测(十三)
机器学习之MATLAB代码--MATLAB量子粒子群优化LSTM超参数负荷预测(十三) 代码 数据 结果 代码 代码按照下列顺序依次: 1. function result(true_value,pr ...
- 机器学习之MATLAB代码--LSTM和BiLSTM预测对比(十五)
机器学习之MATLAB代码--LSTM和BiLSTM预测对比(十五) 代码 数据 结果 代码 1. clc; clear; close all; %% 导入数据 load DATA; % 导入60天的 ...
- 机器学习之MATLAB代码--IWOA_BILSTM(基于改进鲸鱼算法优化的BiLSTM预测算法)(十六)
机器学习之MATLAB代码--IWOA_BILSTM基于改进鲸鱼算法优化的BiLSTM预测算法(十六) 代码 数据 结果 代码 1. %% 基于改进鲸鱼算法优化的BiLSTM预测算法 clear;cl ...
- 机器学习之MATLAB代码--SSA-CNN-BiLSTM做电池容量预测(十)
机器学习之MATLAB代码--SSA-CNN-BiLSTM做电池容量预测(十) 代码 数据 结果 代码 代码按照如下顺序: 1. clc close all clear alldata=xlsread ...
- 吴恩达机器学习MATLAB代码笔记(1)梯度下降
吴恩达机器学习MATLAB代码笔记(1)梯度下降 单变量线性回归 1.标记数据点(Plotting the Date) fprintf('Plotting Data') data = load('D: ...
- elm预测matlab,机器学习——极限学习(ELM)matlab代码分析
Hello,大家好,我是小鹏同学.今天在一个网站(https://www.ntu.edu.sg/home/egbhuang/elm_random_hidden_nodes.html)上下载了基本的EL ...
- 机器学习入门:线性回归及梯度下降(附matlab代码)
本文会讲到: (1)线性回归的定义 (2)单变量线性回归 (3)cost function:评价线性回归是否拟合训练集的方法 (4)梯度下降:解决线性回归的方法之一 (5)feature sca ...
最新文章
- Python 快速实现分列转到行!
- UVA 536 TreeRocvery 树重建 (递归)
- JAVA编程思想学习笔记——第一章 对象导论
- python 正则表达式 re.search
- Python之深入解析如何制作国际空间站实时跟踪器
- 串行线路上传输数据报的非标准协议:SLIP
- c语言 linux sd_Linux内核组成部分(二)
- 谁说前端工程师不能成为全栈?
- sv_labs学习笔记——sv_lab4(System Verilog)
- 27岁后月薪低于8K,会被淘汰吗?
- 从点击一个链接到浏览器显示页面,这个过程中发生了什么?
- 设计一个简易的有道词典
- matlab数据的获取、预处理、统计、可视化、降维 | 《matlab数学建模方法与实践(第三版)》学习笔记
- 月光博客:我的知识管理工具列表(强烈推荐收藏)
- Python 矩形法求sin(x)的定积分(完美实现)
- Pytorch测试模型的GFLOPs和Param大小
- 2021美赛C题解题记录(内含完整代码)
- 对话赫拉利与李飞飞:人工智能影响人类的四大问题
- 不看你就亏了。。。。
- 一文看懂:网址,URL,域名,IP地址,DNS,域名解析