睡眠阶段分期——SVM和ELM分别与粒子群算法结合(main)
摘要:本研究的目的是建立具有最佳準(zhǔn)確率的分類模型,以心電圖(ECG)信號(hào)為基礎(chǔ),使用心率變異性(HRV)特征來(lái)識(shí)別睡眠階段。該方法是極端學(xué)習(xí)機(jī)器(ELM)和粒子群優(yōu)化(PSO)的組合,用于特征選擇和隱藏節(jié)點(diǎn)數(shù)的確定。ELM和PSO組合的2、3、4和6分類的測(cè)試精度分別為?82.1%, 76.77%, 71.52%, 62.66%。本文還比較了ELM和支持向量機(jī)(SVM)方法,其測(cè)試精度低于ELM和PSO的組合。根據(jù)結(jié)果,可以得出PSO方法的添加能夠提高分類性能。
文獻(xiàn)鏈接:https://ieeexplore.ieee.org/document/8463307 、 https://ieeexplore.ieee.org/document/8276358
開(kāi)源代碼鏈接:https://github.com/fennialesmana/sleep-stage-identification
目錄
step 1?導(dǎo)入并同步所有數(shù)據(jù)
step 2 特征提取
step 3 建立分類模型
step 4 結(jié)果提取
主函數(shù)代碼:
step 1?導(dǎo)入并同步所有數(shù)據(jù)
clear; clc; close all; fileNames = {'slp01a' 'slp01b' 'slp02a' 'slp02b' 'slp03' 'slp04' ...'slp14' 'slp16' 'slp32' 'slp37' 'slp41' 'slp45' 'slp48' ...'slp59' 'slp60' 'slp61' 'slp66' 'slp67x'};%{ %% STEP 1: IMPORT AND SYNCHRONIZE ALL DATA 導(dǎo)入并同步所有數(shù)據(jù) SlpdbData = []; SingleFile = []; nRecSamples = zeros(length(fileNames), 1); for i=1:size(fileNames, 2) %返回列數(shù)‘18’SingleFile = importslpdb(fileNames(i)); %importslpdb函數(shù)——導(dǎo)入文件內(nèi)容OutputData = struct('filename', fileName, 'time', anTimeGeneratedCell, ...'rr', rrCollection, 'annotation', anClassGeneratedCell, 'age', age, ...'gender', gender, 'weight', weight);SlpdbData = [SlpdbData;SingleFile];nRecSamples(i, 1) = length(SingleFile); end save('nRecSamples.mat', 'nRecSamples'); save('SlpdbData.mat', 'SlpdbData');% Output of this step: % 1. nRecSamples.mat -> 18 x 1 matrix contains number of samples each file % 2. SlpdbData.mat -> 10154 x 1 struct contains synchronized data % END OF STEP 1importslpdb函數(shù)——將頭文件、RR文件、注釋文件導(dǎo)入并構(gòu)成結(jié)構(gòu)體:OutputData = struct('filename', fileName, 'time', anTimeGeneratedCell, ...'rr', rrCollection, 'annotation', anClassGeneratedCell, 'age', age, ...'gender', gender, 'weight', weight);
step 2 特征提取
%% STEP 2: FEATURE EXTRACTION 特征提取SlpdbData = loadmatobject('SlpdbData.mat', 1); loadmatobject函數(shù)——導(dǎo)入第x例(這里為1)樣本的字段及對(duì)應(yīng)數(shù)據(jù) extractfeatures(SlpdbData, 'features/', 'all'); extractfeatures函數(shù)——沒(méi)有輸出變量,輸出兩個(gè)文件↘ 含HRVFeature函數(shù)——計(jì)算特征 % Output of this step: % 1. hrv_features_unorm.xlsx % 2. hrv_features_norm.xlsx % 3. target.xlsx % 4. hrv_features_unorm.mat % 5. hrv_features_norm.mat % 6. target.mat % END OF STEP 2%}loadmatobject函數(shù)——導(dǎo)入第index例樣本的字段及對(duì)應(yīng)數(shù)據(jù)?
extractfeatures函數(shù)——沒(méi)有輸出變量,輸出非歸一化、歸一化的特征文件('xlsx', 'mat')
step 3 建立分類模型
method = 'PSOELM'; classNum = [2 3 4 6]; MAX_EXPERIMENT = 25; MAX_ITERATION = 100;%% STEP 3: BUILD CLASSIFIER MODEL (OBJECT SPECIFIC RECORDING)for iFile=1:length(fileNames)path = sprintf('%s_raw_result/%s_%s_raw_result', method, method, ...fileNames{iFile});mkdir(path); % 在指定的文件路徑下創(chuàng)建新的文件夾for iClass=1:length(classNum)ExperimentResult = struct([]);for iExp=1:MAX_EXPERIMENT % 循環(huán)25次fprintf('Building iFile = %d/%d, iClass = %d/%d, iExp = %d/%d\n', ...iFile, length(fileNames), iClass, length(classNum), iExp, ...MAX_EXPERIMENT);clearvars -except fileNames method MAX_EXPERIMENT classNum iFile ... % 清除除了這些的所有變量iClass ExperimentResult iExp path MAX_EXPERIMENT MAX_ITERATIONnClasses = classNum(iClass); % nClasses = total output class% load features and targetshrv = loadmatobject('features/hrv_features_norm.mat', 1);nFeatures = size(hrv, 2);target = loadmatobject('features/target.mat', 1);target = target(:, nClasses);hrv = [hrv target]; % combine features and target% load nRecSamples and retrieve selected recordingnRecSamples = loadmatobject('nRecSamples.mat', 1);hrv = hrv(getindexrange(nRecSamples, iFile), :); % getindexrange函數(shù)——通過(guò)index得到輸入向量的范圍% SPLIT DATA% 70% training data and 30% testing data using stratified samplingtrainingRatio = 0.7;trainingData = [];testingData = [];for i=1:nClasses ithClassInd = find(hrv(:, end) == i);nithClass = ceil(size(ithClassInd, 1)*trainingRatio);trainingData = [trainingData; hrv(ithClassInd(1:nithClass), :)];testingData = [testingData; hrv(ithClassInd(nithClass+1:end), :)];end% END OF SPLIT DATA% PARTICLE SWARM OPTIMIZATION (PSO) PROCESSPSOSettings.MAX_ITERATION = MAX_ITERATION;PSOSettings.nParticles = 20; % 粒子數(shù)20PSOSettings.W = 0.6; % W是慣性重量PSOSettings.c1 = 1.2; % 𝑐1是每個(gè)粒子趨向于p-best的趨勢(shì)PSOSettings.c2 = 1.2; % 𝑐2是每個(gè)粒子趨向于g-best的趨勢(shì)。PSOSettings.Wa = 0.95;PSOSettings.Wf = 0.05; % Wa、Wf表明高精度的重要性和更少的選擇功能(具體見(jiàn)文獻(xiàn))switch methodcase 'PSOELM' % 具體實(shí)現(xiàn)見(jiàn)鏈接[result, startTime, endTime] = PSOforELM(nFeatures, ...trainingData, testingData, PSOSettings);case 'PSOSVM' % 具體實(shí)現(xiàn)見(jiàn)鏈接[result, startTime, endTime] = PSOforSVM(nFeatures, ...trainingData, testingData, PSOSettings);end% END OF PARTICLE SWARM OPTIMIZATION (PSO) PROCESSExperimentResult(iExp).iterationResult = result;ExperimentResult(iExp).startTime = startTime;ExperimentResult(iExp).endTime = endTime;endsave(sprintf('%s/%s_%s_%dclasses_raw_result.mat', path, method, ...fileNames{iFile}, nClasses), 'ExperimentResult', '-v7.3');endend% END OF STEP 3PSOforELM函數(shù)——PSO的初始化、結(jié)合ELM的PSO迭代
PSOforSVM函數(shù)——PSO的初始化、結(jié)合SVM的PSO迭代
step 4 結(jié)果提取
%{ %% STEP 4: RESULT EXTRACTION extractresults('PSOELM_raw_result', 18, classNum, MAX_EXPERIMENT, MAX_ITERATION); % END OF STEP 4 %}extractresults函數(shù)——沒(méi)有輸出變量,有Excel輸出文件(每次實(shí)驗(yàn)結(jié)果、所有實(shí)驗(yàn)的最好結(jié)果)、保存gBest隨迭代變化圖片
?
僅用于本人學(xué)習(xí),所附文章、開(kāi)源代碼并非原創(chuàng)!
總結(jié)
以上是生活随笔為你收集整理的睡眠阶段分期——SVM和ELM分别与粒子群算法结合(main)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 证据理论(2)—— 多种合成公式
- 下一篇: RS485通信