Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

goodnessOfFit

同定されたモデルの解析および検証用のテスト データと参照データの適合度

説明

goodnessOfFit は、テスト データ セットと参照データ セットの間の誤差ノルムを表す適合値を返します。シミュレートされたモデル出力を測定データと比較して可視化する場合は、compare も参照してください。

fit = goodnessOfFit(x,xref,cost_func) は、コスト関数 cost_func を使用してテスト データ x と参照データ xref の適合度を返します。fitxxref に対する近接性の定量的表現です。複数にわたるテストと参照の適合比較を実行するには、xxref を、複数のテスト データ セットと参照データ セットを含む同じサイズの cell 配列として指定します。fit は、cell 配列の入力を使用して適合値の配列を返します。

すべて折りたたむ

推定されたモデルの測定出力データとシミュレーション出力の適合度を算出します。

測定出力を取得します。

load iddata1 z1
yref = z1.y;

z1 は、測定入出力データを含む iddata オブジェクトです。z1.y は測定出力です。

2 次伝達関数モデルを推定し、モデル出力 y_est をシミュレートします。

sys = tfest(z1,2);
y_est = sim(sys,z1(:,[],:)); 

測定出力と推定出力の適合度、つまり誤差ノルムを計算します。コスト関数として正規化平方根平均二乗誤差 (NRMSE) を指定します。

cost_func = 'NRMSE';
y = y_est.y;
fit = goodnessOfFit(y,yref,cost_func) 
fit = 0.2943

あるいは、compareを使用して適合値を計算します。compare はコスト関数 NRMSE を使用し、誤差ノルムの 1 の補数を使用して適合率を表現します。したがって、comparegoodnessOfFit の適合関係は fitcompare=(1-fitgof)*100 となります。100% の compare 結果は、0 の goodnessOfFit 結果と等価です。

goodnessOfFit で仮定される初期条件と一致する、ゼロの初期条件を指定します。

opt = compareOptions('InitialCondition','z');
compare(z1,sys,opt);

適合結果は等価です。

2 つのモデルの測定出力と推定出力の適合度を算出します。

入出力測定 z2iddata2 から取得します。測定出力を参照出力 yref にコピーします。

load iddata2 z2
yref = z2.y;

z2 を使用して 2 次および 4 次伝達関数モデルを推定します。

sys2 = tfest(z2,2);
sys4 = tfest(z2,4);

両方のシステムをシミュレートし、推定された出力を取得します。

y_sim2 = sim(sys2,z2(:,[],:));
y2 = y_sim2.y;
y_sim4 = sim(sys4,z2(:,[],:));
y4 = y_sim4.y;

参照出力と推定出力から cell 配列を作成します。参照データ セットはどちらのモデル比較でも同じであるため、等価な参照 cell を作成します。

yrefc = {yref yref};
yc = {y2 y4};

3 つのコスト関数の fit 値を計算します。

fit_nrmse = goodnessOfFit(yc,yrefc,'NRMSE')
fit_nrmse = 1×2

    0.1429    0.1345

fit_nmse = goodnessOfFit(yc,yrefc,'NMSE')
fit_nmse = 1×2

    0.0204    0.0181

fit_mse = goodnessOfFit(yc,yrefc,'MSE')
fit_mse = 1×2

    1.0811    0.9586

0 の適合値は、参照出力と推定出力の完全適合を示します。適合度が下がると、適合値は高くなります。3 つのすべてのコスト関数において、4 次モデルの方が 2 次モデルより優れた適合を得られます。

入力引数

すべて折りたたむ

テストするデータ。行列または cell 配列として指定します。

  • 単一のテスト データ セットの場合は NsN 列の行列を指定します。Ns はサンプルの数、N はチャネルの数です。複数チャネル データを使用するには cost_fun'NRMSE' または 'NMSE' として指定する必要があります。

  • 複数のテスト データ セットの場合、長さが Nd の cell 配列を指定します。Nd はテストと参照のペアの数で、各 cell には 1 つのデータ行列が含まれます。

x には、NaN または Inf 値のいずれも含めることはできません。

x と比較される参照データ。行列または cell 配列として指定します。

  • 単一の参照データ セットの場合は NsN 列の行列を指定します。Ns はサンプルの数、N はチャネルの数です。xrefx と同じサイズでなければなりません。複数チャネル データを使用するには cost_fun'NRMSE' または 'NMSE' として指定する必要があります。

  • 複数の参照データ セットの場合、長さが Nd の cell 配列を指定します。Nd はテストと参照のペアの数で、各 cell には 1 つの参照データ行列が含まれます。個々のデータ行列と同様に、xxref の cell 配列のサイズは一致しなければなりません。fiti 番目の各要素は、それぞれ xxrefi 番目の cell のペアに対応します。

xref には、NaN または Inf 値のいずれも含めることはできません。

適合度を決定するコスト関数。以下のいずれかの値として指定します。方程式において、fit 値はテスト データ セットと参照データ セットの単一の組み合わせに適用されます。

説明方程式メモ
'MSE'平均二乗誤差

fit=xxref2Ns

ここで、Ns はサンプルの数で、‖ はベクトルの 2 ノルムを示します。

fit はスカラーです。
'NRMSE'正規化平方根平均二乗誤差

fit(i)=xref(:,i)x(:,i)xref(:,i)mean(xref(:,i))

ここで、‖ はベクトルの 2 ノルムを示します。fit は長さが N の行ベクトルで、i = 1,...,N です。N はチャネルの数です。

fit は行ベクトルです。'NRMSE'compare で使用されるコスト関数です。

'NMSE'正規化平均二乗誤差

fit(i)=xref(:,i)x(:,i)2xref(:,i)mean(xref(:,i))2

fit は行ベクトルです。

出力引数

すべて折りたたむ

テスト データ セットと参照データ セットのペアの適合度。スカラー、行ベクトル、または cell 配列として返されます。

  • 単一のテスト データ セットと参照データ セットのペアの場合、fit はスカラーまたは行ベクトルとして返されます。

    • cost_fun'MSE' の場合、fit はスカラーです。

    • cost_fun'NRMSE' または 'NMSE' の場合、fit は長さが N の列ベクトルです。N はチャネルの数です。

  • 複数のテスト データ セットと参照データ セットのペアの場合、x および xref は長さが ND の cell 配列で、fit はベクトルまたは行列として返されます。

    • cost_fun'MSE' の場合、fit は長さが ND の行ベクトルです。

    • cost_fun'NRMSE' または 'NMSE' の場合、fit はサイズが NNd 列の行列です。N はチャネル (データ列) の数、Nd はテストのペアの数を表します。

    fit の各要素には、対応するテスト データと参照ペアの適合度の値が含まれます。

個々の適合要素に指定できる値は、cost_func の選択によって異なります。

  • cost_func'MSE' の場合、各 fit 値は、テスト データと参照データの間の誤差により増加する正のスカラーです。fit 値が 0 の場合、テスト データと参照データは完全に一致しています。

  • cost_func'NRMSE' または 'NMSE' の場合、fit 値は -Inf ~ 1 です。

    • 0 — 参照データに完全に適合 (ゼロ誤差)

    • Inf — 適合率が低い

    • 1x は、一致する xref にある直線とほぼ同等

バージョン履歴

R2012a で導入

すべて展開する

参考

| | |