极限学习机elm代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%与传统的学习算法不同,单隐层前馈神经网络(SLFNs)——极限学习机(ELM)对输入权值进行动态选择
%%清空环境变量 elm
clc
clear
close all
format compact
rng('default')
%% 导入数据
% [file,path] = uigetfile('*.xlsx','Select One or More Files', 'MultiSelect', 'on');
% filename=[path file];
filename='CPSO优化ELM实现分类\最终版本训练集.xlsx';
M=xlsread(filename);
input=M(:,1:end-1);
output=M(:,end);
%% 数据预处理
[inputn,maps]=mapminmax(input',0,1);
% 输出标签转换为one—hot标签
outputn=one_hot(output);
n_samples=size(inputn,2);
n=randperm(n_samples);
m=floor(0.7*n_samples);
Pn_train=inputn(:,n(1:m));
Tn_train=outputn(:,n(1:m));
Pn_valid=inputn(:,n(m+1:end));
Tn_valid=outputn(:,n(m+1:end));
%% 节点个数
inputnum=size(Pn_train,1);%输入层节点
hiddennum=160; %隐含层节点
type='sig';%sin %hardlim %sig%隐含层激活函数
%%
tic
[IW,B,LW,TF] =
elmtrain(Pn_train,Tn_train,hiddennum,'sig');
TY2 = elmpredict(Pn_valid,IW,B,LW,TF);
toc
% 计算分类概率
prob0=prob_cal(TY2);%第一行为属于0(不滑坡)的概率第二行为属于1(滑坡)的概率,上下两个概率和为1
% 看看准确率
% 验证集分类结果
[~,J]=max(Tn_valid);
[~,J1]=max(prob0);
disp('优化前')
accuracy=sum(J==J1)/length(J)
TY2 = elmpredict(Pn_train,IW,B,LW,TF);
% 计算分类概率
prob0=prob_cal(TY2);%第一行为属于0(不滑坡)的概率第二行为属于1(滑坡)的概率,上下两个概率和为1
% 看看准确率
% 验证集分类结果
[~,J]=max(Tn_train);
[~,J1]=max(prob0);
disp('优化前')
accuracy=sum(J==J1)/length(J)
function [IW,B,LW,TF] = elmtrain(P_train,T,N,TF)
%P_train=train;T=train_label;N=200;TF='sig';
% P - Input Matrix of Training Set (R*Q)
% T - Output Matrix of Training Set (S*Q)
% N - Number of Hidden Neurons (default = Q)
% TF - Transfer Function:'sig' for Sigmoidal function (default)',sin' for Sine function,'hardlim' for Hardlim function
% IW - Input Weight Matrix (N*R)
% B - Bias Matrix (N*1)
% LW - Layer Weight Matrix (N*S)
% [IW,B,LW,TF] = elmtrain(P,T,20,'sig')
% Y = elmtrain(P,IW,B,LW,TF)
% See also ELMPREDICT
%输出样本数量必须与输出样本数量一致。
[R,Q] = size(P_train);%R=2,Q=1900
[S,Q] = size(T); %S=1,Q=1900
% 随机产生输入权重矩阵,1900*2
% rand('seed',sum(100*clock))
IW = rand(N,R) * 2 - 1;
% 随机产生隐层偏置 1900*1
% rand('seed',sum(100*clock))
B = rand(N,1);
BiasMatrix = repmat(B,1,Q);
% 计算隐层输出H
tempH = IW * P_train + BiasMatrix;
switch TF
case'sig'
H = 1 ./ (1 + exp(-tempH));
case'sin'
H = sin(tempH);
case'hardlim'
H = hardlim(tempH);
end
% 计算隐层到输出层之间的权重
LW = pinv(H') * T';
end
function y=one_hot(x)
class=unique(x);
disp(['此数据为',num2str(length(class)),'分类']) if min(x)==0
x=x+1;
else
x=x;
end
n_class=length(class);
n_samples=length(x);
label=zeros(n_class,n_samples);
for i=1:n_samples
label(x(i),i)=1;
end
y=label;
end