主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

長短期記憶ネットワークを使用した心电图信号の分類

この例では生理网2017年挑战からの心拍心電図(ECG)データを深層学習と信号処理を使用して分類する方法を示します。特に,この例では長短期記憶ネットワークと時間——周波数解析を使用します。

はじめに

ECGは,人类の心臓の电影的动感を一道。医师は心脏ます使て,患者の心拍が正式か正常かどうかをか検出しを的しし

心灵驾驶(AFIB)は,心臓の上部,心房が下载室,心室と连携せず脉打っいるいるとき発にする脉打っているときににに种种种种ているときにの种种种てているときにに一种种

この例では,物理体2017挑战[1],[2],[3.]からのecgデータを使使使。これこれ,https://physionet.org/challenge/2017/で入手できます。データは,300 Hzでサンプリングされ,専門家の手によって次の4つの別々のクラスに分けられた,一連の心电图信号で構成されています。正常(N), AFib (A),その他の律動(O),およびノイズを含む録音(~)。この例では,深層学習を使用して分類プロセスを自動化する方法を説明します。手順として,AFibの兆候を示す信号から正常な心电图信号を識別できるバイナリ分類器を調査します。

この例では,シーケンスおよび时系列のデータ习习适した再帰型ネットワークニューラル(rnn)のネットワーク(lstm),长短记忆(lstm)ネットワークネットワーク使します.lstmネットワークネットワーク,シーケンスは,シーケンスのステップステップ间の长な依存关键词を习ます.lstm层(lstmLayer(深度学习工具箱))ではでは方向の时空系列をでき,双方向のlstm层(Bilstmlayer.(深度学习工具箱))では顺方向とと逆逆の両方向の両をできます。このこのではますこのでは,双方向のlstm层层使向し。

学習プロセスを高速化するには,GPUを使用するマシン上でこの例を実行します。マシンにGPUと并行计算工具箱™がある場合は,MATLAB®は学習にGPUを自動で使用します。それ以外ではCPUを使用します。

データの読み込みおよび确认

reckphysionetdata.スクリプトを実行して生理网网络サイトからデータをダウンロードし,適切な形式の心电图信号を含む垫ファイル(physionetdata.mat.)〖生成〗。データデータダウンロードにははますががあります。

recotphysionetdata负载PhysionetData

読み込み読み込み作品ではワークににににに数,信号标签が追加されます。信号はecg信号を保持细胞配列です。标签は対応する信号のグラウンドトゥルースラベルを保持する直言配列です。

信号(1:5)
ans =5×1个单元阵列{1×9000 double} {1×9000 double} {1×18000 double} {1×9000 double} {1×18000 double}
标签(1:5)
ans =.5×1分类N N N a

关节总结をを使て,データに含まれるafib信号と正常信号の确认ます。

总结(标签)
A 738 n 5050

信号長のヒストグラムを生成します。9000年ほとんどの信号はサンプルの長さです。

l = cellfun(@长度,信号);H =直方图(L);XTICKS(0:3000:18000);XTicklabels(0:3000:18000);标题(“信号长度”)Xlabel('长度')ylabel('数数'

各クラスから1つの信号のの可を可化ますを可化ます。通讯ますが,afib心拍,afib心拍は。P波は,正常な心跳信号QRS群の前にをます。正式な信号ますではとqrs群がれれますととととと示さますますますますますますますれれ

normal =信号{1};afib =信号{4};子图(2,1,1)绘图(正常)标题('正常节奏')XLIM([4000,5200])Ylabel('幅度(mv)')文本(4330,150,'P''水平对齐'“中心”)文本(4370,850,“QRS”'水平对齐'“中心”)子图(2,1,2)绘图(AFIB)标题(心房纤维性颤动的)XLIM([4000,5200])Xlabel('样品')ylabel('幅度(mv)'

学习用力仪设备

学习中に,关节Trainnetwork.はデータをミニバッチににししし。关键词,そのその,同じ同じバッチバッチ内信号にパディング切り舍てをいます同じになるしします。これこれ,ネットワーク,ネットワークが加加またはされた情情てことがある信号

過度なパディングや切り捨てを防ぐため,関数SEGMESSIGNALS.をecg信号に适ににがが9000サンプルの长长になるようますにににます。关键词关键词。信号ます。信号ます。信号が。信号がSEGMESSIGNALS.はできるできる多くの9000サンプルのセグメントに无视し,残っ,18500サンプルは无视ます。たとえば,18500サンプルサンプル信号は,2つの9000サンプルサンプル信号に,残りの500サンプルは无视さます。

[信号,标签] = SEGMESSIGNALS(信号,标签);

配列信号の最初の5つの要素ををし,各エントリが9000サンプルののさにてているいる确认确认ししししししし

信号(1:5)
ans =5×1个单元阵列{1×9000 double} {1×9000 double} {1×9000 double} {1×9000 double} {1×9000 double}

生の信号データを使用した分類器の学習

分析器を设计には,前のセクション生成した生态信号を使ます。分享器に学位さための。习と新闻のの习セット新闻データに対して习度精密をするためのセット声を分享します。

关节总结を使用して,AFib信号と通常の信号の比率が718:4937(約1:7)であることを示します。

总结(标签)
一个718 n 4937

约7/8の信号が正常ため,分析器は単纯にすべて信号を正当として达こと高い精密达达达できる,と习习ことあり。の交往信号を复制ことでafibデータを拡张して,正常な信号と交通信号ををを同じしますをははオーバーとれるはは习习使使さデータ拡张の1つの形式形式。

信号线をそれらのにててて分享

AFIBX =信号(标签=='一种');afibY =标签(标签= ='一种');IrmanicX =信号(标签=='n');= = =饱和标签(标签'n');

次に,分开を使用して,各クラスからターゲットを学習セットとテストセットにランダムに分割します。

[Traininda,〜,testinda] = Divierand(718,0.9,0.0.0.1);[TrainIndn,〜,TestIndn] = Divierand(4937,0.9,0.0.0.1);Xtraina = afibx(traininda);ytraina = afiby(traininda);Xtrainn = Irmancx(TareIndn);Ytrainn = Normaly(Tarchindn);xtesta = afibx(testinda);ytesta = afiby(testinda);xtestn = uncormx(testindn);ytestn = normaly(testindn);

こうして,646の交通信号线4443の正式な信号が各クラス信号ます。各各クラス信号ます。各各クラス信号ます。各各信号の。各する信はははははははははのの4438の正式尾声信号repmatをを用して最初の634のafib信号を7回缲り返します。

テスト用に,72のafib信号494の正式な信号があり。最初の490の正当な信号を使てから,repmat〖afib信号〗70のafib信号7回缲り返します设定では,复合うはすべてラベルないように,ニューラルネットワークは习前にをランダムに习ますにデータ

XTrain = [repmat (XTrainA(1:634), 7日,1);XTrainN (1:4438)];YTrain = [repmat (YTrainA(1:634), 7日,1);YTrainN (1:4438)];XTest = [repmat (XTestA(1:70), 7日,1);XTestN (1:490)];欧美= [repmat (YTestA(1:70), 7日,1);YTestN (1:490);];

正常な信号とAFib信号の分布はこうして,学習セットとテストセットの両方で等しく釣り合います。

摘要(Ytrain)
A 4438 n 4438
摘要(ytest)
490 n 490

LSTMネットワークアーキテクチャの定义

LSTMネットワークネットワーク,シーケンスデータのタイムステップ间の长な依存をできます。この例では,双方向,双方向のlstm层Bilstmlayer.を使用し,シーケンスを順方向および逆方向の両方で確認します。

入力信号がそれぞれそれぞれそれぞれであるであるためためサイズサイズしシーケンスになるように指定ししシーケンスががが双ますしししシーケンスがが双双向向向层サイズ指定双向向向层を指定し向ししの最后指定指定し向しのの最后最后指定指定向ししししししししししししししは双方向ののlstm层に対し,入力时系列の100の特徴へのを指示,その后全全层层のに,サイズに,サイズが2の全结层含めることによって2个のクラスを指定し,その后にソフトマックス层とと层层をしし。

层= [......sequenceInputLayer(1)BilstMlayer(100,“OutputMode”'最后的')全连接层(2)SoftMaxLayer ClassificationLayer]
图层= 5x1层阵列,带有图层:1''序列输入序列输入用1尺寸2''Bilstm Bilstm,具有100个隐藏单元3''完全连接的2完全连接的第4层''Softmax Softmax 5''分类输出CrossentRopyex

次に,分析器の学习オプション指定します。'maxepochs'を10にに设定してネットワークが习习からからからのパスを作品れるしますます.150の“MiniBatchSize”は,ネットワークに一度に150の学习信号のを指示ますます.0.01の'italllearnrate'は,学習プロセスを加速させます。1000年の'sequencelength'は,一度に確認するデータ量が多すぎてマシンがメモリ不足にならないように信号をより小さな塊に分割します。”毕业生察列人'を1に設定して,勾配が大きくなりすぎないようにして学習プロセスを安定化させます。'plots''培训 - 进步'として指定し,反復回数の増大に応じた学習の進行状況のグラフィックスを示すプロットを生成します。“详细”错误的に设定し,プロットで示されるデータに対応する表出力を非表示にします。この表を表示する场合は,“详细”真的に設定します。

このこのでは,适応适応推定(adam)ソルバーソルバー使使ます.ADAMは,LSTMなどのrnnでは,既定のモーメンタム项确率的勾配勾配下载方法(SGDM)ソルバーよりパフォーマンスパフォーマンス优れてます。

选项=培训选项(“亚当”......'maxepochs'10,......“MiniBatchSize”,150,......'italllearnrate',0.01,......'sequencelength',1000,......'gradientthreshold', 1......'executionenvironment'“汽车”......'plots''培训 - 进步'......“详细”、假);

LSTMネットワークの学習

Trainnetwork.をを用し,指定した学习オプションとのアーキテクチャでlstmネットワークネットワーク学习さます。学習セットが大きいため,学習プロセスには数分かかる場合があります。

网= trainNetwork (XTrain、YTrain层,选择);

学習の進行状況プロットの一番上のサブプロットには,学習精度,つまり各ミニバッチの分類精度が表示されます。学習が正常に進行すると,この値は通常100%へと増加します。一番下のサブプロットには,学習損失,つまり各ミニバッチの交差エントロピー損失が表示されます。学習が正常に進行すると,この値は通常ゼロへと減少します。

学習が収束しない場合,プロットは上方または下方の特定の方向に向かわず,値と値の間で振動する場合があります。この振動は学習精度が向上せず,学習損失が減少していないことを意味します。この状況は学習の最初から発生することもありますし,学習精度においてまずいくらか改善された後でプロットが停滞してしまうこともあります。多くの場合,学習オプションを変更するとネットワークが収束できるようになります。小匹匹匹匹配が减少したり,initiallearnrate.が减少したりと,学习时间が长くなることありますが,ネットワークの学习习改善でき。

分享器の学习精细は约50%〜约60%ででし,10次の最后で,既に学习に数分段。

学习精灵とテスト精密の可催化

学习精灵をします。これ,学校データをしこれ,学校データを表し。

trainpred =分类(net,xtrain,'sequencelength',1000);

分類問題において,混同行列は真の値が既知である一連のデータに対する分類パフォーマンスの可視化に使用されます。ターゲットクラスは信号のグラウンドトゥルースラベルで,出力クラスはネットワークによって信号に割り当てられるラベルです。座標軸のラベルはAFib (A)と正常(N)のクラスラベルを表します。

困惑的园林コマンドを使用して,テストデータ予測に対する全体の分類精度を計算します。真陽性率と偽陽性率を行要約に表示するため,“row-normalized”として“RowSummary”を指定します。また,陽性の予測値と偽発見率を列要約に表示するため,'列 - 归一化'として'placeSummary'を指定します。

lstmaccuracy = sum(trainpred == ytrain)/ numel(ytrain)* 100
lstmaccuracy = 61.7283.
图杂志(Ytrain,TrainPred,'placeSummary''列 - 归一化'......“RowSummary”“row-normalized”“标题”“LSTM混淆图”);

テストテストデータを同じ同じネットワークででしし

XTest testPred =分类(净,'sequencelength',1000);

テスト精度をして,混同行列で分类性能可使します。

LSTMAccuracy = sum(testPred == YTest)/numel(YTest)*100
LSTMAccuracy = 66.2245
图confusionchart(欧美、testPred'placeSummary''列 - 归一化'......“RowSummary”“row-normalized”“标题”“LSTM混淆图”);

特徴抽出によるパフォーマンスの改善

て,それらを使使用しし畳み込みニューラル(cnn)に学习させます[4.],[5.]。

各各タイプ信号。

FS = 300;图形子图(2,1,1);PSPectrum(正常,FS,'谱图'“TimeResolution”, 0.5)标题(“正常信号”次要情节(2,1,2);pspectrum (aFib fs,'谱图'“TimeResolution”, 0.5)标题('afib信号'

この例では,CNNの代わりにLSTMをを使ため,1次元信号に作用するようアプローチを変换ことがです。时间 - 周波数(tf)モーメントスペクトログラムからをします。1次元の特性として使,lstmにに力することができ。

时间领域の次の2つのtfモーメントを调查します。

  • 逐时数量(instfreq.

  • スペクトルエントロピー(pentropy.

关节instfreq.は,パワースペクトログラムの最初のモーメントとして信号の時間依存周波数を推定します。関数は時間枠上の短時間フーリエ変換を使用してスペクトログラムを計算します。この例では,関数は255個の時間枠を使用します。関数の時間出力は,時間枠の中心に対応します。

各タイプの信号の时周波数量

[instfreqa,ta] = instfreq(afib,fs);[instfreqn,tn] = instfreq(正常,fs);图形子图(2,1,1);绘制(TN,Instfreqn)标题(“正常信号”)Xlabel('时间'')ylabel(瞬时频率的次要情节(2,1,2);绘制(TA,Instfreqa)标题('afib信号')Xlabel('时间'')ylabel(瞬时频率的

cellfunを使用して,学習セットとテストセットの各セルに関数instfreq.を适用します。

instfreqtrain = cellfun(@(x)instfreq(x,fs)',xtrain,'统一输出'、假);instfreqTest = cellfun (@ (x) instfreq (x, fs), XTest'统一输出'、假);

スペクトルエントロピーは,信号证明がどの度でフラットであるかをしますますますます。正当和などスパイキースペクトルのはスペクトルスペクトルエントロピーがます。ホワイトノイズなどのフラットスペクトルの信号はエントロピー关高くます。关字pentropy.は,パワースペクトログラムに基づいてスペクトルエントロピーを推定します。瞬時周波数推定の場合と同様に,pentropy.では255个の时空枠使してスペクトログラムをします。关键词关联。关键词有关时空出は,时间枠の中心に対応ます。

各タイプの信号のスペクトルエントロピーを可視化します。

[pentropyA, tA2] = pentropy (aFib fs);[pentropyN, tN2] = pentropy(正常,fs);图subplot(2,1,1) plot(tN2,pentropyN) title(“正常信号”)ylabel('光谱熵')子图(2,1,2)绘图(TA2,PENTROPYA)标题('afib信号')Xlabel('时间'')ylabel('光谱熵'

cellfunを使用して,学習セットとテストセットの各セルに関数pentropy.を适用します。

pentropytrain = cellfun(@(x)pentropy(x,fs)',xtrain,'统一输出'、假);pentropytest = cellfun(@(x)pentropy(x,fs)',xtest,'统一输出'、假);

新闻学院セットとテストセットの各セルが2次元,つまり2つの特征をように特徴を连结しますよう。

XTrain2 = cellfun (@ (x, y) (x, y), instfreqTrain, pentropyTrain,'统一输出'、假);xtest2 = cellfun(@(x,y)[x; y],instfreqtest,pentropytest,'统一输出'、假);

新闻致力于形式可化しを各には既に。

XTrain2 (1:5)
ans =5×1个单元阵列{2×255 double} {2×255 double} {2×255 double} {2×255 double} {2×255 double}

データデータ化化

瞬時周波数とスペクトルエントロピーの平均値には,ほぼ1桁の差があります。さらに,瞬時周波数の平均値はLSTMには高すぎるため効果的に学習することができない可能性があります。平均値が大きくて値の範囲が広いデータに対してネットワークが近似される場合,入力量が大きいとネットワークの学習と収束の速度が低下します[6.]。

意思(instfreqn)
ANS = 5.5615.
意思是(pentropyN)
ans = 0.6326

学士学位,学士,つまりZスコアしますを习习セットます。

十五= [XTrain2 {}):;μ=意味着(十五,2);sg =性病(十五,[],2);XTrainSD = XTrain2;XTrainSD = cellfun (@ (x)(即xμ)。/ sg, XTrainSD,'统一输出'、假);xtestsd = xtest2;xtestsd = cellfun(@(x)(x-mu)./ sg,xtestsd,'统一输出'、假);

标准化した时周波数とスペクトルエントロピーの値を表示します。

instFreqNSD = XTrainSD {1} (1:);pentropyNSD = XTrainSD {1} (2:);意思是(instFreqNSD)
ans = -0.3211.
意思(Pentropynsd)
ans = -0.2416.

LSTMネットワークアーキテクチャの変更

信号にはそれぞれ2つの次元があるため,入力シーケンスサイズに2を指定してネットワークアーキテクチャを変更する必要があります。100年出力サイズがの双方向LSTM層を指定し,シーケンスの最後の要素を出力します。サイズが2の全結合層を含めることによって2個のクラスを指定し,その後にソフトマックス層と分類層を配置します。

层= [......SequenceInputLayer(2)BilstMlayer(100,“OutputMode”'最后的')全连接层(2)SoftMaxLayer ClassificationLayer]
图层= 5x1层阵列,带有图层:1''序列输入序列输入用2尺寸2''Bilstm Bilstm,带100个隐藏单元3''完全连接的2个完全连接的层4''softmax softmax 5''分类输出crossentropyex

学习オプションを指定します。エポックの最大数数量を30に设定すると,ネットワークが学习データから30个のパスを作用れるににますますますますます。

选项=培训选项(“亚当”......'maxepochs',30,......“MiniBatchSize”,150,......'italllearnrate',0.01,......'gradientthreshold', 1......'executionenvironment'“汽车”......'plots''培训 - 进步'......“详细”、假);

时间 - 周波数量特性ををしたlstmネットワークの学习

Trainnetwork.をを用し,指定した学习オプションとのアーキテクチャでlstmネットワークネットワーク学习さます。

net2 = trainnetwork(xtrainsd,ytrain,图层,选项);

学習精度が大きく改善しています。交差エントロピーの損失は0に近くなっています。さらに,TFモーメントが生のシーケンスより短いため,学習に必要な時間が短くなっています。

学习精灵とテスト精密の可催化

更新したLSTMネットワークを使用して学習データを分類します。混同行列として分類性能を可視化します。

trainPred2 =分类(net2 XTrainSD);LSTMAccuracy = sum(trainPred2 == YTrain)/numel(YTrain)*100
LSTMAccuracy = 83.5962
图杂志(Ytrain,TrainPred2,'placeSummary''列 - 归一化'......“RowSummary”“row-normalized”“标题”“LSTM混淆图”);

テスト列をでし,テスト度をして,テスト精密を调べ。

testPred2 =分类(net2 XTestSD);LSTMAccuracy = sum(testPred2 == YTest)/numel(YTest)*100
lstmaccuracy = 80.1020
图confusionchart(欧美、testPred2'placeSummary''列 - 归一化'......“RowSummary”“row-normalized”“标题”“LSTM混淆图”);

まとめ

このこので,分析器をビルドし,LSTMネットワークをを使ししててて検出は示し示し示し示し示し検出示し示し示し示し示し示し示し示し示し示し示し示し示し示し示し示し示し示し示し示し示し示し検出ますます示し示し示し示しをれるなな患者患者患者患者れるれるれる集団の中で异常な状态検出検出しとするときに生物するするを回避しますバイアス回避します。生物信号をますますたlstmネットワークの学问し良い度度度得ませんません度信号度得ません。各信号で得。- 周波しネットワークの习さと,分享しと,分别

参考文献

[1]基于短单导联心电图记录的心房颤动分类:物理网络/计算在心脏病学中的挑战,2017。https://physionet.org/challenge/2017/

[2] Clifford,Gari,Chengyu Liu,Benjamin Moody,Li-Wei H. Lehman,Ikaro Silva,Qiao Li,Alistair Johnson和Roger G. Mark。“来自简短的单一领导ECG录音的AF分类:电影资料2017年心脏病学挑战。“计算心脏病学(雷恩:IEEE)。卷。44,2017,pp。1-4。

[3] Goldberger,A. L.,L.A.NA.Maral,L.玻璃,J.M.Hausdorff,P. Ch。Ivanov,R.G.Mark,J.E.Mietus,G. B.Coody,C. -K。彭和H. E. Stanley。“Physiobank,PhysioLoolkit和PhysioIoneet:复杂生理信号的新研究资源的组成部分”。循环.Vol。101, No. 23, 2000年6月13日,页e215-e220。http://circ.ahajournals.org/content/101/23/e215.full

[4] PONS,JORDI,THOMAS LIDY和Xavier Serra。“用音乐动机的卷积神经网络试验”。第十四届基于内容的多媒体索引国际研讨会2016年久勋。

[5]王,D。“深入学习重新发明助听器”IEEE频谱,卷。54,2017年3月3日,第32-37页。DOI:10.1109 / MSPEC.2017.7864754。

[6]棕褐色,杰森。如何在Python中缩放长期内存网络的数据2017年7月7日。https://machinelearningmastery.com/how-to-scale-data-for-long-short-term-memory-networks-in-python/。

参考

关节

关键词トピック