NMF(非負値行列因子分解)の原理・実装・応用:ITで使える実践ガイド

NMFとは何か

非負値行列因子分解(Non-negative Matrix Factorization, NMF)は、すべての成分が非負である行列V(次元 m×n)を、低ランクの非負行列W(m×r)とH(r×n)の積に近似する手法です。つまり V ≈ W H (W,H ≥ 0)。元データが画像のピクセル強度、スペクトログラム、単語の出現頻度など非負値で表される場合に自然に使えるため、IT分野では特徴抽出、トピックモデリング、音源分離、推薦など幅広く用いられています。

数学的定式化と目的関数

代表的な定式化は次の最適化問題です。

min_{W,H ≥ 0} ||V − W H||_F^2

ここで ||·||_F はフロベニウスノルム(要素二乗和)。他に確率的解釈に基づくカルバック・ライブラー(KL)ダイバージェンスを目的関数に用いる場合もあります。目的関数の選択により解の特性(スパース性や確率的解釈など)が変わります。

代表的なアルゴリズム

  • 乗法更新則(Multiplicative update): Lee & Seung(1999, 2001)で広く知られるアルゴリズム。学習則が直感的で非負性を保てる利点があるが、収束速度や局所解への陥りやすさに課題があります。
  • 交互最小二乗法(Alternating Least Squares, ALS)/射影勾配法: W と H を交互に固定して最小化する。各ステップを非負制約付き最小二乗問題として解くため、収束性や精度で有利になる場合があります。
  • 座標降下法(Coordinate Descent): 各変数を順次最適化する手法。スパースなデータや大規模データに対して効率的で、scikit-learn の実装でも利用されています。

初期化と正則化・制約

初期化は結果に大きく影響します。ランダム初期化の他、非負特異値分解(NNDSVD)は収束速度と安定性を改善するためによく使われます。正則化は過学習抑制や解の解釈性向上に重要で、主に次のような方法があります。

  • L2正則化(平方和): 重みの大きさを抑える。
  • L1正則化(スパース性): H や W にスパース性を導入し、局所的な「パーツ表現」を促進する。Hoyer のスパース制約は有名です。
  • 直交制約やグラフ正則化: 特徴間関係や構造を保持するために導入される。

派生手法・拡張

  • スパースNMF: L1などでスパース性を明示的に導入。
  • 畳み込み(Convolutive)NMF: 時系列・音声で時間方向のずれを扱うための拡張(音源分離に有効)。
  • semi-NMF / 閾値付きNMF: 負の値を扱うための変種や、部分的に教師情報を用いる手法。
  • 階層NMF: 多層で階層的な特徴抽出を行う。

主な応用分野

  • トピックモデリング: 文書-単語行列を分解してトピック(基底)と単語分布(係数)を得る。LDAに比べて計算が単純で解釈性が高い場合がある。
  • 画像処理・コンピュータビジョン: 部分ベースの表現(顔画像の目・鼻など)を抽出し、圧縮や特徴量抽出に利用。
  • 音源分離: スペクトログラムの NMF により各音源成分を分離。畳み込みNMFや制約付きNMFと組み合わせると効果的。
  • 推薦システム: ユーザ×アイテム行列を低ランク分解し、潜在因子に基づく協調フィルタリングとして利用。
  • バイオインフォマティクス: 遺伝子発現データのクラスタリングやモジュール検出。

実装上の注意・ハイパーパラメータ選び

  • ランク r(潜在次元)の選択: 過少設定は情報欠損、過大設定は過学習を招く。交差検証、再構成誤差の変化、トピックの意味的コヒーレンスで判断する。
  • スケーリング・正規化: 行や列のスケーリングが結果に影響する。用途に応じて正規化(例: 文書長で割る)を検討する。
  • ゼロ値の扱い: スパース行列に対しては計算効率や数値安定性に配慮する必要がある。
  • 収束条件と反復回数: 収束判定(目的関数の変化閾値)や最大イテレーション数を適切に設定する。

性能評価指標

再構成誤差(フロベニウスノルムやKLダイバージェンス)が基本ですが、応用に応じて次のような評価を行います。

  • トピックモデルなら語のコヒーレンス指標(例: UMass, UCI)や人手評価。
  • 推薦ならRMSEやAUC、ランキング指標(MAP, NDCG)。
  • 音源分離ならSI-SDRやSDR等の音質評価指標。

計算量・スケーラビリティ

典型的には各反復の計算量は O(m n r) 程度で、データが大きい場合は疎行列アルゴリズムやミニバッチ法、確率的最適化を用いる必要があります。分散環境では行列分散やGPU実装(PyTorch/TensorFlow)を使った高速化が現実的です。

限界と注意点

  • 非一意性: NMF の解はスケーリングや順序の入れ替えなどにより一意でない。また複数の局所最適解が存在する。
  • 初期値依存性: 初期化によって結果が大きく変わるため複数回実行して安定解を選ぶのが一般的。
  • 負の値や中心化データ: データが負の値を含む場合はそのまま使えず、semi-NMF や変換が必要。
  • 解釈性は相対的: 得られた基底が必ずしも意味あるパーツに対応するとは限らない。

実務でのワークフロー(簡潔)

  • データの前処理(欠損処理、正規化、非負化)
  • r の候補を決定(可視化や交差検証)
  • 初期化(NNDSVD など)と正則化の設定
  • 複数回学習して安定解を選定
  • 再構成誤差とドメイン固有指標で評価
  • 解釈・可視化(基底や係数の可視化、語クラスタ、スペクトル成分のプロット)

主要な実装ライブラリ

  • scikit-learn(Python): NMF の実装と複数のソルバを提供。実用上もっとも手軽。
  • NIMFA(Python): 研究用途の多様なNMFアルゴリズム実装を含むライブラリ。
  • PyTorch / TensorFlow: 大規模・GPU加速や特殊制約を入れた実装に有用。
  • Rパッケージ(NMF など): 統計解析環境での利用。

まとめ

NMFは非負性という自然な制約のもとでデータを分解し、解釈しやすいパーツベースの表現を与える強力な手法です。アルゴリズムや初期化、正則化の選択が結果に大きく影響するため、用途に応じた設計と評価が重要です。スパース性や畳み込みなど多くの拡張が提案されており、画像・音声・文書・バイオデータなどIT領域で広く活用できます。

参考文献

Lee D. D., Seung H. S. (1999) "Learning the parts of objects by non-negative matrix factorization", Science.

Non-negative matrix factorization — Wikipedia

scikit-learn: decomposition.NMF — Documentation

NIMFA: A Python library for nonnegative matrix factorization

Hoyer P. O. (2004) "Non-negative matrix factorization with sparseness constraints"