1 简介
近年来,随着多媒体技术、数字化等技术的快速发展,机器学习领域得到了迅速的发展。极限学习机(ELM)作为一个有竞争力的机器学习算法,以其简洁的理论和易于实施的特点吸引了越来越多学者的关注。在分类和回归等问题中,极限学习机得到了广泛的应用,并表现出了良好的效果。
2 部分代码
%% 基于SPA+ELM
clc
clear all
close all
%% 读取数据
% 红砖
data1=load('红砖.txt');
data1=data1';
% % 石灰
% data2=load('石灰.txt');
% data2=data2';
% % 水泥
% data3=load('水泥.txt');
% data3=data3';
% % 水泥砖
% data4=load('水泥砖.txt');
% data4=data4';
% 渣土
data5=load('渣土.txt');
data5=data5';
% 碎石混凝土
data6=load('混凝土.txt');
data6=data6';
%% 波长
wavelength=data1(1,:);
%% 绘制红砖光谱图像
figure
for i=2:size(data1,1)
plot(wavelength,data1(i,:))
hold on
end
xlabel('波长(cm^-1)')
ylabel('吸光度')
title('红砖光谱特征')
axis tight
box off
% %% 绘制石灰光谱图像
% figure
% for i=2:size(data2,1)
% plot(wavelength,data2(i,:))
% hold on
% end
% xlabel('波长(cm^-1)')
% ylabel('吸光度')
% title('石灰光谱特征')
% axis tight
% box off
% %% 绘制水泥光谱图像
% figure
% for i=2:size(data3,1)
% plot(wavelength,data3(i,:))
% hold on
% end
% xlabel('波长(cm^-1)')
% ylabel('吸光度')
% title('水泥光谱特征')
% axis tight
% box off
% %% 绘制水泥砖光谱图像
% figure
% for i=2:size(data4,1)
% plot(wavelength,data4(i,:))
% hold on
% end
% xlabel('波长(cm^-1)')
% ylabel('吸光度')
% title('水泥砖光谱特征')
% axis tight
% box off
%% 绘制渣土光谱图像
figure
for i=2:size(data5,1)
plot(wavelength,data5(i,:))
hold on
end
xlabel('波长(cm^-1)')
ylabel('吸光度')
title('渣土光谱特征')
axis tight
box off
%% 绘制混凝土光谱图像
figure
for i=2:size(data6,1)
plot(wavelength,data6(i,:))
hold on
end
xlabel('波长(cm^-1)')
ylabel('吸光度')
title('碎石混凝土光谱特征')
axis tight
box off
%% 数据
data=[data1(2:end,:);data5(2:end,:);data6(2:end,:)];
%% 标签
Label=[ones(size(data1(2:end,:),1),1);2*ones(size(data5(2:end,:),1),1);3*ones(size(data6(2:end,:),1),1)];
%% 读取SPA筛选出的变量
load var_sel1
%% 划分训练集和测试集
nn=randperm(size(data,1));
ratio=0.7;
tr=floor(ratio*size(data,1));
% %% 训练集
train_x=data(nn(1:tr),:)';
train_y=Label(nn(1:tr))';
% %% 测试集
test_x=data(nn(tr+1:end),:)';
test_y=Label(nn(tr+1:end))';
%% 数据预处理归一化
% 训练集归一化
[inputn,inputps] = mapminmax(train_x,0,1);
% [outputn,outputps] = mapminmax(train_y,0,1);
% 测试集归一化
input1 = mapminmax('apply',test_x,inputps);
% output1 = mapminmax('apply',test_y,outputps);
plot(trainY_out,'b*','linewidth',1)
hold on
plot(train_y,'ro','linewidth',1)
xlabel('训练集')
ylabel('标签(Label)')
legend('预测标签','实际标签')
methods = {'红砖','渣土','混凝土'};
set(gca,'YGrid', 'on','YTickLabel',methods);
set(gca,'ytick',[1,2,3])
title(['SPA+ELM识别准确率:' num2str(accTrain*100) '%'],'fontsize',13)%title(图形名称)
axis tight
%% ELM测试
testY_out= elmpredict(input1,IW1,B1,LW1,TF,TYPE);
% T_sim = mapminmax('reverse',Tn_sim,outputps);
% 计算准确率
accTest = sum(test_y==testY_out)/length(testY_out);
figure
plot(testY_out,'b*','linewidth',1)
hold on
plot(test_y,'ro','linewidth',1)
xlabel('测试集')
ylabel('标签(Label)')
legend('预测标签','实际标签')
methods = {'红砖','渣土','混凝土'};
set(gca,'YGrid', 'on','YTickLabel',methods);
set(gca,'ytick',[1,2,3])
title(['SPA+ELM识别准确率:' num2str(accTest*100) '%'],'fontsize',13)%title(图形名称)
axis tight
%% 评价指标
[Accuracy,Precision,Recall,F_score]=Metrix(test_y,testY_out);
%% 显示
disp(['准确率Accuracy:',num2str(Accuracy) '%'])
disp(['精准率Precision:',num2str(Precision) '%'])
disp(['召回率Recall:',num2str(Recall) '%'])
disp(['F_score:',num2str(F_score) '%'])
3 仿真结果
4 参考文献
[1]李丽娜. 基于极限学习机的分类问题研究[D]. 辽宁师范大学, 2017.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。