elm学习总结

来源:互联网 发布:hql与sql exists in 编辑:程序博客网 时间:2024/06/14 02:00

学习了解ELM(极限学习机);

(1)算法介绍

极限学习机,该算法随机产生输入层与隐含层的链接权值与隐含层神经元的阈值,并且在训练过程中无需调整,只要设置隐含层的神经元个数就可以得到最优解。

算法的步骤可以分为:

1.确定隐含层的神经元个数,随机设定输入层与隐含层的链接权值,和隐含层的神经元的偏置b

2.选择一个无限可微的函数作为隐含层神经元的激活函数(也叫压制函数)计算隐含层的输出H

3.计算输出层权值

    非线性激活函数可以使用,也可以使用不可微函数,甚至可以使用不连续的函数作为激活函数。

(2)问题描述

单隐含层的前馈神经网络在很多的邻域得到了很好的应用,然而传统的学习算法有很多的缺点,比如说速度慢,容易陷入局部极小值点,对学习速率很敏感,容易过学习和欠学习,因此对于仪征可以速度快且泛化性能好的算法很重要。

适用于回归,拟合,也适用于分类、模式识别

(3)程序流程

 

ELM算法流程图

(4) 程序实现

1.ELM做回归拟合

function [IW,B,LW,TF,TYPE] = elmtrain(P,T,N,TF,TYPE)

参数传递 Pn_train,Tn_train,20,'sig',0

%输入数据、输出数据、节点数、采取函数,采取模式

%根据参数数量判断

if nargin < 2

    error('ELM:Arguments','Not enough input arguments.');

end

if nargin < 3

    N = size(P,2);

end

if nargin < 4

    TF = 'sig';

end

if nargin < 5

    TYPE = 0;

end

if size(P,2) ~= size(T,2)

    error('ELM:Arguments','The columns of P and T must be same.');

end

[R,Q] = size(P);

if TYPE  == 1

    T  = ind2vec(T);%变成矢量表示

end

[S,Q] = size(T);

% Randomly Generate the Input Weight Matrix

IW = rand(N,R) * 2 - 1;   %随机取权值

% Randomly Generate the Bias Matrix

B = rand(N,1);  %随机取阈值

BiasMatrix = repmat(B,1,Q);%重新排列

% Calculate the Layer Output Matrix H

tempH = IW * P + BiasMatrix;%隐含层的输出

switch TF       %根据采取的激活函数算出不同的输出

    case 'sig'

        H = 1 ./ (1 + exp(-tempH));

    case 'sin'

        H = sin(tempH);

    case 'hardlim'

        H = hardlim(tempH);

end

% Calculate the Output Weight Matrix

LW = pinv(H') * T';  %计算输出权重

 

function Y = elmpredict(P,IW,B,LW,TF,TYPE)

%输入数据,输入权重,阈值,隐含层输出层权值,隐含层节点数,模式选择

if nargin < 6%参数判断

    error('ELM:Arguments','Not enough input arguments.');

end

Q = size(P,2);%计算输出层的输出H

BiasMatrix = repmat(B,1,Q);

tempH = IW * P + BiasMatrix;

switch TF %判断激活函数的模式

    case 'sig'

        H = 1 ./ (1 + exp(-tempH));

    case 'sin'

        H = sin(tempH);

    case 'hardlim'

        H = hardlim(tempH);

end

% Calculate the Simulate Output

Y = (H' * LW)';%计算输出层的输出

if TYPE == 1%模式选择

    temp_Y = zeros(size(Y));

    for i = 1:size(Y,2)

        [max_Y,index] = max(Y(:,i));

        temp_Y(index,i) = 1;

    end

    Y = vec2ind(temp_Y); %向量转换

End

Tic       %关键代码

%% ELM创建/训练

[IW,B,LW,TF,TYPE] = elmtrain(Pn_train,Tn_train,20,'sig',0);

%% ELM仿真测试

Tn_sim = elmpredict(Pn_test,IW,B,LW,TF,TYPE);

反归一化

T_sim = mapminmax('reverse',Tn_sim,outputps);

Toc

2.ELM做分类

Tic    %关键代码

%% ELM创建/训练

[IW,B,LW,TF,TYPE] = elmtrain(P_train,T_train,100,'sig',1);

%% ELM仿真测试

T_sim_1 = elmpredict(P_train,IW,B,LW,TF,TYPE);

T_sim_2 = elmpredict(P_test,IW,B,LW,TF,TYPE);

toc 

(5)结果分析

时间已过 1.014221 秒。

训练集正确率Accuracy = 92.6%(463/500)

测试集正确率Accuracy = 86.9565%(60/69)

病例总数:569  良性:357  恶性:212

训练集病例总数:500  良性:313  恶性:187

测试集病例总数:69  良性:44  恶性:25

良性乳腺肿瘤确诊:42  误诊:2  确诊率p1=95.4545%

恶性乳腺肿瘤确诊:18  误诊:7  确诊率p2=72%

 

时间已过 0.257515 秒。

E =

   6.7835e-04

R2 =

1.0000

 

 

ELM的预测误差图

 

ELM预测与对比图

0 0
原创粉丝点击