热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【预测模型】基于哈里斯鹰改进核极限学习机(KELM)分类算法matlab源码

​一、核极限学习机本文将介绍一种新的SLFN的算法,极限学习机,该算法将随机产生输入层和隐含层间的连接权值和隐含层神经元的阈值,且在训

一、核极限学习机

本文将介绍一种新的SLFN的算法,极限学习机,该算法将随机产生输入层和隐含层间的连接权值和隐含层神经元的阈值,且在训练过程中无需调整,只需要设置隐含层的神经元的个数,便可以获得唯一最优解,与传统的训练方法相比,该方法具有学习速率快、泛化性能好等优点。

08e12216043ff0776fb73e96e730f941.png

6abc63ea341dbd88df8e01b926865df7.jpeg

典型的单隐层前馈神经网络如上图所示,输入层与隐含层,隐含层与输出层之间是全连接的。输入层的神经元的个数是根据样本的而特征数的多少来确定的,输出层的神经元的个数是根据样本的种类数来确定的

db79df2e14a1424df4c13647ebfb9d3f.png

46f9deb9bb5d2099e9306a4bbd612a37.png

设隐含层神经元的阈值 b为:

82f2f157f2cd238bc199880c146eeaf5.png

4f247a233d391530b5393cdbeb144bdb.png

965a9e8d31261b0c28126d65707b6384.png

8428a2deec3d4235e4d7197967da8fc5.png

a925360b3bcf7ef94ef3ee06ae24c909.png

81ed974f04a24f49f52900869a3401f3.png

00125413f025a5089ea63941f2585259.png

当隐层神经元的个数和样本数相同时(10)式有唯一的解,也就是说零误差的逼近训练样本。通常的学习算法中,W和b需要不断进行调整,但研究结果告诉我们,他们事实上是不需要进行不断调整的,甚至可以随意指定。调整他们不仅费时,而且并没有太多的好处。(此处有疑虑,可能是断章取义,这个结论有可能是基于某个前提下的)。

def5c32e75b02510c3d776a728597299.png


二、哈里斯鹰算法

8f31da27ad7161b2174475725ad3fca4.png

9a2d7e56ec8c5719bda841532dc97eba.png


三、代码介绍


function [TrainingTime, TestingTime, TrainingAccuracy, TestingAccuracy] = elm_kernel(TrainingData, TestingData, Elm_Type, Regularization_coefficient, Kernel_type, Kernel_para)% Usage: elm(TrainingData_File, TestingData_File, Elm_Type, NumberofHiddenNeurons, ActivationFunction)
% OR: [TrainingTime, TestingTime, TrainingAccuracy, TestingAccuracy] = elm(TrainingData_File, TestingData_File, Elm_Type, NumberofHiddenNeurons, ActivationFunction)
%
% Input:
% TrainingData_File - Filename of training data settic;
Omega_test = kernel_matrix(P',Kernel_type, Kernel_para,TV.P');
TY=(Omega_test' * OutputWeight)'; % TY: the actual output of the testing data
TestingTime=toc%%%%%%%%%% Calculate training & testing classification accuracyif Elm_Type == REGRESSION
%%%%%%%%%% Calculate training & testing accuracy (RMSE) for regression caseTrainingAccuracy=sqrt(mse(T - Y))TestingAccuracy=sqrt(mse(TV.T - TY))
endif Elm_Type == CLASSIFIER
%%%%%%%%%% Calculate training & testing classification accuracyMissClassificationRate_Training=0;MissClassificationRate_Testing=0;for i = 1 : size(T, 2)[x, label_index_expected]=max(T(:,i));[x, label_index_actual]=max(Y(:,i));if label_index_actual~=label_index_expectedMissClassificationRate_Training=MissClassificationRate_Training+1;endendTrainingAccuracy=1-MissClassificationRate_Training/size(T,2) for i = 1 : size(TV.T, 2)[x, label_index_expected]=max(TV.T(:,i));[x, label_index_actual]=max(TY(:,i));if label_index_actual~=label_index_expectedMissClassificationRate_Testing=MissClassificationRate_Testing+1;endendTestingAccuracy=(1-MissClassificationRate_Testing/size(TV.T,2))*100
end%%%%%%%%%%%%%%%%%% Kernel Matrix %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function omega &#61; kernel_matrix(Xtrain,kernel_type, kernel_pars,Xt)nb_data &#61; size(Xtrain,1);if strcmp(kernel_type,&#39;RBF_kernel&#39;),if nargin<4,XXh &#61; sum(Xtrain.^2,2)*ones(1,nb_data);omega &#61; XXh&#43;XXh&#39;-2*(Xtrain*Xtrain&#39;);omega &#61; exp(-omega./kernel_pars(1));elseXXh1 &#61; sum(Xtrain.^2,2)*ones(1,size(Xt,1));XXh2 &#61; sum(Xt.^2,2)*ones(1,nb_data);omega &#61; XXh1&#43;XXh2&#39; - 2*Xtrain*Xt&#39;;omega &#61; exp(-omega./kernel_pars(1));endelseif strcmp(kernel_type,&#39;lin_kernel&#39;)if nargin<4,omega &#61; Xtrain*Xtrain&#39;;elseomega &#61; Xtrain*Xt&#39;;endelseif strcmp(kernel_type,&#39;poly_kernel&#39;)if nargin<4,omega &#61; (Xtrain*Xtrain&#39;&#43;kernel_pars(1)).^kernel_pars(2);elseomega &#61; (Xtrain*Xt&#39;&#43;kernel_pars(1)).^kernel_pars(2);endelseif strcmp(kernel_type,&#39;wav_kernel&#39;)if nargin<4,XXh &#61; sum(Xtrain.^2,2)*ones(1,nb_data);omega &#61; XXh&#43;XXh&#39;-2*(Xtrain*Xtrain&#39;);XXh1 &#61; sum(Xtrain,2)*ones(1,nb_data);omega1 &#61; XXh1-XXh1&#39;;omega &#61; cos(kernel_pars(3)*omega1./kernel_pars(2)).*exp(-omega./kernel_pars(1));elseXXh1 &#61; sum(Xtrain.^2,2)*ones(1,size(Xt,1));XXh2 &#61; sum(Xt.^2,2)*ones(1,nb_data);omega &#61; XXh1&#43;XXh2&#39; - 2*(Xtrain*Xt&#39;);XXh11 &#61; sum(Xtrain,2)*ones(1,size(Xt,1));XXh22 &#61; sum(Xt,2)*ones(1,nb_data);omega1 &#61; XXh11-XXh22&#39;;omega &#61; cos(kernel_pars(3)*omega1./kernel_pars(2)).*exp(-omega./kernel_pars(1));end
end

98ae12ed910bba7b14ce4d3c6d2f1961.png

测试集结果如下图所示&#xff1a;

3ed7bd63c95d6e1322db2ba514db4750.png


推荐阅读
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了[从头学数学]中第101节关于比例的相关问题的研究和修炼过程。主要内容包括[机器小伟]和[工程师阿伟]一起研究比例的相关问题,并给出了一个求比例的函数scale的实现。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
author-avatar
bj_gqdy_342
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有