Main Content

processpca

主成分分析による行列の列の処理

構文

[Y,PS] = processpca(X,maxfrac)
[Y,PS] = processpca(X,FP)
Y = processpca('apply',X,PS)
X = processpca('reverse',Y,PS)
name = processpca('name')
fp = processpca('pdefaults')
names = processpca('pdesc')
processpca('pcheck',fp);

説明

processpca は、主成分分析を使用して行列を処理します。この処理によって、各行が無相関となり、全変動への寄与量の順に行が並べられ、全変動への寄与が maxfrac 未満である行が削除されます。

[Y,PS] = processpca(X,maxfrac) は、X およびオプションのパラメーターを取ります。

X

NQ 列の行列

maxfrac

削除する行についての分散の最大比率 (既定は 0)

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

Y

N - M 行が削除された、MQ 列の行列

PS

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

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

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

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

name = processpca('name') は、この処理手法の名前を返します。

fp = processpca('pdefaults') は、既定の処理パラメーター構造体を返します。

names = processpca('pdesc') は、処理パラメーターの説明を返します。

processpca('pcheck',fp); は、無効なパラメーターがある場合にエラーをスローします。

ここでは、独立した行、相関のある行、および完全に冗長な行をもつ行列を再構成し、行の相関と冗長性を排除する方法を示します。

x1_independent = rand(1,5)
x1_correlated = rand(1,5) + x1_independent;
x1_redundant = x1_independent + x1_correlated
x1 = [x1_independent; x1_correlated; x1_redundant]
[y1,ps] = processpca(x1)

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

x2_independent = rand(1,5)
x2_correlated = rand(1,5) + x1_independent;
x2_redundant = x1_independent + x1_correlated
x2 = [x2_independent; x2_correlated; x2_redundant];
y2 = processpca('apply',x2,ps)

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

x1_again = processpca('reverse',y1,ps)

詳細

すべて折りたたむ

processpca を使用した入力次元の削減

入力ベクトルの次元が大きいにもかかわらず、ベクトル成分間の相関が大きい (冗長である) 場合があります。そのような場合、入力ベクトルの次元を減らすことが有効です。この操作を実行する効果的な手順は主成分分析です。この手法には 3 つの効果があります。つまり、相互に無相関となるように入力ベクトルの成分が直交化され、変動が最も大きいものから順に直交成分 (主成分) が並べ替えられ、データ セットの変動への寄与が最も小さい成分が排除されます。次のコードは、processpca の使い方を示しています。これは、処理設定 maxfrac of 0.02 を使用して主成分分析を実行します。

[pn,ps1] = mapstd(p);
[ptrans,ps2] = processpca(pn,0.02);

まず、ゼロ平均と単位分散をもつように、mapstd を使用して入力ベクトルが正規化されます。これは、主成分分析を行う際の標準の手順です。この例では、processpca に渡される 2 番目の引数は 0.02 です。これは、processpca によって、データ セットの全変動への寄与が 2% 未満の主成分が排除されることを意味します。行列 ptrans には、変換後の入力ベクトルが格納されます。設定構造体 ps2 には、主成分変換行列が格納されます。ネットワークの学習が終わったら、これらの設定を使用して、それ以降にネットワークに適用される入力を変換する必要があります。これは、ネットワークの重みおよびバイアスと同様に、実質的にネットワークの一部になります。正規化された入力ベクトル pn と変換行列 transMat を乗算すると、変換された入力ベクトル ptrans が得られます。

processpca を使用して学習セット データを前処理する場合、学習済みネットワークを新しい入力で使用する場合は常に、学習セットについて ps2 を使用して計算された変換行列で前処理しなければなりません。次のコードは、新しい一連の入力を学習済みのネットワークに適用します。

pnewn = mapstd('apply',pnew,ps1);
pnewtrans = processpca('apply',pnewn,ps2);
a = sim(net,pnewtrans);

主成分分析を逆方向に適用しても信頼できる結果は得られません。そのため、これは入力の処理のみで推奨されます。出力を処理するには、逆方向に処理できる関数が必要です。

主成分分析は、feedforwardnet の既定の処理の一部ではありません。これは、以下のコマンドを使用して追加できます。

net.inputs{1}.processFcns{end+1} = 'processpca';

アルゴリズム

要素の値がすべて同じではない行の値は、次のように設定されます。

y = 2*(x-minx)/(maxx-minx) - 1;

値がすべて同じ行の値は 0 に設定されます。

バージョン履歴

R2006a で導入