Main Content

mapstd

各行の平均を 0、偏差を 1 にマッピングする行列処理

構文

[Y,PS] = mapstd(X,ymean,ystd)
[Y,PS] = mapstd(X,FP)
Y = mapstd('apply',X,PS)
X = mapstd('reverse',Y,PS)
dx_dy = mapstd('dx_dy',X,Y,PS)

説明

mapstd は、各行の平均と標準偏差を ymean および ystd に変換して行列を処理します。

[Y,PS] = mapstd(X,ymean,ystd) は、X、およびオプションで以下のパラメーターを取ります。

X

NQ 列の行列

ymean

Y の各行の平均値 (既定は 0)

ystd

Y の各行の標準偏差 (既定は 1)

これは、以下を返します。

Y

NQ 列の行列

PS

値の一貫した処理を可能にする処理設定

[Y,PS] = mapstd(X,FP) は、struct としてパラメーター FP.ymeanFP.ystd を取ります。

Y = mapstd('apply',X,PS) は、X と設定 PS を指定すると、Y を返します。

X = mapstd('reverse',Y,PS) は、Y と設定 PS を指定すると、X を返します。

dx_dy = mapstd('dx_dy',X,Y,PS) は、微分の逆数を返します。

ここでは、各行の最小値と最大値が既定の平均と標準偏差である 0 と 1 にマッピングされるように行列を構成する方法を示します。

x1 = [1 2 4; 1 1 1; 3 2 2; 0 0 0]
[y1,PS] = mapstd(x1)

次に、新しい値に同じ処理設定を適用します。

x2 = [5 2 3; 1 1 1; 6 7 3; 0 0 0]
y2 = mapstd('apply',x2,PS)

y1 の処理を逆にして、x1 を再取得します。

x1_again = mapstd('reverse',y1,PS)

詳細

すべて折りたたむ

mapstd を使用したネットワークの入力およびターゲットの正規化

ネットワークの入力とターゲットをスケーリングする別のアプローチとして、学習セットの平均と標準偏差を正規化する方法があります。関数 mapstd は、ゼロ平均と 1 の標準偏差をもつように入力とターゲットを正規化します。次のコードは、mapstd の使い方を示しています。

[pn,ps] = mapstd(p);
[tn,ts] = mapstd(t);

元のネットワークの入力とターゲットは、行列 p および t に指定されています。返される正規化された入力 pn およびターゲット tn は、すべてゼロ平均と 1 の標準偏差をもちます。設定構造体 ps および ts には、元の入力と元のターゲットの平均と標準偏差が格納されます。ネットワークの学習が終わったら、これらの設定を使用して、ネットワークに適用される将来の入力を変換する必要があります。これらは、ネットワークの重みおよびバイアスと同様に、実質的にネットワークの一部になります。

mapstd を使用してターゲットをスケーリングした場合、ゼロ平均と 1 の標準偏差をもつ出力を生成するようにネットワーク出力の学習が行われます。これらの出力を、元のターゲットに使用されたものと同じ単位に戻すには、ts を使用します。次のコードは、前のコードで学習が行われたネットワークのシミュレーションを行ってから、ネットワーク出力を元の単位に戻します。

an = sim(net,pn);
a = mapstd('reverse',an,ts);

ネットワーク出力 an は、正規化されたターゲット tn に対応します。正規化されていないネットワーク出力 a の単位は、元のターゲット t と同じです。

mapstd を使用して学習セット データを前処理する場合、学習済みネットワークを新しい入力で使用する場合は常に、学習セットについて ps を使用して計算された平均と標準偏差で前処理しなければなりません。次のコマンドは、新しい一連の入力を学習済みのネットワークに適用します。

pnewn = mapstd('apply',pnew,ps);
anewn = sim(net,pnewn);
anew = mapstd('reverse',anewn,ts);

feedforwardnet を含むほとんどのネットワークでは、これらのステップは自動的に行われるため、必要なのは sim コマンドを使用することだけです。

アルゴリズム

この関数は、X に有限の実数値のみが含まれるものと仮定します。さらに、各行の結果は、その行の要素によって異なります。

  • 行の要素がすべて等しくない場合、関数は各行の平均と標準偏差を ymean (既定 0) と ystd (既定 1) に変換します。

    y = (x-xmean)*(ystd/xstd) + ymean;
    

  • 行の要素がすべて等しい場合、関数はその行のデータを変更しません (y=x)。

バージョン履歴

R2006a で導入