1-1 MATLAB深度极限学习机

本博客来源于CSDN机器鱼,未同意任何人转载。

更多内容,欢迎点击本专栏目录,查看更多内容。

参考[1]魏洁.深度极限学习机的研究与应用[D].太原理工大学[2023-10-14].DOI:CNKI:CDMD:2.1016.714596.

目录

0.引言       

1.ELM-AE实现

2.DELM实现

3.主程序

4.结尾


0.引言       

深度极限学习机(DELM)目前主要含两种基本结构:1、利用传统深度学习框架(主要是堆栈自动编码器,或者是深度置信网络)进行数据的深度自适应特征提取,而后将获得的特征输入至极限学习机及其变种中进行分类或回归;2、利用极限学习机与自动编码器相结合,形成极限学习机-自动编码器(ELM-AE),结构如图1所示。原理很简单:

H=f(wx+b), x=H\beta

f是隐含层激活函数;w是输入层权重,随机值;b是隐含层偏置也是随机值,β是我们要求的值,也就是输出层权重,直接利用最小二乘法得到:

\beta =(H^{t}H)^{-1}H^{t}x

图1 极限学习机-自动编码器结构
图1 极限学习机-自动编码器结构

将ELM-AE作为无监督学习的基础单元对输入数据进行贪婪逐层无监督预训练,并保存ELM-AE由最小二乘法获得的输出权值矩阵,然后用这些输出层权重来初始化多层极限学习机(ML-ELM,也称深度极限学习机,Deep extreme leaning machine,DELM),最后结合标签信息对DELM的输出层权重进行学习,结果图2所示。

图2 深度极限学习机结构

具体操作就是先用输入x构建第一个ELM-AE,得到H1与β1,然后输入H1构建第二个ELM-AE,得到H2与β2......,这样就能得到一堆β,构建的多隐含层DELM,DELM的输出就是:

y=\beta_{n}^{-1}\beta_{n-1}^{-1}...\beta_{1}^{-1}wx

最后再次基于最小二乘法反向计算w,就能得到所有的权重。

1.ELM-AE实现

前面提到过ELM-AE就是极限学习机,只不过输入=输出,初始化方式与一般的极限学习机的区别是,权重为正交随机值,其实直接用rand或者randn效果都差不多,效果好不好完全看运气,初始化如下:

function elmae = delmsetup(opts, x)[r,n] = size(x);elmae.sizes = [n, opts.sizes];for u = 1 : numel(elmae.sizes) - 1mu=rand;b=log(1+exp(0.1*rand));if elmae.sizes(u)>=elmae.sizes(u+1)elmae.elmae{u}.IW =orth(mu+b*rand(elmae.sizes(u),elmae.sizes(u+1)));%根据文献 将输入权值赋值到-1,1elseIW =(mu+b*rand(elmae.sizes(u),elmae.sizes(u+1)))';elmae.elmae{u}.IW=orth(IW)';endB = orth(rand(elmae.sizes(u+1),1));BiasMatrix = repmat(B,1,r)';elmae.elmae{u}.b=BiasMatrix;elmae.elmae{u}.beta=rand(elmae.sizes(u+1),elmae.sizes(u));end
end

程序我是一次性建立多个ELM-AE,然后保存在一个结构体里,接着用就是训练代码,加入了正则化参数,使得原来的更新公式,如下,C是提前定义的,对训练结果有影响

\beta =(H^{t}H+1/C)^{-1}H^{t}x

function elmae=ELMAEtrain(elmae,opt,P)
% 极限学习机-自动编码器的训练  输入=输出
%INPUT     N:隐含层节点数
%          P:输入数据
%          lambda:L2正则化系数
%          TF:激活函数种类
%OUTPUT    beta:输出权值
N=size(elmae.IW,2);
tempH = P*elmae.IW+elmae.b;
switch opt.TF  %激活函数case 'sig'H = 1 ./ (1 + exp(-tempH));case 'sin'H = sin(tempH);case 'hardlim'H = hardlim(tempH);
end
elmae.beta = (pinv((H'*H+eye(N)/opt.lambda)')*H')*P;

2.DELM实现

先利用前面训练得到的beta求解倒数第二层隐含层的输出,然后继续最小二乘法计算最后一层的取种

function delm=delmtrain(elmae,opts,P_train,T_train)
% ELM-AE无监督训练
for u = 1 : numel(opts.sizes)u;elmae.elmae{u} = ELMAEtrain(elmae.elmae{u},opts,P_train);delm.elmae{u}=pinv(elmae.elmae{u}.beta);P_train=P_train*delm.elmae{u};
end
% 分类或回归层的监督训练
weight=top_ELMtrain(P_train,T_train,opts);
delm.output=weight;
function [beta]=top_ELMtrain(P,T,opt)
%INPUT    
%          P:输入数据
%          T:输入数据标签
%          lambda:L2正则化系数
%OUTPUT    beta:输出权值
N =size(P,2);
beta = pinv((P'*P+eye(N)/opt.lambda)')*P'*T;end

预测或者推理的时候,就直接用前面依次计算的beta与最后一层的beta求解

function output=delmpredict(delm,P)num_hidden=numel(delm.elmae);
for i=1:num_hiddenP=P*delm.elmae{i};
endoutput=P*delm.output;

3.主程序

%% DELM分类
%% 清空环境
close all;clear;format compact;format short;clc
%%
load data_feature_fft
%原始数据是一行一个样本,因此计算归一化的时候先做转置
[train_x,train_ps]=mapminmax(train_X',-1,1);
test_x=mapminmax('apply',test_X',train_ps);
%我写的delm的输入输出都是一列一个样本,需要对原始数据转换一下
P_train = double(train_x)' ;
P_test  = double(test_x)' ;
T_train = double(train_Y);
T_test  = double(test_Y);%% 参数设置
opts.lambda=inf;%正则化系数,无穷就是不用正则化
opts.TF='sig';%激活函数
opts.sizes=[30 20];%几个数就是几个隐含层,n个隐含层各自的节点就是[n1;n2;n3;n4;....nn]
%% 初始化网络权重
elmae=delmsetup(opts,P_train);
%% 训练
delm=delmtrain(elmae,opts,P_train,T_train);
%% 测试;
T2=delmpredict(delm,P_test);
%% 正确率计算
[~,J1]=max(T2,[],2);%预测标签
[~,J2]=max(T_test,[],2);%实际标签
accuracy=sum(J1==J2)/length(J1)
figure
stem(J1)
hold on
plot(J2,'*')
legend('预测标签','真实标签')

 这个代码即可用来预测,也可用来分类,分类的时候输出值就是onehot编码,比如一共3类,第一类的标签是1 0 0,第二类的标签是0 1 0;用作回归的时候,就是具体的值。

4.结尾

由于各个elm-ae的权重都是随机生成的,效果直接影响最后的准确性,下一章我们来讲解怎么操作利用优化算法来优化权重

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

头歌 数据采集概述答案

问题1:以下哪个不是Scrapy体系架构的组成部分? 正确答案:B. 支持者(Support) 解释:Scrapy的主要组成部分包括: 爬虫(Spiders):定义如何爬取网站和提取数据 引擎(Engine):负责控制数据流在系统中…

【uniapp】记录tabBar不显示踩坑记录

由于很久没有使用uniapp了,官方文档看着又杂乱,底部tab导航栏一直没显示,苦思许久,没有发现原因,最后网上搜到帖子,list里的第一个数据,pages 的第一个 path 必须与 tabBar 的第一个 pagePath 相…

JVM 知识点梳理

JDK 、JRE、JVM JDK( Java Development Kit ) Java开发工具包 JRE 开发命令工具(运行java.exe、编译javac.exe、javaw.exe) JRE( Java Runtime Environment )Java运行环境 JVM Java核心类库(l…

蓝桥杯 之 第27场月赛总结

文章目录 习题1.抓猪拿国一2.蓝桥字符3.蓝桥大使4.拳头对决5.未来竞赛6.备份比赛数据 习题 比赛地址 1.抓猪拿国一 十分简单的签到题 print(sum(list(range(17))))2.蓝桥字符 常见的字符匹配的问题,是一个二维dp的问题,转化为对应的动态规划求解 力扣…

Ambari、Bigtop源码编译最新支持情况汇总

以下是目前的版本情况 支持了绝大部分的组件编译及安装 版本组件名称组件版本env 版本v1.0.5Ozone1.4.11.0.5Impala4.4.11.0.5Nightingale7.7.21.0.5Categraf0.4.11.0.5VictoriaMetrics1.109.11.0.5Cloudbeaver24.3.31.0.5Celeborn0.5.31.0.5v1.0.4Doris2.1.71.0.4v1.0.3Phoen…

仅靠prompt,Agent难以自救

Alexander的观点很明确:未来 AI 智能体的发展方向还得是模型本身,而不是工作流(Work Flow)。还拿目前很火的 Manus 作为案例:他认为像 Manus 这样基于「预先编排好的提示词与工具路径」构成的工作流智能体,…

【Docker系列一】Docker 简介

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Sqoop 常用命令

Sqoop 是用于在 Hadoop 和关系型数据库(如 MySQL、Oracle 等)之间高效传输数据的工具。以下是常用的 Sqoop 命令及示例: CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY, -- 自增主键,用于唯一标识每一行name VAR…

连续型随机变量及其分布

连续型随机变量 数学公式可以看作一门精确描述事物的语言,比语言尤其是汉语的模糊性精确多了!离散型数据的处理可以通过枚举和相加进行处理。而连续型数据则没有办法这样处理。我们必须要通过函数和取值区间还有微积分计算。 [定义1&#x…

PostgreSQL_数据使用与日数据分享

目录 前置: 1 使用 1.1 获取前复权因子 1.2 查询股票的纵向数据 1.3 查询股票的横向数据 2 日数据分享(截止至:2025-03-21) 总结 前置: 本博文是一个系列。在本人“数据库专栏”-》“PostgreSQL_”开头的博文。…

Rocky9.5基于sealos快速部署k8s集群

首先需要下载 Sealos 命令行工具,sealos 是一个简单的 Golang 二进制文件,可以安装在大多数 Linux 操作系统中。 以下是一些基本的安装要求: 每个集群节点应该有不同的主机名。主机名不要带下划线。 所有节点的时间需要同步。 需要在 K8s …

qt实现一个简单http服务器和客户端

一、功能简介 服务器&#xff1a; 登录功能、下载文件功能 客户端&#xff1a; 登录功能、下载文件功能、上传成绩功能 二、服务器代码 //HttpServer.h #ifndef HTTPSERVER_H #define HTTPSERVER_H#include <QMainWindow> #include <QTcpSocket> #include <QTc…

基于Python+Django的旅游管理系统

项目介绍 PythonDjango旅游管理系统 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 - 前台功能包括&#xff1a;首页、景点管理、门票管理、旅游资讯、在线反馈、。 - 后台功能包…

用数组模拟循环队列

设计一种循环队列&#xff0c;线性数据结构&#xff0c;其操作表现为 FIFO(先进先出)原则且队尾被连接在队首之后形成一个循环&#xff0c;称作“环形缓冲器” 循环队列的好处是可以利用这个队列之前使用过的空间&#xff0c;但是他的空间大小是固定的 循环队列我们使用单链表…

maven为什么发生依赖冲突?怎么解决依赖冲突?

maven为什么发生依赖冲突&#xff1f;怎么解决依赖冲突&#xff1f; 我们在开发的时候&#xff0c;偶尔会遇到依赖冲突的时候&#xff0c;一般都是NoClassDefFoundError、ClassNotFoundException、NoSuchMethodError。打开搜索框又发现有这个类&#xff0c;明明就是引入进来了&…

从国家能源到浙江交通投资,全息技术在能源交通领域的创新应用

一、3D全息技术行业应用参数及设计制作要求 全息投影 全息投影技术通过激光器、全息片等设备&#xff0c;将物体的三维信息记录下来&#xff0c;并在特定条件下再现。应用参数包括投影距离、投影面积、投影亮度等。设计制作要求&#xff1a;高清晰度、高亮度、低噪音、稳定性好…

Adobe After Effects 操作

Adobe After Effects &#xff08;AE&#xff09;可以实现将多个元素进行合成&#xff0c;实现特殊效果。AE的项目文件是aep&#xff0c;可以将素材、层、效果等一切信息&#xff0c;保存在这个项目文件中。 AE的原理&#xff0c;和PS的原理非常类似。 操作界面 操作界面如…

Flutter使用自签证书打包ipa

在 Flutter 中使用自签证书打包 IPA 文件&#xff0c;可以通过以下步骤完成&#xff1a; 1. 准备自签证书 方式一 生成自签证书&#xff1a; 打开 钥匙串访问 应用。选择 证书助理 > 创建证书。按照提示填写证书信息&#xff0c;选择证书类型为 代码签名&#xff0c;并保存…

三.Go的第一个程序hello.go

新建hello.go,代码如下 package mainimport "fmt"func main() {fmt.Println("hello world") }编译hello.go 控制台终端为hello.go同级目录 执行 go build hello.go编译成功同级目录下生成 同名exe文件 也可以直接执行 go run hello.go解释如下 一 .…

WebLogic中间件常见漏洞

一、后台弱⼝令GetShell 1.环境搭建 cd vulhub-master/weblogic/weak_password docker-compose up -d 2.访问网站并登陆后台 /console/login/LoginForm.jsp 默认账号密码&#xff1a;weblogic/Oracle123 3.点击部署&#xff0c;点击安装&#xff…