1 内容介绍
最近的研究表明,在图像分类领域,极限学习机(ELM)的速度优势和稀疏表示分类(SRC)的准确率优势。然而,这两种方法都有各自的缺点,例如,通常已知 ELM 对噪声的鲁棒性较差,而 SRC 则很耗时。因此,ELM 和 SRC 在计算复杂度和分类精度上相得益彰。为了统一这种互补性,从而进一步提高分类性能,我们提出了一种高效的混合分类器,以利用本文中 ELM 和 SRC 的优势。更准确地说,所提出的分类器由两个阶段组成:首先,通过监督学习训练 ELM 网络。其次,采用关于获得的 ELM 输出的可靠性的判别标准来决定查询图像是否可以正确分类。如果输出可靠,则由 ELM 进行分类;否则查询图像将被提供给 SRC。同时,在 SRC 阶段,通过 ELM 输出提取与查询图像而不是整个字典相适应的子字典。因此可以减少 SRC 的计算负担。手写数字分类、地标识别和人脸识别的大量实验表明,所提出的混合分类器在分类精度上优于 ELM 和 SRC,具有出色的计算效率。
2 仿真代码
function nn = elm_initialization(nn)
% biases and input weights
scale = 1;
nn.b = 2*scale*rand(nn.hiddensize,1,'single')-scale;
nn.W = 2*scale*rand(nn.hiddensize, nn.inputsize,'single')-scale;
% nn.b = randn(nn.hiddensize,1);
% nn.W = randn(nn.hiddensize, nn.inputsize);
% if nn.orthogonal
% if nn.hiddensize > nn.inputsize
% nn.W = orth(nn.W);
% else
% nn.W = orth(nn.W')';
% end
% nn.b=orth(nn.b);
% end
end
% =========================================================================
-------------------------------------------------------------
clear;clc;
addpath(genpath('./.'));
rng('default');
%%%%%%%%%-----Load data--------------------------------------------------
load(fullfile('data','AR.mat'));
traindata = traindata./( repmat(sqrt(sum(traindata.*traindata)), [size(traindata,1),1]) );
testdata = testdata./(repmat(sqrt(sum(testdata.*testdata)), [size(testdata,1),1]) );
% [traindata,PS] = mapminmax(traindata,-1,1);%
% testdata = mapminmax('apply',testdata,PS);
% [traindata,PS] = mapstd(traindata);%
% testdata = mapstd('apply',testdata,PS);
[trainlabel1, testlabel1] = label_convert(trainlabel, testlabel,'2');
%-----------Setting----------------------------------------------------
alpha = 0.1;
kclass = length(unique(trainlabel))/2; % for adaptive class domain selection
nn.hiddensize = 1000; % hidden nodes number
method = {'ELM','RELM'};
nn.activefunction = 's';
nn.inputsize = size(traindata,1);
nn.method = method{2};
nn.type = 'classification';
%-----------Initializzation-----------
nn = elm_initialization(nn);
%--------RELM-LOO--------------------
nn.method = method{2};
nn.C = exp(-4:0.2:4);
[nn, acc_train] = elm_train(traindata, trainlabel1, nn);
%[nn, acc_test] = elm_test(testdata, testlabel, nn);
ID = [];
IDe = [];
lamda = 5e-4;
tol = 1e-2;
tic;
f = 0;
j=1;
%--------RELM-LOO---SRC--------------------
for i = 1 : size(testdata,2)
[nn, acc_test] = elm_test(testdata(:,i), [], nn);
O = nn.testlabel;
[Tf, id] = max(O);
O(id) = -inf;
[Ts, id2] = max(O);
Tdiff = Tf-Ts;
IDe = [IDe, id];
if Tdiff > alpha
ID = [ID, id];
% if id ~= testlabel(i)
% fprintf('Wrong classification for %1.0f th testing sample by ELM criterion (|T_first - T_second| = %1.2f) \n ', i, Tdiff);
% end
else
f = f + 1;
[sim, slabel] = sort(nn.testlabel, 'descend');
newtrainlabel = trainlabel(ismember(trainlabel,slabel(1:kclass)));
newtraindata = traindata(:,ismember(trainlabel,slabel(1:kclass)));
y = testdata(:,i);
s = l1_ls(newtraindata, y, lamda, tol, 1);
newlabel = unique(newtrainlabel);
% if ~ismember(testlabel(i), newlabel)
% fprintf('Wrong classification for %1.0f th testing sample by ELM criterion (|Adaptive class domain|) \n ', i);
% end
gap = [];
for indClass = 1 : length(newlabel)
coef_c = s(newtrainlabel==newlabel(indClass));
Dc = newtraindata(:,newtrainlabel==newlabel(indClass));
gap(indClass) = norm(y-Dc*coef_c)^2;
end
wgap3 = gap ;
index3 = find(wgap3==min(wgap3));
id3 = index3(1);
id = newlabel(id3);
fprintf('%1.0f / %1.0f %1.0f %1.3f %1.0f %1.2f %1.0f \n', i, size(testdata,2), f, sum(s), find(slabel==testlabel(i)), Tdiff, id==testlabel(i));
ID = [ID, id];
end
end
Rec_ELM = sum(IDe==testlabel)/length(testlabel);
Rec_EASRC = sum(ID==testlabel)/length(testlabel); % recognition rate
disp(['RELM_LOO recogniton rate is ' num2str(Rec_ELM)]);
disp(['EASRC recogniton rate is ' num2str(Rec_EASRC)]);
figure
plot(testlabel,'bo');
hold on
plot(IDe,'g+');
plot(ID,'r*');
legend('真实值','RELM','EASRC')
title(['RELM_LOO recogniton rate is ' num2str(Rec_ELM),',EASRC recogniton rate is ' num2str(Rec_EASRC)])
3 运行结果
4 参考文献
[1]徐欣, 周运, 马千里. EEG数据信号的Matlab滤波仿真设计分析研究[J]. 南京邮电大学学报(自然科学版), 2011, 031(006):37-43.
[2]李冲. 视频脑电图(Video-EEG)的临床应用[J]. 现代电生理学杂志, 2005, 12(2):4.
[3]徐敏, 佟德纯, 史习智. 脑电图(EEG)的数字谱分析[J]. 上海交通大学学报, 1981(03):4-16.
[4] Cao J , Zhang K , Luo M , et al. Extreme learning machine and adaptive sparse representation for image classification[J]. Neural Networks, 2016.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。