いつも(特にNetflixコンテストで)私はいつもこのブログ(またはリーダーボードフォーラム)に出くわします。そこで、データに単純なSVDステップを適用することで、データのスパース性を減らしたり、一般にアルゴリズムのパフォーマンスを改善したりする方法に言及しました手。私は(長い間)考えようとしていますが、なぜそうなのか推測できません。一般に、取得する手元のデータは非常にノイズが多く(これもビッグデータの楽しい部分です)、ログ変換などの基本的な機能スケーリングに関するもの、つまり正規化を知っています。しかし、SVDのようなものがどのように役立ちますか。それで、ユーザー評価映画の巨大なマトリックスがあるとしましょう。次に、このマトリックスで、推奨システムのいくつかのバージョンを実装します(たとえば、協調フィルタリング):
1) Without SVD
2) With SVD
それはどうやって感謝するのですか
SVDはデータの正規化には使用されませんが、冗長データを取り除くために、つまり次元削減のために使用されます。たとえば、2つの変数があり、1つは湿度指数でもう1つは雨の確率である場合、それらの相関は非常に高いため、2番目の変数は分類または回帰タスクに役立つ追加情報を提供しません。 SVDの固有値は、どの変数が最も有益で、どの変数がなくても実行できるかを判断するのに役立ちます。
動作は簡単です。 U、S、V *を取得するには、トレーニングデータ(行列Aと呼びます)に対してSVDを実行します。次に、特定の任意のしきい値(0.1など)未満のSのすべての値をゼロに設定し、この新しい行列S 'を呼び出します。次に、A '= US'V *を取得し、新しいトレーニングデータとしてA'を使用します。機能の一部がゼロに設定され、削除できる場合があります(データや選択したしきい値によっては、パフォーマンスが低下することはありません)。これは、kで切り捨てられたSVDと呼ばれます。
ただし、SVDはスパース性を支援しませんが、機能が冗長である場合にのみ役立ちます。 2つの機能はスパースであり、予測タスクにとって有益(関連)になる可能性があるため、どちらか一方を削除することはできません。
SVDを使用すると、n機能からk機能。それぞれが元のn
の線形結合になります。これは、機能の選択と同様に、次元削減のステップです。ただし、冗長な特徴が存在する場合、データセットによっては、特徴選択アルゴリズムを使用すると、SVDよりも分類パフォーマンスが向上する場合があります(たとえば、最大エントロピー特徴選択)。 Weka にはたくさんあります。
特異値分解は、行列X
を低ランク行列X_lr
で近似するためによく使用されます。
X = U D V^T
を計算します。k
の最大の特異値を維持し、他の値をゼロに設定して、行列D'
を作成します。X_lr
x X_lr = U D' V^T
を作成します。マトリックスX_lr
は、 Frobenius norm の場合のマトリックスk
のランクX
の最良の近似です(マトリックスのl2
- normと同等) )。マトリックスX
がn
x n
とk << n
である場合、(2n + 1)k
係数のみで低ランク近似を格納できるため(U
、D'
を格納することにより)、この表現を使用すると計算効率が良くなります。およびV
)。
これは、ユーザー評価の真のマトリックスが低ランクである(または低ランクマトリックスでよく近似されている)と想定されるため、マトリックス補完の問題(協調フィルタリングなど)でよく使用されました。したがって、データマトリックスの最も低いランクの近似を計算することにより、真のマトリックスを回復する必要があります。ただし、ノイズの多い観測や欠落した観測から低ランクの行列を回復するためのより良い方法、つまり核ノルムの最小化があります。たとえば、論文 を参照してください。凸緩和の力:E. CandesおよびT. Taoによる最適に近い行列の完成 。
(注:この手法から派生したアルゴリズムは、推定された行列のSVDも格納しますが、計算方法は異なります)。
PCAまたはSVDを次元削減に使用する場合は、入力の数を減らします。これにより、学習および/または予測の計算コストを節約できるだけでなく、ときどき統計的意味では最適ではないが、騒々しい状態。
数学的には、単純なモデルほど分散が少なく、つまり、過剰適合しにくくなります。もちろん、過小評価も問題になります。これは、バイアス分散ジレンマとして知られています。または、アインシュタインの平易な言葉で述べたように、物事は可能な限りシンプルにする必要がありますが、シンプルにする必要はありません。