Main Content

ppca

説明

[coeff,score,pcvar] = ppca(Y,K) は、確率的主成分分析 (PPCA) に基づいて n 行 p 列のデータ行列 Y の主成分係数を返します。また、主成分スコア、つまり、主成分空間内の Y の表現と、主成分分散、つまり pcvarY の共分散行列の固有値も返します。

coeff の列ごとに 1 つの主成分の係数が含まれ、これらの列は成分分散の降順で並びます。score の行は観測値に対応し、列は成分に対応します。Y の行は観測値に対応し、列は変数に対応します。

データ ベクトルに 1 つ以上の欠損値がある場合、交互最小二乗アルゴリズムなど欠損値を認識する他のアルゴリズムよりも、確率的主成分分析が推奨される場合があります。この分析では、値がデータ セット全体で無作為に欠損していると仮定します。完全なデータと欠損データの両方に期待値最大化アルゴリズムが使用されます。

[coeff,score,pcvar] = ppca(Y,K,Name,Value) は、1 つ以上の Name,Value ペア引数により指定され、特殊なデータ型の計算と処理を行う追加オプションを使用すると、主成分の係数、スコアおよび分散を返します。

たとえば、残差分散 v の初期値を導入したり、終了基準を変更できます。

[coeff,score,pcvar,mu] = ppca(___) は、Y の各変数の推定平均値も返します。前の構文の入力引数のいずれかを使用できます。

[coeff,score,pcvar,mu,v,S] = ppca(___) は、v の等方性残差分散と、構造体 S の収束における最終的な結果も返します。

すべて折りたたむ

標本データを読み込みます。

load fisheriris

double 行列 meas は花に関する 4 種類の測定値、がく片の長さと幅 (cm) と花弁の長さと幅 (cm) で構成されています。

欠損値を無作為に導入します。

y = meas;
rng('default'); % for reproducibility
ix = random('unif',0,1,size(y))<0.20;
y(ix) = NaN;

ここでは、NaN で示されているように、データのおよそ 20% が欠損しています。

確率的主成分分析を実行し、成分係数と分散を必要とします。

[coeff,score,pcvar,mu] = ppca(y,3);
coeff
coeff = 4×3

    0.3562    0.6709   -0.5518
   -0.0765    0.7120    0.6332
    0.8592   -0.1597    0.0596
    0.3592   -0.1318    0.5395

pcvar
pcvar = 3×1

    4.0914
    0.2125
    0.0617

交互最小二乗アルゴリズムを使用して主成分分析を実行し、成分係数と分散を要求します。

[coeff2,score2,pcvar2,mu2] = pca(y,'algorithm','als',...
'NumComponents',3);
coeff2
coeff2 = 4×3

    0.3376    0.4952    0.7406
   -0.0731    0.8609   -0.4476
    0.8657   -0.1168   -0.1233
    0.3623   -0.0086   -0.4857

pcvar2
pcvar2 = 3×1

    4.0733
    0.2652
    0.1222

最初の 2 つの主成分の係数と分散は似ています。

結果を比較するもう 1 つの方法として、係数ベクトルの範囲内の 2 つの空間に存在する角度を見つけます。

subspace(coeff,coeff2)
ans = 0.0884

2 つの空間の角度はかなり小さくなります。これは 2 つの結果が相互に近いことを意味します。

標本データ セットを読み込みます。

load imports-85

データ行列 X には、3 列目から 15 列目に 13 個の連続変数が含まれています (wheel-base、length、width、height、curb-weight、engine-size、bore、stroke、compression-ratio、horsepower、peak-rpm、city-mpg、highway-mpg)。bore と stroke の各変数の 56 ~ 59 行目の 4 つの値と、horsepower と peak-rpm の各変数の 131 行目と 132 行目の 2 つの値が欠けています。

確率的主成分分析を実行し、最初の 3 つの主成分を表示します。

[coeff,score,pcvar] = ppca(X(:,3:15),3);
Warning: Maximum number of iterations 1000 reached.

コスト関数の終了許容誤差を 0.01 に変更します。

opt = statset('ppca');
opt.TolFun = 0.01;

確率的主成分分析を実行します。

[coeff,score,pcvar] = ppca(X(:,3:15),3,'Options',opt);
Warning: Maximum number of iterations 1000 reached.

ppca は、最大反復数がコスト関数の許容誤差に一致しているため、最大反復回数に達する前に終了します。

標本データを読み込みます。

load hald
y = ingredients;

成分データには、4 つの変数に対しての 13 の観測値があります。

データに欠損値を導入します。

y(2:16:end) = NaN;

16 個中 1 個の値が NaN です。これはデータの 7.69% に相当します。

PPCA を使用してデータの最初の 3 つの主成分を検出し、再構成された観測値を表示します。

[coeff,score,pcvar,mu,v,S] = ppca(y,3);
Warning: Maximum number of iterations 1000 reached.
S.Recon
ans = 13×4

    6.8536   25.8700    5.8389   59.8730
    1.0433   28.9710   14.9654   51.9738
   11.5770   56.5067    8.6352   20.5076
   11.0835   31.0722    8.0920   47.0748
    7.0679   52.2556    6.0748   33.0598
   11.0486   55.0430    9.0534   22.0423
    2.8493   70.8691   16.8339    5.8656
    1.0333   31.0281   19.6907   44.0306
    2.0400   54.0354   18.0440   22.0349
   20.7822   46.8091    3.7603   25.8081
      ⋮

また、主成分と推定平均を使って観測値を再構成することもできます。

t = score*coeff' + repmat(mu,13,1);

データを読み込みます。

load hald

ここで、ingredients は、予測子変数の実数値の行列です。

確率的主成分分析を実行し、係数を表示します。

[coeff,score,pcvariance,mu,v,S] = ppca(ingredients,3);
Warning: Maximum number of iterations 1000 reached.
coeff
coeff = 4×3

   -0.0693   -0.6459    0.5673
   -0.6786   -0.0184   -0.5440
    0.0308    0.7552    0.4036
    0.7306   -0.1102   -0.4684

PPCA の収束におけるアルゴリズムの結果を表示します。

S
S = struct with fields:
           W: [4x3 double]
        Xexp: [13x3 double]
       Recon: [13x4 double]
           v: 0.2372
     NumIter: 1000
    RMSResid: 0.2340
      nloglk: 149.3388

行列 W を表示します。

S.W
ans = 4×3

    0.5624    2.0279    5.4075
    4.8320  -10.3894    5.9202
   -3.7521   -3.0555   -4.1552
   -1.5144   11.7122   -7.2564

W を直交すると、係数が復元します。

orth(S.W)
ans = 4×3

   -0.0693    0.6459    0.5673
   -0.6786    0.0184   -0.5440
    0.0308   -0.7552    0.4036
    0.7306    0.1102   -0.4684

入力引数

すべて折りたたむ

主成分を計算する入力データ。n 行 p 列の行列として指定します。Y の行は観測値に対応し、列は変数に対応します。

データ型: single | double

返される主成分の数。データのランクよりも小さい整数値として指定します。可能な最大ランクは min(n,p) です。ここで、n は観測の数で、p は変数の数です。ただし、データが相関する場合、ランクは min(n,p) よりも小さくなる可能性があります。

ppca は、分散に基づいて成分を順序付けます。

K が min(n,p) の場合、ppcaK を min(n,p) – 1 と等しくなるように設定し、p 行 p 列の W0 行列を指定している場合、'W0' は min(p,n) – 1 列まで切り詰められます。

たとえば、次のような成分分散に基づいて、最初の 3 つの成分のみを要求できます。

例: coeff = ppca(Y,3)

データ型: single | double

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: 'W0',init,'Options',opt は、'W0' の初期値が行列 init 内にあり、ppcaopt で定義されたオプションを使用することを指定します。

確率的主成分分析アルゴリズムの W の初期値。'W0' と p 行 k 列の行列で構成されるコンマ区切りのペアとして指定します。

データ型: single | double

残差分散の初期値。'v0' と正のスカラー値で構成されるコンマ区切りのペアとして指定します。

データ型: single | double

反復のオプション。'Options' と、関数 statset で作成される構造体のコンマ区切りのペアとして指定します。ppca はオプション構造体の次のフィールドを使用します。

'Display'表示出力レベル。選択肢は、'off''final' および 'iter' です。
'MaxIter'許容される最大ステップ回数。既定値は 1000 です。最適化の設定とは異なり、MaxIter の値に達すると収束したと見なされます。
'TolFun'コスト関数の終了許容誤差を指定する正の整数。既定値は 1e-6 です。
'TolX'W の要素の相対的な変更に対する収束しきい値を示す正の整数。既定値は 1e-6 です。

これらのフィールドの値を変更し、'Options' の名前と値のペア引数を使って ppca で新しい構造体を指定することができます。

例: opt = statset('ppca'); opt.MaxIter = 2000; coeff = ppca(Y,3,'Options',opt);

データ型: struct

出力引数

すべて折りたたむ

p 行 k 列の行列として返される、主成分の係数。coeff の各列には 1 つの主成分の係数が含まれます。列は、成分分散 pcvar の降順になります。

主成分のスコア。n 行 k 列の行列として返されます。score の行は観測値に対応し、列は成分に対応します。

主成分の分散。これは Y の共分散行列の固有値で、列ベクトルとして返されます。

Y の各変数の推定平均値。行ベクトルとして返されます。

等方性残差分散。スカラー値として返されます。

収束における最終結果。以下のフィールドを含む構造体として返されます。

W収束における W。
Xexp推定された潜在的変数 x の条件付き期待値。
Reconk 主成分を使って再構成された観測。入力データ Y の低次元の近似であり、mu + score*coeff' と等しくなります。
v残差分散。
RMSResid残差の平方根平均二乗。
NumIter反復回数。
nloglk負の対数尤度関数の値。

詳細

すべて折りたたむ

確率的主成分分析

PPCA (確率的主成分分析) は、データ ベクトルに 1 つ以上の欠損値が含まれているときに主軸を推定する方法です。

PPCA は、等方誤差モデルに基づいています。PPCA は、p 次元の観測ベクトル y を、平均 0 と共分散 I(k) の正規である、潜在的な (未観測の) 変数 x の対応する k 次元のベクトルに関連付けようとします。この関係は次のように表されます。

yT=WxT+μ+ε,

ここで、y は観測した変数が含まれている行ベクトル、x は潜在的変数が含まれている行ベクトル、ε は等方誤差項です。ε は平均が 0、共分散が v*I(k) のガウス分布で、v は残差分散です。この場合、k は、残差分散が 0 より大きくなるように (v>0)、ランクよりも小さくする必要があります。残差分散が 0 になる標準の主成分分析は、PPCA の特別な場合です。観測された変数 y は、潜在的変数の値 x を与えると条件付きで独立します。そのため、潜在的変数は、観測変数間の相関を説明し、誤差は特定の yi に固有の変動性を説明します。p 行 k 列の行列 W は、潜在的変数と観測変数を関連付け、ベクトル μ はモデルに非ゼロの平均が含まれることを許可します。PPCA では、値がデータ セット全体でランダムに欠損していると仮定します。つまり、データ値が欠損しているかどうかは、観測されたデータ値に依存し、潜在的変数には依存していていません。

このモデルでは、次のようになります。

y~N(μ,W*WT+v*I(k)).

W と v には閉じた形での分析解法がないため、それらの推定値は、期待値最大化 (EM) アルゴリズムを使って対応する対数尤度の反復最大化によって決まります。この EM アルゴリズムでは欠損値を追加の潜在的変数として扱います。収束において、W の列は部分空間に広がりますが、正規直交ではありません。ppca は、W の直交化により成分に対する正規直交係数 coeff を取得します。

参照

[1] Tipping, M. E., and C. M. Bishop. Probabilistic Principal Component Analysis. Journal of the Royal Statistical Society. Series B (Statistical Methodology), Vol. 61, No.3, 1999, pp. 611–622.

[2] Roweis, S. “EM Algorithms for PCA and SPCA.” In Proceedings of the 1997 Conference on Advances in Neural Information Processing Systems. Vol.10 (NIPS 1997), Cambridge, MA, USA: MIT Press, 1998, pp. 626–632.

[3] Ilin, A., and T. Raiko. “Practical Approaches to Principal Component Analysis in the Presence of Missing Values.” J. Mach. Learn. Res.. Vol. 11, August, 2010, pp. 1957–2000.

バージョン履歴

R2013a で導入