nnmf
非負値行列因子分解
説明
[
は、n 行 m 列の行列 W
,H
] = nnmf(A
,k
)A
を非負の因子 W
(n 行 k
列) と H
(k
行 m 列) に分解します。因子分解は正確ではなく、W*H
は A
への低ランク近似になります。因子 W
と H
は、A
と W*H
の間の平方根平均二乗残差 D
を最小化します。
D = norm(A - W*H,'fro')/sqrt(n*m)
因子分解は、W
と H
に対するランダムな初期値で始まる反復アルゴリズムを使用します。平方根平均二乗残差 D
は局所的最小値をもつ場合があるため、因子分解を繰り返すと、異なる W
と H
が生じる可能性があります。アルゴリズムは k よりも低ランクの解に収束する場合があり、これは結果が最適解ではないことを示します。
[
は、1 つ以上の名前と値のペアの引数を使用して因子分解を変更します。たとえば、W
,H
] = nnmf(A
,k
,Name,Value
)'Replicates'
を 1 より大きい整数値に設定することで、因子分解の繰り返しを要求できます。
例
非負のランク 2 の近似とバイプロット
標本データを読み込みます。
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 回の反復を試行します。
rng default % For reproducibility 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
入力引数
A
— 因子分解する行列
実数行列
因子分解する行列。実数行列として指定します。
例: rand(20,30)
データ型: single
| double
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: [W,H] = nnmf(A,k,'Algorithm','mult','Replicates',10)
は、乗法更新アルゴリズムと 10 回の反復を選択し、結果を改善します。
Algorithm
— 因子分解アルゴリズム
'als'
(既定値) | 'mult'
因子分解アルゴリズム。'Algorithm'
と 'als'
(交互最小二乗) または 'mult'
(乗法更新アルゴリズム) で構成されるコンマ区切りのペアとして指定します。
通常、'als'
アルゴリズムは安定しており、少ない反復で収束します。各反復には時間がかかります。そのため、既定の最大値は 50 であり、通常は内部テストで満足できる結果が得られます。
通常、'mult'
アルゴリズムは反復が高速で、多くの反復が必要です。既定の最大値は 100 です。このアルゴリズムは開始値の影響を受けやすい傾向があるため、複数の反復を実行することから多くのメリットが得られる可能性があります。
例: 'Algorithm','mult'
データ型: char
| string
Options
— アルゴリズム オプション
[]
(既定値) | statset
によって返される構造体
アルゴリズム オプション。'Options'
と、関数 statset
によって返される構造体で構成されるコンマ区切りのペアとして指定します。nnmf
はオプション構造体の以下のフィールドを使用します。
フィールド | 説明 | 値 |
---|---|---|
Display | 反復表示のレベル |
|
MaxIter | 最大反復回数 | 正の整数。既定は、'als' アルゴリズムが 50 で、'mult' アルゴリズムが 100 です。最適化設定と異なり、反復が MaxIter の回数に達すると収束として扱われます。 |
TolFun | 残差のサイズが変化したときの終了許容誤差 | 非負の値。既定の設定は 1e-4 です。 |
TolX | W および H の要素に相対的な変化があったときの終了許容誤差 | 非負の値。既定の設定は 1e-4 です。 |
UseParallel | 並列計算の指示 | 論理値。既定の false は並列計算しないことを示し、true は並列計算することを示します。並列計算には Parallel Computing Toolbox™ のライセンスが必要です。 |
UseSubstreams | 並列計算時の再現性のタイプ |
詳細については、並列統計計算での再現性を参照してください。 |
Streams | RandStream オブジェクトまたはそのようなオブジェクトの cell 配列 |
|
例: 'Options',statset('Display','iter','MaxIter',50)
データ型: struct
出力引数
D
— 平方根平均二乗残差
非負のスカラー
平方根平均二乗残差。非負のスカラーとして返されます。
D = norm(A - W*H,'fro')/sqrt(n*m)
参照
[1] Berry, Michael W., Murray Browne, Amy N. Langville, V. Paul Pauca, and Robert J. Plemmons. “Algorithms and Applications for Approximate Nonnegative Matrix Factorization.” Computational Statistics & Data Analysis 52, no. 1 (September 2007): 155–73. https://doi.org/10.1016/j.csda.2006.11.006.
拡張機能
自動並列サポート
Parallel Computing Toolbox™ を使用して自動的に並列計算を実行することで、コードを高速化します。
並列実行するには、この関数を呼び出すときに名前と値の引数 Options
を指定し、statset
を使用してオプション構造体の UseParallel
フィールドを true
に設定します。
Options=statset(UseParallel=true)
並列計算の詳細については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2008a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)