ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

nnmf

非負値行列因子分解

構文

[W,H] = nnmf(A,k)
[W,H] = nnmf(A,k,param1,val1,param2,val2,...)
[W,H,D] = nnmf(...)

説明

[W,H] = nnmf(A,k) は、非負の n 行 m 列の行列 A を非負の因子 W (n 行 k 列) と H (k 行 m 列) に分解します。因子分解は正確ではなく、W*HA への低ランク近似になります。AW*H の間の平方根平均二乗残差 D を最小にするために、因子 WH が選択されます。

D = norm(A-W*H,'fro')/sqrt(N*M)

因子分解は、WH に対するランダムな初期値で始まる反復法を使用します。平方根平均二乗残差 D は極小値をもつ場合があるため、因子分解を繰り返すと、異なる WH を生じる可能性があります。時々、アルゴリズムは k よりも低ランクの解に収束し、これは結果が最適解ではないことを示します。

WH は、H の行が単位長さをもつように正規化されます。W の列は、長さの減少で順序付けされます。

[W,H] = nnmf(A,k,param1,val1,param2,val2,...) は、次の表に示すオプション パラメーターの名前と値のペアを指定します。

パラメーター
'algorithm'

交互最小二乗アルゴリズムを使用する場合は 'als' (既定値)、乗法更新アルゴリズムを使用する場合は 'mult'

一般的に、'als' アルゴリズムの方が高速かつ高い整合性で収束します。'mult' アルゴリズムは初期値により敏感なので、'replicates' を使用して、複数のランダムな開始値から WH を見つける場合に適しています。

'w0'

W に対する初期値として使用される n 行 k 列の行列。

'h0'

H に対する初期値として使用される k 行 m 列の行列。

'options'

関数 statset によって作成したオプションの構造体。nnmf では次のフィールドを使用します。

  • Display — 表示レベル。選択肢は以下のとおりです。

    • 'off' (既定値) — 表示しません

    • 'final' — 最終結果を表示します

    • 'iter' — 中間結果を反復表示します

  • MaxIter — 最大反復回数。既定値は 100 です。最適化設定と異なり、反復が MaxIter の回数に達すると収束として扱われます。

  • TolFun — 残差のサイズが変化したときの終了許容誤差。既定値は 1e-4 です。

  • TolXW および H の要素に相対的な変化があったときの終了許容誤差。既定値は 1e-4 です。

  • UseParallel — 並列計算する場合は true に設定します。既定値は false です。

  • UseSubstreams — 再生成可能な方法で並列計算する場合は true に設定します。既定値は false です。再現性のある計算を行うには、Streams をサブストリームを許可する型、'mlfg6331_64' または 'mrg32k3a' に設定します。

  • StreamsRandStream オブジェクトまたはそのようなオブジェクトの cell 配列。Streams を指定しないと、nnmf には既定のストリームが使用されます。Streams を指定するように選択した場合、次の場合を除いて単一オブジェクトを使用してください。

    • UseParalleltrue

    • UseSubstreamsfalse

    この場合は、並列プールと同じサイズの cell 配列を使用します。

並列計算を行うには、Parallel Computing Toolbox™ が必要です。

'replicates'

'w0''h0' が与えられる場合、WH に対する新規乱数の開始値を使用して最初の反復を除いた因子分解の反復回数。これは、'mult' アルゴリズムで最も有効です。既定の設定は 1 です。

[W,H,D] = nnmf(...) は、平方根平均二乗残差 D も返します。

すべて折りたたむ

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

load fisheriris

フィッシャーのアヤメのデータで 4 つの変数の測定値について非負のランク 2 の近似を計算します。

rng(1) % For reproducibility
[W,H] = nnmf(meas,2);
H
H = 2×4

    0.6945    0.2856    0.6220    0.2218
    0.8020    0.5683    0.1834    0.0149

meas の 1 番目と 3 番目の変数 (がく片の長さと花弁の長さ。係数はそれぞれ 0.6945 と 0.6220) は、W の 1 番目の列に比較的大きな重みを与えます。meas の 1 番目と 2 番目の変数 (がく片の長さと幅。係数はそれぞれ 0.8020 と 0.5683) は、W の 2 番目の列に比較的大きな重みを与えます。

W の列空間で meas のデータおよび変数の biplot を作成します。

biplot(H','scores',W,'varlabels',{'sl','sw','pl','pw'});
axis([0 1.1 0 1.1])
xlabel('Column 1')
ylabel('Column 2')

ランク 20 の乱数の配列 X から開始し、乗法アルゴリズムを使用して、いくつかの反復において、2 ~ 3 回の反復を試行します。

X = rand(100,20)*rand(20,50);
opt = statset('MaxIter',5,'Display','final');
[W0,H0] = nnmf(X,5,'replicates',10,...
                   'options',opt,...
                   'algorithm','mult');
    rep	   iteration	   rms resid	  |delta x|
      1	       5	    0.560887	   0.0245182
      2	       5	     0.66418	   0.0364471
      3	       5	    0.609125	   0.0358355
      4	       5	    0.608894	   0.0415491
      5	       5	    0.619291	   0.0455135
      6	       5	    0.621549	   0.0299965
      7	       5	    0.640549	   0.0438758
      8	       5	    0.673015	   0.0366856
      9	       5	    0.606835	   0.0318931
     10	       5	    0.633526	   0.0319591
Final root mean square residual = 0.560887

交互最小二乗を使用して、これらの最もよい結果からさらに反復を続けます。

opt = statset('Maxiter',1000,'Display','final');
[W,H] = nnmf(X,5,'w0',W0,'h0',H0,...
                 'options',opt,...
                 'algorithm','als');
    rep	   iteration	   rms resid	  |delta x|
      1	      24	    0.257336	  0.00271859
Final root mean square residual = 0.257336

参考文献

[1] Berry, M. W., et al. “Algorithms and Applications for Approximate Nonnegative Matrix Factorization.” Computational Statistics and Data Analysis. Vol. 52, No. 1, 2007, pp. 155–173.

拡張機能

参考

| |

R2008a で導入