ウェ,ブレットベ,スの特徴とサポ,トベクタ,マシンを使用した信号分類
この例では,ウェーブレットベースの特徴抽出とサポートベクターマシン(SVM)分類器を使用して人間の心電図(ECG)信号を分類する方法を示します。生の心电图信号を,異なるクラスを集計的に区別するのに役立つはるかに小さい特徴のセットに変換することで,信号分類の問題が単純化されます。この例を実行するには,小波工具箱™,信号处理工具箱™,统计和机器学习工具箱™が必要です。この例で使用されているデ,タは,生理网から公的に入手可能です。
デ,タの説明
この例では,人の3のグルプ(クラス)ecgデタを使用します。3 .のグル:プとは,心不整脈の患者,鬱血性心不全の患者,および正常洞調律の患者です。この例では,次の3つの生理网データベースから162個の心电图記録を使用します。MIT-BIH心律失常数据库[3][7]、MIT-BIH正常窦性心律数据库[3]、充血性心力衰竭数据库[1][3]。合計で,不整脈の患者の記録は96個鬱血性心不全の患者の記録は30個正常洞調律の患者の記録は36個あります。目的は,不整脈(ARR)鬱血性心不全(瑞士法郎),および正常洞調律(NSR)間を区別できるように分類器に学習させることです。
デ,タのダウンロ,ド
1番目のステップは,GitHubリポジトリからデ,タをダウンロ,ドすることです。デ,タをダウンロ,ドするには,[代码
]をクリックして[下载ZIP
]を選択します。書き込み権限のあるフォルダに,ファルphysionet_ECG_data-main.zip
を保存します。この例の手順では,ファ恭顺器ルを一時ディレクトリ(matlabのtempdir
)にダウンロ,ドしているものと仮定します。tempdir
とは異なるフォルダーにデータをダウンロードすることを選択した場合は,データの解凍および読み込みに関する後続の手順を変更してください。
ファereplicationルphysionet_ECG_data-main.zip
には次のものが含まれています。
ECGData.zip
README.md
また,ECGData.zipには次のものが含まれています。
ECGData.mat
Modified_physionet_data.txt
License.txt
ECGData.matは、この例で使用されるデータを保持します。.txt ファイルの Modified_physionet_data.txt は PhysioNet のコピー ポリシーで必要になり、データのソース属性、および ECG の各記録に適用される前処理手順の説明を提供します。
ファ@ @ルの読み込み
前の節のダウンロード手順に従った場合,次のコマンドを入力して2つのアーカイブファイルを解凍します。
解压缩(fullfile (tempdir,“physionet_ECG_data-main.zip”), tempdir)解压缩(fullfile (tempdir,“physionet_ECG_data-main”,“ECGData.zip”),...fullfile (tempdir“ECGData”))
ECGData.zipファルを解凍したら,デタをMATLABに読み込みます。
负载(fullfile (tempdir“ECGData”,“ECGData.mat”))
ECGData
は2のフィルド(数据
と标签
)を持構造体配列です。数据
は162行65536列の行列で,各行は128ヘルツでサンプリングした心电图記録です。标签
は162行1列の診断ラベルのcell配列で,それぞれが数据
の各行に対応します。診断カテゴリは次の3です。“加勒比海盗”(心不整脈)、'CHF' (鬱血性心不全)、'NSR' (正常洞調律)。
学習デ,タとテストデ,タの作成
デタを2のセット(学習デタセットとテストデタセット);補助関数helperRandomSplit
は,無作為の分割を実行します。helperRandomSplit
は,学習デ,タとECGData
に対して希望する分割割合を受け入れます。関数helperRandomSplit
は,2 .。trainData
とtestData
の各行はecg信号です。trainLabels
とtestLabels
の各要素には,デ,タ行列の対応する行のクラスラベルが含まれています。この例では,各クラスのデ,タの70%を無作為に学習セットに割り当てます。残りの30%はテスト(予測)用に取り分けられ,テストセットに割り当てられます。
Percent_train = 70;[trainData, testData trainLabels testLabels] =...helperRandomSplit (percent_train ECGData);
trainData
セットには113個のレコ,ド,testData
には49個のレコ,ドがあります。計画的に,学習デ,タにはデ,タの69.75%(113/162)が含まれています。加勒比海盗クラスはデータの59.26%(96/162),瑞士法郎クラスは18.52%(30/162),そしてNSRクラスは22.22%(36/162)を示すことを思い出してください。学習セットとテストセットに含まれる各クラスの割合を調べます。各クラスの割合はデ,タセットに含まれるクラスの全体的な割合と一致します。
Ctrain = countcats(categorical(trainLabels))./numel(trainLabels).*100
Ctrain =3×159.2920 18.5841 22.1239
Ctest = countcats(categorical(testLabels))./numel(testLabels).*100
ct =3×159.1837 18.3673 22.4490
サンプルのプロット
ECGData
から無作為に選択した4個のレコドのうの最初の数千個のサンプルをプロットします。補助関数helperPlotRandomRecords
がこれを実行します。helperPlotRandomRecords
はECGData
とランダムシ,ドを入力として受け入れます。各クラスの少なくとも1のレコドがプロットされるように,ドは14。各クラスに関連付けられたさまざまなecg波形を把握するために,必要に応じて何度でも,ECGData
を唯一の入力引数として指定してhelperPlotRandomRecords
を実行することができます。この補助関数のソスコドは,この例の最後にある“サポト関数”の節で見けることができます。
helperPlotRandomRecords (ECGData 14)
特徴抽出
各信号の信号分類で使用される特徴を抽出します。この例では,各信号の8個のブロックで約1分間抽出した次の特徴を使用します(8192サンプル)。
次数4の自己回帰モデル(ar)係数[8]。
レベル4の最大重複離散ウェーブレットパケット変換(MODPWT)のシャノンエントロピー(SE)値[5]。
スケーリング指数の2番目のキュムラントおよびヘルダー指数の範囲,または特異点スペクトルのマルチフラクタルウェーブレットリーダー推定[4]。
さらに,マルチスケ,ルウェ,ブレット分散推定がデ,タ長全体の各信号に対して抽出されます[6].;ウェ,ブレット分散の不偏推定が使用されます。そのためには,境界条件の影響を受けないウェーブレット係数を1つ以上もつレベルのみが分散推定で使用される必要があります。2 ^ 16(65536)の信号長およびdb2的ウェーブレットの場合,14レベルになります。
これらの特徴は,心电图波形の分類における効果を実証している公開済みの研究に基づいて選択されました。これは,特徴を網羅したリストまたは最適化したリストにすることを目的としていません。
各ウィンドウのar係数はバ,グメソッドarburg
を使用して推定されます。[8]では,著者はモデル次数の選択メソッドを使用して,同様の分類問題の心电图波形に対して最適な近似を提供したのはAR(4)モデルであると判断しました。[5]では,情報理論的尺度のシャノンエントロピーがウェーブレットパケットツリーの終端ノードで計算され,ランダムフォレスト分類器で使用されました。ここで,非間引きウェ,ブレットパケット変換のmodwpt
をレベル4まで下げて使用します。
[5]に続く非間引きウェブレットパケット変換のシャノンエントロピの定義は によって指定されます。ここで, は,j番目のノ,ドにある対応する係数の数です。また, は,j番目の終端ノ,ドにあるウェ,ブレットパケット係数の正規化された二乗です。
ウェブレットメソッドによって推定される2のフラクタル尺度は特徴として使用されます。[4]に続いて,dwtleader
から取得された特異点スペクトルの幅をecg信号のマルチフラクタル特性の尺度として使用します。また,スケ,リング指数の2番目のキュムラントも使用します。スケ,リング指数は,異なる分解能での信号でのべき乗則の動作を記述するスケ,ルベ,スの指数です。2番目のキュムラントは,線形性からのスケ,リング指数の逸脱を大まかに表します。
信号全体のウェ,ブレット分散はmodwtvar
を使用して取得されます。ウェーブレット分散は,スケールによる信号の変動性,またはオクターブバンドの周波数範囲の信号の等価な変動性を測定します。
合計で190個の特徴があります。32岁的つまり個のAR特徴(ブロックごとに4個の係数),128年個のシャノンエントロピー値(ブロックごとに16個の値),16個のフラクタル推定(ブロックごとに2個),14個のウェーブレット分散推定があります。
関数helperExtractFeatures
はこれらの特徴を計算し,各信号の特徴ベクトルに連結します。この補助関数のソスコドは,この例の最後にある“サポト関数”の節で見けることができます。
timeWindow = 8192;ARorder = 4;MODWPTlevel = 4;[trainFeatures, testFeatures featureindices] =...helperExtractFeatures (trainData、testData timeWindow、ARorder MODWPTlevel);
trainFeatures
およびtestFeatures
は,それぞれ113行190列と49行190列の行列です。これらの行列の各行は,それぞれtrainData
とtestData
の対応するecgデ,タの特徴ベクトルです。特徴ベクトルの作成時に,データは65536個のサンプルから190個の要素ベクトルに削減されます。これは大幅なデ,タ削減ですが,目的は単にデ,タを削減することではありません。目的は,分類器が信号を正確に分離できるように,クラス間の差を捉えるはるかに小さい特徴セットにデータを削減することです。trainFeatures
とtestFeatures
の両方を構成する特徴のesc escンデックスは,構造体配列featureindices
に含まれています。この@ @ンデックスを使用して,グル@ @プ別の特徴を調べることができます。例として、最初の時間枠の特異点スペクトルにあるヘルダー指数の範囲を調べます。データセット全体のデータをプロットします。
allFeatures = [trainFeatures;testFeatures];allLabels = [trainLabels;testLabels];图箱线图(allFeatures (:, featureindices.HRfeatures (1)), allLabels,“缺口”,“上”) ylabel (“持仓指数区间”)标题(群奇异谱范围(第一时间窗)网格)在
この特徴に対して1因子分散分析を実行し,箱ひげ図に表示されるもの,すなわちARRグループとNSRグループの範囲が瑞士法郎グループより大幅に大きいことを確認できます。
[p,anovatab,st] = anova1(allFeatures(:, featureindexes . hrfeatures (1))),...allLabels);
C = multicompare (st,“显示”,“关闭”)
c =3×61.0000 2.0000 0.0176 0.1144 0.2112 0.0155 1.0000 3.0000 -0.1591 -0.0687 0.0218 0.1764 2.0000 3.0000 -0.2975 -0.1831 -0.0687 0.0005
追加の例として3つのグループの2番目に低い周波数(2番目に大きいスケール)のウェーブレットサブバンドにおける分散の差異について考えます。
箱线图(allFeatures (:, featureindices.WVARfeatures (end-1)), allLabels,“缺口”,“上”) ylabel (小波变化的)标题(“分组小波方差”网格)在
この特徴に対して分散分析を実行すると,このウェーブレットサブバンドの中でNSRグループの分散がARRグループおよび瑞士法郎グループよりも大幅に低いことがわかります。これらの例は,個々の特徴がどのようにクラスを分離する役割を担っているかを示すことだけを目的にしています。1つの特徴だけでは十分でありませんが、目的は分類器が 3 つすべてのクラスを分離できるのに十分な、豊富な特徴セットを取得することです。
信号分類
データが各信号の特徴ベクトルに削減されたので,次のステップは心电图信号を分類するためにこれらの特徴ベクトルを使用することです。分類学習器アプリを使用すると,多数の分類器を迅速に評価できます。この例では,二次カ,ネルを持マルチクラス支持向量机を使用します。2の解析が実行されます。まずはデータセット全体(学習セットとテストセット)を使用し,5分割の交差検証を使用して誤分類率と混同行列を推定します。
features =[火车特征;testFeatures];rng(1) template = templateSVM...“KernelFunction”,多项式的,...“PolynomialOrder”,2,...“KernelScale”,“汽车”,...“BoxConstraint”,1,...“标准化”,真正的);型号= fitcecoc(...的特性,...(trainLabels; testLabels),...“学习者”模板,...“编码”,“onevsone”,...“类名”,{“加勒比海盗”,瑞士法郎的,“签约”});Kfoldmodel = crossval(模型,“KFold”5);classLabels = kfoldPredict(kfoldmodel);损失= kfoldLoss(kfoldmodel)*100
损失= 8.0247
[confmatCV,grouporder] = confusionmat([trainLabels;testLabels],classLabels);
5分割分類誤差は8.02%です(91.98%は正しい)。混同行列confmatCV
は,どのレコ,ドが誤分類されたかを示します。grouporder
はグル,プの順序を指定します。Arrグルプのうの2個がCHFとして誤分類されました。瑞士法郎グループのうちの8個が加勒比海盗,1個がNSRとして誤分類され,NSRグループのうちの2個がARRとして誤分類されました。
適合率,再現率およびf1スコア
分類タスクにおいて,クラスの適合率とは正しい正の結果の数を正の結果の数で除算したものです。言い換えれば,分類器が特定のラベルを割り当てるすべてのレコードのうち,実際にクラスに属している割合のことです。再現率は,正しいラベルの数を特定のクラスのラベル数で除算したものと定義されます。具体的には,クラスに属しているすべてのレコードのうち,分類器によってそのクラスのラベルが付けられた割合です。機械学習システムの精度を判断する場合に,理想的には適合率と再現率の両方で良い結果を得る必要があります。たとえば,1 1のレコドにarrのラベルを付けた分類器があると仮定します。Arrクラスの再現率は1(100%)になります。Arrクラスに属しているすべてのレコ,ドがArrとラベル付けされます。しかし,適合率は低くなります。分類器によってすべてのレコードがARRとラベル付けされたため,この場合は66個の偽陽性があり,適合率は96/162(つまり0.5926)になります。F1スコアは適合率および再現率の調和平均であり,再現率と適合率の両方の観点から分類器のパフォーマンスを要約する1つのメトリクスを提供します。次の補助関数は3のクラスに関する適合率,再現率,f1スコアを計算します。“サポト関数”の節にあるコドを調べることで,helperPrecisionRecall
が混同行列に基づいて適合率,再現率,およびf1スコアを計算する方法を確認できます。
CVTable = helpprecisionrecall (confmatCV);
次のコマンドを使用して,helperPrecisionRecall
によって返されるテ,ブルを表示できます。
disp (CVTable)
精度召回F1_Score _________ ______ ________ ARR 90.385 97.917 94 CHF 91.304 70 79.245 NSR 97.143 94.444 95.775
加勒比海盗クラスとNSRクラスでは適合率と再現率の両方が良い結果ですが,瑞士法郎クラスでは再現率が大幅に低下します。
次の解析では,マルチクラスの2次SVMを学習データのみ(70%)に当てはめてから,そのモデルを使用してテスト用に取り分けられた30%のデータに対して予測を行います。テストセットには49個のデ,タレコ,ドがあります。
型号= fitcecoc(...trainFeatures,...trainLabels,...“学习者”模板,...“编码”,“onevsone”,...“类名”,{“加勒比海盗”,瑞士法郎的,“签约”});predLabels = predict(model,testFeatures);
次を使用して,正しい予測の数を判断し,混同行列を取得します。
correctforecasts = strcmp(predLabels,testLabels);testAccuracy = sum(correctforecasts)/length(testLabels)*100
testAccuracy = 97.9592
[confmatTest,grouporder] = confismat (testLabels,predLabels);
テストデータセットに関する分類精度は約98%であり,混同行列は1つの瑞士法郎レコードがNSRと誤分類されたことを示しています。
交差検証解析で行ったことと同様に,テストセットに関する適合率,再現率,およびF1スコアを取得します。
testTable = helpprecisionrecall (confmatTest);disp (testTable)
精度召回F1_Score _________ ______ ________ ARR 100 100 100 CHF 100 88.889 94.118 NSR 91.667 100 95.652
生デ,タの分類とクラスタリング
前回の解析で,当然の疑問が2生じます。良好な分類結果を得るには特徴抽出が必要ですか。分類器は必要ですか,または,分類器を使用せずにこれらの特徴によってグル,プを分離できますか。1番目の疑問に対処するには,生の時系列デ,タの交差検証結果を繰り返します。年代VM を 162 行 65,536 列の行列に適用しているため、次のコードは大量の計算が必要なステップであることに注意してください。このステップをお客様自身で実行することを希望されない場合は、次の段落で結果が説明されています。
rawData = [trainData;testData];标签= [trainLabels;testLabels];rng(1) template = templateSVM...“KernelFunction”,多项式的,...“PolynomialOrder”,2,...“KernelScale”,“汽车”,...“BoxConstraint”,1,...“标准化”,真正的);型号= fitcecoc(...rawData,...(trainLabels; testLabels),...“学习者”模板,...“编码”,“onevsone”,...“类名”,{“加勒比海盗”,瑞士法郎的,“签约”});Kfoldmodel = crossval(模型,“KFold”5);classLabels = kfoldPredict(kfoldmodel);损失= kfoldLoss(kfoldmodel)*100
损失= 33.3333
[confmatCVraw,grouporder] = confusionmat([trainLabels;testLabels],classLabels);rawTable = helperPrecisionRecall(confmatCVraw);disp (rawTable)
精度召回F1_Score _________ ______ ________ ARR 64 100 78.049 CHF 100 13.333 23.529 NSR 100 22.222 36.364
生の時系列デタの誤分類率は33.3%です。適合率,再現率,F1スコアの解析を繰り返し行うことで,瑞士法郎グループ(23.52)とNSRグループ(36.36)の両方のF1スコアが非常に悪いことが明らかになりました。各信号の振幅離散フ,リエ変換(dft)係数を取得して,周波数領域で解析を実行します。データは実数値であるため,フーリエ振幅が偶関数であるという事実を利用することで,DFTを使用して一定のデータ削減を達成できます。
rawDataDFT = abs(fft(rawData,[],2)));rawDataDFT = rawDataDFT(:,1:2^16/2+1);rng(1) template = templateSVM...“KernelFunction”,多项式的,...“PolynomialOrder”,2,...“KernelScale”,“汽车”,...“BoxConstraint”,1,...“标准化”,真正的);型号= fitcecoc(...rawDataDFT,...(trainLabels; testLabels),...“学习者”模板,...“编码”,“onevsone”,...“类名”,{“加勒比海盗”,瑞士法郎的,“签约”});Kfoldmodel = crossval(模型,“KFold”5);classLabels = kfoldPredict(kfoldmodel);损失= kfoldLoss(kfoldmodel)*100
损失= 19.1358
[confmatCVDFT,grouporder] = confusionmat([trainLabels;testLabels],classLabels);dftTable = helperPrecisionRecall(confmatCVDFT);disp (dftTable)
精度召回F1_Score _________ ______ ________ ARR 76.423 97.917 85.845 CHF 100 26.667 42.105 NSR 93.548 80.556 86.567
DFT振幅を使用すると誤分類率が19.13%まで下がりますが,依然として190個の特徴を使用して取得される誤り率の2倍以上です。これらの解析は,特徴を慎重に選択することで,分類器が良い結果を得られたことを実証しています。
分類器の役割に関する質問に回答するには,特徴ベクトルのみを使用してデータのクラスタリングを試みてください。k-means クラスタリングとギャップ統計を使用して、最適なクラスター数とクラスター割り当ての両方を判断します。データに対して 1 ~ 6 個のクラスターが存在する可能性を考慮してください。
rng默认的Eva = evalclusters(特征,“kmeans”,“差距”,“中”[1:6]);伊娃
eva = GapEvaluation with properties: NumObservations: 162 InspectedK: [1 2 3 4 5 6] CriterionValues: [1.2777 1.3539 1.3644 1.3570 1.3591 1.3752] OptimalK: 3
ギャップ統計から,最適なクラスタ,数が3であることがわかります。ただし3つのクラスターそれぞれのレコード数を確認すると,特徴ベクトルに基づくk - meansクラスタリングによって実行された3つの診断カテゴリを分離するジョブの結果がよくなかったことがわかります。
countcats(分类(eva.OptimalY))
ans =3×161 74 27
加勒比海盗クラスに96人,瑞士法郎クラスに30人,NSRクラスに36人いることを思い出してください。
まとめ
この例では,信号処理を使用して心电图信号からウェーブレット特徴を抽出し,これらの特徴を使用して心电图信号を3つのクラスに分類しました。特徴を抽出することでデータ量が大幅に削減されただけでなく,交差検証結果やテストセットに対するSVM分類器のパフォーマンスが示すように,ARRクラス,瑞士法郎クラス,およびNSRクラスの間の差異を得ることができました。この例ではさらに,支持向量机分類器を生データに適用すると,分類器を使用せずに特徴ベクトルのクラスタリングを行った場合のように,性能が低下することを実証しました。分類器も特徴単体での使用もクラスを分離するのに十分ではありませんでした。しかし,分類器を使用する前に,特徴抽出をデータ削減手順として使用すると,3つのクラスは適切に分離されました。
参考文献
Baim DS, Colucci WS, Monrad ES, Smith HS, Wright RF, Lanoue A, Gauthier DF, Ransil BJ, Grossman W, Braunwald E.口服米力酮治疗严重充血性心力衰竭患者的生存。美国心脏病学会1986年3月;7(3): 661 - 670。
工程师,2004。基于神经模糊网络的心电搏动分类。模式识别通讯,25(15),第1715-1722页。
Goldberger AL, Amaral LAN, Glass L, Hausdorff JM, Ivanov PCh, Mark RG, Mietus JE, Moody GB, Peng C-K, Stanley HE。PhysioBank, PhysioToolkit,和PhysioNet:复杂生理信号新研究资源的组成部分。循环.Vol。2000年6月13日,101,第23期,第e215-e220页。
http://circ.ahajournals.org/content/101/23/e215.full
列奥纳道齐,r.f.,施洛特豪尔,G.和托雷斯。2010.基于小波导频的心肌缺血时心率变异性多重分形分析。Engineering in Medicine and Biology Society (EMBC), 2010 Annual International Conference of the IEEE.
李涛,周敏,2016。基于小波包熵和随机森林的心电分类。信息学报,18(8),第285页。
Maharaj, E.A.和Alonso, A.M., 2014。多变量时间序列判别分析在心电信号诊断中的应用。计算统计与数据分析,70,pp. 67-87。
穆迪GB,马克RG。MIT-BIH心律失常数据库的影响。IEEE Eng in Med and biology 20(3):45-50 (May-June 2001)。(PMID: 11446209)
赵强,张丽娟,2005。基于小波变换和支持向量机的心电特征提取与分类。金宝appIEEE神经网络与大脑国际会议,2,第1089-1092页。
サポ,ト関数
helperPlotRandomRecords-ECGData
から無作為に選択した4個のecg信号をプロットします。
函数helperPlotRandomRecords (ECGData randomSeed)此函数仅用于支持XpwWaveletMLExample。金宝app它可能%更改或在将来的版本中删除。如果输入参数个数= = 2 rng (randomSeed)结束M = size(ECGData.Data,1);idxsel = randperm(M,4);为numplot = 1:4 subplot(2,2,numplot) plot(ECGData.Data(idxsel(numplot),1:3000)) ylabel(“伏”)如果Numplot > xlabel(“样本”)结束标题(ECGData.Labels {idxsel (numplot)})结束结束
helperExtractFeatures指定されたサズのデタのブロックに関するウェブレット特性とar係数を抽出します。特徴は特徴ベクトルに連結されます。
函数[trainFeatures, testFeatures,featureindices] = helperExtractFeatures(trainData,testData,T,AR_order,level)此函数仅支持xpwwavetmlexample。金宝app它可能会改变%将在未来的版本中删除。trainFeatures = [];testFeatures = [];为idx =1:size(trainData,1) x = trainData(idx,:);X =趋势(X,0);arcoefs = blockAR(x,AR_order,T);se = shannonEntropy(x,T,level);[cp,rh] =先导(x,T);Wvar = modwtvar(modwt(x,“db2”),“db2”);trainFeatures = [trainFeatures;Arcoefs se cp rh wvar'];% #好< AGROW >结束为idx =1:size(testData,1) x1 = testData(idx,:);X1 =趋势(X1,0);arcoefs = blockAR(x1,AR_order,T);se = shannonEntropy(x1,T,level);[cp,rh] =导联(x1,T);Wvar = modwtvar(modwt(x1,“db2”),“db2”);testFeatures = [testFeatures;arcoefs se cp rh wvar'];% #好< AGROW >结束Featureindices = struct();% 4 * 8featureindices。ARfeatures = 1:32;Startidx = 33;Endidx = 33+(16*8)-1;featureindices。年代Efeatures = startidx:endidx; startidx = endidx+1; endidx = startidx+7; featureindices.CP2features = startidx:endidx; startidx = endidx+1; endidx = startidx+7; featureindices.HRfeatures = startidx:endidx; startidx = endidx+1; endidx = startidx+13; featureindices.WVARfeatures = startidx:endidx;结束函数se = shannonEntropy(x,numbuffer,level) numwindows = numel(x)/numbuffer;Y = buffer(x,numbuffer);Se = 0 (2^level,size(y,2));为Kk = 1:size(y,2) WPT = modwpt(y(:, Kk),level);%时间总和E = sum(wpt.^2,2);Pij = wpt.^2./E;以下为eps(1)se(:,kk) = -sum(Pij.*log(Pij+eps),2);结束Se =重塑(Se,2^level*numwindows,1);Se = Se ';结束函数arcfs = blockAR(x,order,numbuffer) numwindows = nummel (x)/numbuffer;Y = buffer(x,numbuffer);Arcfs = 0 (order,size(y,2));为Kk = 1:size(y,2) artmp = arburg(y(:, Kk),order);Arcfs (:,kk) = artmp(2:end);结束Arcfs =重塑(Arcfs,order*numwindows,1);Arcfs = Arcfs ';结束函数[cp,rh] = leaders(x,numbuffer) y = buffer(x,numbuffer);Cp = 0 (1,size(y,2));Rh = 0 (1,size(y,2));为kk = 1:尺寸(y, 2) [~ h, cptmp] = dwtleader (y (:, kk));Cp (kk) = cptmp(2);Rh (kk) =范围(h);结束结束
helperPrecisionRecall混同行列に基づいて適合率,再現率,およびf1スコアを返します。結果をmatlabテ,ブルとして出力します。
函数PRTable = helperPrecisionRecall(confmat)此函数仅支持xpwwavetmlexample。金宝app它可能会改变%将在未来的版本中删除。precisionARR = confmat(1,1)/sum(confmat(:,1))*100;precisionCHF = confmat(2,2)/sum(confmat(:,2))*100;precisionNSR = confmat(3,3)/sum(confmat(:,3))*100;recallARR = confmat(1,1)/sum(confmat(1,:))*100;recallCHF = confmat(2,2)/sum(confmat(2,:))*100;recallNSR = confmat(3,3)/sum(confmat(3,:))*100;F1ARR = 2*precisionARR*recallARR/(precisionARR+recallARR);F1CHF = 2*precisionCHF*recallCHF/(precisionCHF+recallCHF);F1NSR = 2*precisionNSR*recallNSR/(precisionNSR+recallNSR);构造一个MATLAB表来显示结果。PRTable = array2table([precisionARR recallARR F1ARR;...precisionCHF recallCHF F1CHF;precisionNSR recallNSR...F1NSR),“VariableNames”,{“精度”,“回忆”,“F1_Score”},“RowNames”,...{“加勒比海盗”,瑞士法郎的,“签约”});结束
参考
関数
アプリ
- 分類学習器アプリ(统计和机器学习工具箱)