OK、SVDと言うとき、おそらく切り捨てられた SVD(最大の特異値のみを保持する)について話しているのでしょう。マトリックスの切り捨てられたSVDを見るには、2つの異なる方法があります。1つは標準定義です。k
最初にSVDを実行します:、ここでとは回転行列で、は対角線に沿った特異値を持ちます。次に、上位特異値を選択し、残りをゼロにし、無関係な行と列をハックして、元のランク近似を作成します UVΣKKX≈〜X =〜Uのn × kのK × K 〜Σ〜V Tの K × Mバツn × m= Un × nΣn × mVTm × mうんVΣkkバツ≈ X〜= U〜n × kΣ〜k × kV〜Tk × m
これはすべて素晴らしくて(そしてRまたはmatlabで簡単に実装できます)、欠損値のある行列については意味がありません。ただし、切り捨てられたSVD には興味深い特性があります。これは、元のランクの最良の近似です。あれは:kkk
バツ〜= a r gM I nはB :r a n k (B )= k∑私、j(X私はj− B私はj)2
このプロパティは、欠損値の場合に簡単に一般化できるようです。基本的に、元の行列の既知のエントリ全体の要素ごとの平均二乗誤差を最小化するランクの行列を探しています。つまり、システムをトレーニングしているときに、すべての欠損値を無視します。(あなたが実際に見つけることについて行くかもしれない方法のヒントについて -rank近似、ここにあるいくつかの場所を見に)。kkk
次に、元のランクの近似値を適切に「近似」するようになったら、それを使用して欠損値を埋めます。つまり、が欠落している場合は、ます。多田!これで完了です。X I J 〜X I Jkバツ私はjバツ〜私はj