极限学习机matlab实战

    一、极限学习机(ELM)原理

       极限学习机具有简单的单隐层结构,属于前馈 神经网络,通过对隐层权重及偏置的随机选择来计 算输出权值并完成学习,弥补了梯度算法易陷入局 部极小、过拟合等不足,同时该网络具有高效的学习能力,泛化能力出色。极限学习机的原理图如下图所示。

极限学习机matlab实战的图1
极限学习机matlab实战的图2
极限学习机matlab实战的图3

     二、极限学习机代码实战

         本次实战分为预测与分类,具体为:辛烷值的预测和鸢尾花的分类。

    1、辛烷值的预测

clear all

clc

%% 训练集/测试集产生

load spectra_data.mat

% 随机产生训练集和测试集

temp = randperm(size(NIR,1));

% 训练集——50个样本

P_train = NIR(temp(1:50),:)';

T_train = octane(temp(1:50),:)';

% 测试集——10个样本

P_test = NIR(temp(51:end),:)';

T_test = octane(temp(51:end),:)';

N = size(P_test,2);

%% 数据归一化

% 训练集

[Pn_train,inputps] = mapminmax(P_train);

Pn_test = mapminmax('apply',P_test,inputps);

% 测试集

[Tn_train,outputps] = mapminmax(T_train);

Tn_test = mapminmax('apply',T_test,outputps);

%% ELM创建/训练

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

%% ELM仿真测试

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

% 反归一化

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

%% 结果对比

result = [T_test' T_sim'];

% 均方误差

E = mse(T_sim - T_test);

% 决定系数

N = length(T_test);

R2=(N*sum(T_sim.*T_test)-sum(T_sim)*sum(T_test))^2/((N*sum((T_sim).^2)-(sum(T_sim))^2)*(N*sum((T_test).^2)-(sum(T_test))^2)); 

%% 绘图

figure(1)

plot(1:N,T_test,'r-*',1:N,T_sim,'b:o')

grid on

legend('真实值','预测值')

xlabel('样本编号')

ylabel('辛烷值')

string = {'测试集辛烷值含量预测结果对比(ELM)';['(mse = ' num2str(E) ' R^2 = ' num2str(R2) ')']};

title(string)

    结果显示

极限学习机matlab实战的图4

   2、鸢尾花的分类

clear all

clc

%% 训练集/测试集产生

load iris_data.mat

% 随机产生训练集和测试集

P_train = [];

T_train = [];

P_test = [];

T_test = [];

for i = 1:3

    temp_input = features((i-1)*50+1:i*50,:);

    temp_output = classes((i-1)*50+1:i*50,:);

    n = randperm(50);

    % 训练集——120个样本

    P_train = [P_train temp_input(n(1:40),:)'];

    T_train = [T_train temp_output(n(1:40),:)'];

    % 测试集——30个样本

    P_test = [P_test temp_input(n(41:50),:)'];

    T_test = [T_test temp_output(n(41:50),:)'];

end

%% ELM创建/训练

[IW,B,LW,TF,TYPE] = elmtrain(P_train,T_train,20,'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);

%% 结果对比

result_1 = [T_train' T_sim_1'];

result_2 = [T_test' T_sim_2'];

% 训练集正确率

k1 = length(find(T_train == T_sim_1));

n1 = length(T_train);

Accuracy_1 = k1 / n1 * 100;

disp(['训练集正确率Accuracy = ' num2str(Accuracy_1) '%(' num2str(k1) '/' num2str(n1) ')'])

% 测试集正确率

k2 = length(find(T_test == T_sim_2));

n2 = length(T_test);

Accuracy_2 = k2 / n2 * 100;

disp(['测试集正确率Accuracy = ' num2str(Accuracy_2) '%(' num2str(k2) '/' num2str(n2) ')'])

%% 绘图

figure(2)

plot(1:30,T_test,'bo',1:30,T_sim_2,'r-*')

grid on

xlabel('测试集样本编号')

ylabel('测试集样本类别')

string = {'测试集预测结果对比(ELM)';['(正确率Accuracy = ' num2str(Accuracy_2) '%)' ]};

title(string)

legend('真实值','ELM预测值')

结果显示

极限学习机matlab实战的图5

参考文献:

[1] 史峰,王辉等,智能算法30个案例分析,北京航空航天大学出版社

[2]王雨虹,孟瑶瑶等优化极限学习机的煤与瓦斯突出预测方法[J].控制工程,2022

如有侵权,请联系作者删除~

本期的分享就到这里,关注我后续分享更多编程知识~

作 者 | 华 夏
编 辑 | 华 夏
校 对 | 华 夏

文章来源:matlab学习之家

默认 最新
当前暂无评论,小编等你评论哦!
点赞 2 评论 收藏 1
关注