欠損値を予測する方法はたくさんありますが、従来のSVDはその1つではありません。良い点は、機械学習がこれを行うための多くの方法を提供することです。その一部は行列因数分解に基づいており、他は行列因数分解とは完全に異なります。完全にカスタムモデルを選択して作成することができます。これは、今日のツールが十分に強力であるため、現在一般的に行われています。行列分解は依然としてスパースデータの欠損値を予測する優れた方法ですが、SVD自体はそうではありません。
ここで受け入れられた答えは明らかに、質問者に、0または99または-3などの定数値を選択し、事前に欠損値に割り当ててから、その値に対してSVDを実行するようにアドバイスしているようです。目的がスパースデータセットで予測することである場合、これは悪い答えです。ただし、OPの目的がSVDの実行のみである場合は、定数値を事前に割り当てることで問題なく機能するため、任意の値を選択し、OPで結果が重要でない場合はSVDを実行します。すべてのまばらな場所で定数値を想定すると、最終的に既知の良好なデータポイントよりも多くのノイズポイントが導入される可能性があるため、SVDは欠損値の予測に適さないソリューションだと言いました。
ノイズを学ぶ意味は何ですか?そして、演習のポイントがそれらが何であるかを予測することであるときに、なぜあなたは欠損値が実際には同じ定数値であることを提案するでしょうか?欠損値がまったく同じであるとは思わないでしょう?これは、データセットに一定のデータが非常に広範に存在する場合に生じる主成分の数を過小評価することになります。また、これは非常に簡単な予測問題です。学習アルゴリズムも、因数分解アルゴリズムも必要ありません。欠損値は既知の定数であるとおっしゃいました。代入する必要はありません!昔ながらの方法を推測するだけで、手動ですでにそれを実行しました。
SVDを使いこなして、既知の(欠落していない)データから平均値と標準偏差を使用して経験的に導出されたランダム分布を使用して、欠落している値を事前に推定することができます。しかし、データのパターンの代わりにランダム性があり、おそらく、あなたが期待するパターンを見つけるために、その手法に固有の行列分解と次元削減が期待されています。ただし、ランダムノイズでの使用の多くのパターンを発見することはできないため、この方法を使用しても効果がありません。
結論として、SVD(または他のアルゴリズム)の出力は、調査者が提供するジャンクデータが圧倒的に大量に供給されると、ほとんどが不要になります。多数のジャンクデータから適切なモデルを学習できるアルゴリズムはありません。その「アプローチ」全体にノーと言ってください。
OPの目標は、予測し、学習アルゴリズムの一部として行列因数分解設計を使用することであると思われます。この場合の良い点は、コスト、欠落値に対して行われた予測を決定的に省略した独自のコスト関数を適切に記述できることです。この方法では、ジャンクデータが学習アルゴリズムに送られることはありません。Adamなど、優れた勾配降下法に基づくオプティマイザーを使用します(他にもあります)。優れた機械学習プロジェクトの方法論に従えば、トレーニング、開発、およびテストデータセットに関してある程度正確なソリューションを取得できます。ユーザーバイアス、アイテムバイアス、グローバルバイアス、正則化など、プロジェクトの要件と使用可能なデータセットに対するバイアスエラーと分散エラーを制御するために必要な用語や複雑さをモデルに追加してください。
最新の機械学習開発パッケージにより、これが現在実用的なアプローチになっています。たとえばTensorFlow(またはMicrosoft CNTKなど)は、行列分解モデルを使用して、スパースデータセットで説明したことを正確に実行するのに役立ちます。