一、混合核KELM简介

KELM是由Huang等(2006)开发的单隐层前馈神经网络(SLFN),它将核函数引入原ELM,保证了网络具有良好的泛化特性和较快的学习速度,其在一定程度上改善了传统梯度下降训练算法中存在的局部最优以及迭代次数大的缺点,将线性不可分离模式映射到高维特征空间,以获得线性可分离性和精度方面的改进性能。

其中,x 代表样本,f (x) 为神经网络的输出,h(x) 或 H 表示隐藏层特征映射矩阵,β 表示隐藏层和输出层之间的权重。 β 的公式如下:

其中,T 表示训练样本的目标向量,I 为单位矩阵,C为正则化参数。只要对特征 h(x) 的映射拥有少量的知识,就可以使用一个称为内核的函数,如下所示:

使用式(2)和式(3),式(1)可以改写为:

在核函数中,径向基函数(RBF)是被学者们广泛使用的函数之一。 RBF内核可以定义为:

其中,γ 是内核参数。由于KELM模型的结果在很大程度上取决于正则化参数 C 和核参数 γ 的选择,因此需要有效地优化这两个参数。

二、部分源代码

%% 此程序为 粒子群优化混合核极限学习机回归预测
clear;clc;close all;warning off;rng(0)
format compact
%% 加载数据
data=xlsread('数据.xlsx','C2:F1166');
n_samples=size(data,1);
% n=randperm(n_samples);%随机70%训练剩下30%测试
n=1:n_samples;%前70%作为训练集  后30%测试集
m=floor(0.7*n_samples);
input_train=data(n(1:m),1:end-1);
output_train=data(n(1:m),end);
input_test=data(n(m+1:end),1:end-1);
output_test=data(n(m+1:end),end);
%% 2.数据归一化
%输入输出数据归一化
[inputn,inputps]=mapminmax(input_train',-1,1);%归一化到-1 1区间
[outputn, outputps]=mapminmax(output_train',-1,1);
inputn_test=mapminmax('apply',input_test',inputps);%测试集输入也采用训练集输入的归一化参数进行归一化
outputn_test=mapminmax('apply',output_test',outputps);%测试集输出也采用训练集输出的归一化参数进行归一化
P_train=inputn';
T_train=outputn';
P_test=inputn_test';
T_test=outputn_test';
%% 正则化系数与核参数进行设置
%核函数类型1.RBF_kernel 2.lin_kernel 3 poly_kernel 4 wav_kernel
kernel1='RBF_kernel';
kernel2='RBF_kernel';
% 对kernel1的权重w(kernel2的权重为1-w),正则化系数lambda与核参数ker1 ker2寻优
[pop,trace,process]=ssa_hkelm(kernel1,kernel2,P_train,T_train,P_test,T_test);
figure;plot(trace);xlabel('寻优次数/代');grid on;ylabel('适应度值/mse');title('适应度曲线')
% 核参数设置  详情看kernel_matrix
if strcmp(kernel1,'RBF_kernel') & strcmp(kernel2,'RBF_kernel')w=pop(1);lambda=pop(2);ker1=pop(3); ker2=pop(4);
elseif strcmp(kernel1,'RBF_kernel') & strcmp(kernel2,'lin_kernel')w=pop(1);lambda=pop(2);ker1=pop(3); ker2=[];
elseif strcmp(kernel1,'RBF_kernel') & strcmp(kernel2,'poly_kernel')w=pop(1);lambda=pop(2);ker1=pop(3); ker2=pop(4:5);
elseif strcmp(kernel1,'RBF_kernel') & strcmp(kernel2,'wav_kernel')w=pop(1);lambda=pop(2);ker1=pop(3); ker2=pop(4:6);
elseif strcmp(kernel1,'lin_kernel') & strcmp(kernel2,'lin_kernel')w=pop(1);lambda=pop(2);ker1=[]; ker2=[];
elseif strcmp(kernel1,'lin_kernel') & strcmp(kernel2,'poly_kernel')w=pop(1);lambda=pop(2);ker1=[]; ker2=pop(3:4);
elseif strcmp(kernel1,'lin_kernel') & strcmp(kernel2,'wav_kernel')w=pop(1);lambda=pop(2);ker1=[]; ker2=(3:5);
elseif strcmp(kernel1,'poly_kernel') & strcmp(kernel2,'poly_kernel')w=pop(1);lambda=pop(2);ker1=pop(3:4); ker2=pop(5:6);
elseif strcmp(kernel1,'poly_kernel') & strcmp(kernel2,'wav_kernel')w=pop(1);lambda=pop(2);ker1=pop(3:4); ker2=pop(5:7);
elseif strcmp(kernel1,'wav_kernel') & strcmp(kernel2,'wav_kernel')w=pop(1);lambda=pop(2);ker1=pop(3:5); ker2=pop(6:8);
end
function valError= fitness(pop,kernel1,kernel2,XTrain,YTrain,XValidation,YValidation)
% 核参数设置  详情看kernel_matrix
if strcmp(kernel1,'RBF_kernel') & strcmp(kernel2,'RBF_kernel')w=pop(1);lambda=pop(2);ker1=pop(3); ker2=pop(4);
elseif strcmp(kernel1,'RBF_kernel') & strcmp(kernel2,'lin_kernel')w=pop(1);lambda=pop(2);ker1=pop(3); ker2=[];
elseif strcmp(kernel1,'RBF_kernel') & strcmp(kernel2,'poly_kernel')w=pop(1);lambda=pop(2);ker1=pop(3); ker2=pop(4:5);
elseif strcmp(kernel1,'RBF_kernel') & strcmp(kernel2,'wav_kernel')w=pop(1);lambda=pop(2);ker1=pop(3); ker2=pop(4:6);
elseif strcmp(kernel1,'lin_kernel') & strcmp(kernel2,'lin_kernel')w=pop(1);lambda=pop(2);ker1=[]; ker2=[];
elseif strcmp(kernel1,'lin_kernel') & strcmp(kernel2,'poly_kernel')w=pop(1);lambda=pop(2);ker1=[]; ker2=pop(3:4);
elseif strcmp(kernel1,'lin_kernel') & strcmp(kernel2,'wav_kernel')w=pop(1);lambda=pop(2);ker1=[]; ker2=(3:5);
elseif strcmp(kernel1,'poly_kernel') & strcmp(kernel2,'poly_kernel')w=pop(1);lambda=pop(2);ker1=pop(3:4); ker2=pop(5:6);
elseif strcmp(kernel1,'poly_kernel') & strcmp(kernel2,'wav_kernel')w=pop(1);lambda=pop(2);ker1=pop(3:4); ker2=pop(5:7);
elseif strcmp(kernel1,'wav_kernel') & strcmp(kernel2,'wav_kernel')w=pop(1);lambda=pop(2);ker1=pop(3:5); ker2=pop(6:8);
end
% 训练核极限学习机
% 训练过程
n=size(XTrain,1);%样本数
Omega_1 = kernel_matrix(XTrain,kernel1, ker1);%隐含层输出
Omega_2 = kernel_matrix(XTrain,kernel2, ker2);%隐含层输出
Omega_train=w*Omega_1+(1-w)*Omega_2;OutputWeight=((Omega_train+speye(n)/lambda)\(YTrain));% 测试过程
Omega_1_test = kernel_matrix(XTrain,kernel1, ker1,XValidation);
Omega_2_test = kernel_matrix(XTrain,kernel2, ker2,XValidation);
Omega_test=w*Omega_1_test+(1-w)*Omega_2_test;
Y2=Omega_test' * OutputWeight;
[m,n]=size(Y2);
YPred=reshape(Y2,[1,m*n]);
YReal=reshape(YValidation,[1,m*n]);valError =mse(YPred-YReal);
function result(true_value,predict_value,type)
disp(type)
rmse=sqrt(mean((true_value-predict_value).^2));
disp(['根均方差(RMSE):',num2str(rmse)])
mae=mean(abs(true_value-predict_value));
disp(['平均绝对误差(MAE):',num2str(mae)])
mape=mean(abs((true_value-predict_value)./true_value));
disp(['平均相对百分误差(MAPE):',num2str(mape*100),'%'])
r2 = R2(predict_value, true_value);
disp(['R平方决定系数(MAPE):',num2str(r2)])
nse = NSE(predict_value, true_value);
disp(['纳什系数(NSE):',num2str(nse)])fprintf('\n')

三、运行结果


四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]周品.MATLAB 神经网络设计与应用[M].清华大学出版社,2013.
[4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013.
[5]方清城.MATLAB R2016a神经网络设计与应用28个案例分析[M].清华大学出版社,2018.
[6]张婷婷,唐振鹏,吴俊传.基于优化KELM模型的股票指数预测方法[J].统计与决策. 2021,37(13)

【回归预测】基于matlab麻雀算法SSA优化混合核极限学习机KELM回归预测【含Matlab源码 1646期】相关推荐

  1. 灰狼算法(GWO)优化混合核极限学习机(HKELM)分类预测,多输入单输出模型,GWO-HKELM分类预测。

    %采用混合核函数类型:RBF核函数和poly核函数 function omega = kernel_matrix(Xtrain,kernel_type1, kernel_type2,kernel_pa ...

  2. 【Matlab电力负荷预测】粒子群优化支持向量机短期电力负荷预测【含GUI源码 751期】

    一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]粒子群优化支持向量机短期电力负荷预测[含GUI源码 751期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  3. 【Matlab指纹识别】指纹识别匹配门禁系统【含GUI源码 587期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别匹配门禁系统[含GUI源码 587期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  4. 基于深度混合核极限学习机的多变量输入时间序列预测

    0.前言 深度混合核极限学习机的时间序列预测方法:首先采用多层ELM-AE实现抽象特征提取,然后将提取的抽象特征用来训练一个混合核极限学习机实现分类.深度混合核极限学习机实际上是由多层极限学习机+HK ...

  5. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  6. 麻雀算法SSA优化SVR

    前言 采用麻雀算法SSA优化SVR,寻找最佳参数 程序 麻雀算法SSA class SSA():def __init__(self, func, n_dim=None, pop_size=20, ma ...

  7. matlab麻雀搜索算法(SSA)优化BP神经网络,权值和阈

    matlab麻雀搜索算法(SSA)优化BP神经网络,权值和阈值,一个压缩包共三个文件,包括有数据和代码,放入自己的数据即可得出仿真图形 ID:296679013048817MATLAB

  8. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  9. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  10. 【Matlab指纹识别】指纹识别门禁系统【含GUI源码 1692期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别门禁系统[含GUI源码 1692期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继 ...

最新文章

  1. 忠告14:神原裕司郎:成功源于积累
  2. C语言优先级——取反和移位
  3. hdu 2461(线段树求面积并)
  4. 数据结构实验之图论九:最小生成树_每天5分钟用C#学习数据结构(25)图 Part 6
  5. mac m1下编译spring框架
  6. 工作23:vue---封装request做数据请求
  7. docker 获取宿主机ip_Docker基础修炼6——网络初探及单机容器间通信
  8. java 23种设计模式详尽分析与实例解析_Java 23种设计模式详尽分析与实例解析之一--创建型模式...
  9. php函数总结,php函数
  10. 分布式 Spring Cloud 基于 Spring Boot 开发一整套
  11. 【青梅快讯】不断前行,Greenplum发布最新版本 6.16.2
  12. WinAPI设置RGB背景色以及前景色
  13. mysql 10张表左关联查询_mysql left join 左连接查询关联n多张表
  14. 卷积神经网络(三)-ZF-Net和VGG-Nets
  15. linux基础及应用教程第二版课后答案,Linux基础及应用复习题(附加参考答案)
  16. 如何查看windows凭据管理器-windows 凭据 里保存的密码
  17. 深度学习究竟是什么,举个例子解释一下
  18. Cesium自定义编辑多边形
  19. 操作系统【动态分区分配算法——首次适应算法、最佳适应算法、最坏适应算法、临近适应算法】
  20. 01 飞书开发-网页应用JSSDK鉴权流程

热门文章

  1. python any() all()
  2. Carthage的安装和使用
  3. go generate 生成代码
  4. SQL Server 2014,表变量上的非聚集索引
  5. 最近在做中文的全文检索(中文搜索引擎)
  6. Xcode - Plugins And Themes
  7. 使用zoom、overflow解决IE6、IE7、FF下嵌套容器清除浮动问题
  8. ASP.NET2.0一次发送多封邮件
  9. opencv学习笔记1:图片灰度化
  10. Atiitt attilax掌握的前后技术放在简历里面.docx