极限学习机elm代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档