レコメンダーシステムでの特異値分解と行列因子分解

これらの方法の混乱を明確にする

UnsplashのEvan Dennisによる写真

最近、Andrew Ng教授の機械学習コースのリコメンダーシステムクラスを見た後、マトリックスファクタリングの仕組みを理解していないことに非常に不満を感じました。

機械学習の数学が非常にあいまいなこともあります。ブラックボックスと考えた方が良いのですが、そのモデルは私の標準にとって非常に「魔法」でした。

そのような状況では、私は通常、より多くの参照をGoogleで検索して、概念をよりよく理解しようとします。今回はさらに混乱しました。 Ng教授はアルゴリズムを(低因子)行列因子分解と呼んでいましたが、インターネット上で別の命名法である特異値分解を発見しました。

私を最も混乱させたのは、特異値分解がNg教授が教えたものとは非常に異なっていたことでした。人々は両方が同じものであると示唆し続けました。

このテキストでは、私の調査結果を要約し、それらの用語が引き起こす可能性のある混乱の一部を解決しようとします。

レコメンダーシステム

推奨システム(RS)は、誰かに何かを推奨する自動化された方法です。このようなシステムは、電子商取引会社、ストリーミングサービス、ニュースWebサイトで広く使用されています。好きなものを見つけようとするときのユーザーの摩擦を減らすのに役立ちます。

RSは間違いなく新しいものではありません。少なくとも1990年以来紹介されています。実際、最近のMachine Learningの誇大広告の一部はRSへの関心に起因している可能性があります。 2006年、Netflixは、映画に最適なRSを見つけるためのコンペティションを後援した際に大成功を収めました。すぐにわかるように、そのイベントはその後に続く命名法の混乱に関連しています。

マトリックス表現

人が映画を誰かに推薦することについて考えることができる多くの方法があります。非常に良いことが判明した戦略の1つは、映画のレーティングを次のようなユーザーx映画のマトリックスとして扱うことです。

https://sheetsu.com/で作成

そのマトリックスでは、疑問符はユーザーが評価していない映画を表します。戦略は、それらの評価を何らかの形で予測し、おそらく好きになる映画をユーザーに推奨することです。

行列分解

Netflixのコンテストに参加した人(特にSimon Funk)が本当に賢明に実現したのは、ユーザーの評価が単なるランダムな推測ではなかったということです。評価者はおそらく、映画で好きなもの(特定の女優やジャンル)を嫌いなもの(長時間またはジョークが悪い)に対して重み付けし、スコアを算出するというロジックに従います。

そのプロセスは、次の種類の線形式で表すことができます。

ここで、xₘは映画mの特徴の値を持つ列ベクトルで、θᵤはユーザーuが各特徴に与える重みを持つ別の列ベクトルです。各ユーザーには異なる重みのセットがあり、各フィルムにはその機能の異なる値のセットがあります。

特徴の数を任意に修正し、欠落している評価を無視すると、元の評価マトリックスに近い値を持つ新しいマトリックスを作成する重みと特徴の値のセットを見つけることができます。これは、線形回帰で使用されるものと非常によく似た勾配降下法で実行できます。その代わりに、2つのパラメーターセット(重みと機能)を同時に最適化しています。

上記の例として示した表を使用すると、最適化問題の結果は次の新しいマトリックスを生成します。

実際の生活では、映画を評価するために乗算や加算を行っていないため、結果のマトリックスはほとんどの実際のデータセットの元のマトリックスの正確なコピーにはなりません。ほとんどの場合、評価はすべての種類の外部要因の影響を受ける可能性のある単なる直感です。それでも、私たちの希望は、線形式がユーザーの評価を左右する主なロジックを表現する良い方法であることです。

OK、おおよその行列ができました。しかし、それはどのように評価の欠落を予測するのに役立ちますか?新しいマトリックスを作成するために、元のマトリックスにはない値を含むすべての値を埋める式を作成したことを思い出してください。したがって、映画でユーザーの欠落している評価を予測する場合は、その映画のすべての特徴値を取得し、そのユーザーのすべての重みを掛けてすべてを合計します。したがって、私の例では、ユーザー2の映画1の評価を予測する場合、次の計算を実行できます。

物事を明確にするために、θとxの関連付けを解除し、それらを独自のマトリックス(PとQなど)に入れることができます。これは実質的に行列因子分解であるため、Ng教授が使用した名前です。

マトリックス分解は基本的にファンクがしたことです。彼はNetflixの競争で3位になり、多くの注目を集めました(これは3位が勝者よりも有名であるという興味深い事例です)。彼のアプローチはそれ以来複製され洗練されており、多くのアプリケーションでまだ使用されています。

特異値分解

特異値分解(SVD)を入力します。 SVDは、マトリックスを他の3つのマトリックス(A =UΣVᵀ)に因数分解する便利な方法です。 SVDの実行方法は、これらの3つの行列がいくつかの素晴らしい数学的な特性を持っていることを保証します。

SVDには多くのアプリケーションがあります。それらの1つは主成分分析(PCA)です。これは、次元nのデータセットを次元k(k

私は自分自身を知らないので、SVDの詳細は説明しません。ポイントは、マトリックス分解で行ったのと同じことではないということです。最大の証拠は、SVDが3つのマトリックスを作成するのに対して、Funkのマトリックス分解は2つだけを作成することです。

では、Recommender Systemsを検索するたびにSVDがポップアップし続けるのはなぜですか?少し掘り下げなければなりませんでしたが、やがて隠れた宝石を見つけました。ルイス・アルゲリッチによると:

推奨システムに使用される行列分解アルゴリズムは、2つの行列を見つけようとします。P* QなどのP、Qは、ユーティリティ行列のKNOWN値と一致します。
この原則は、SVDとまったく関係のないアルゴリズムに残念ながら「SVD ++」という名前を使用した有名なSVD ++「Factorization meets the Neighborhood」ペーパーに登場しました。

記録については、SVD ++の作者ではなくFunkが最初に、推奨システム用の前述の行列因子分解を提案したと思います。実際、SVD ++は、その名前が示すように、Funkの仕事の延長です。

ザビエル・アマトリアインは私たちに大きな全体像を与えてくれます。

推奨のコンテキストで通常使用される「SVD」と呼ばれる方法は、厳密に言えばマトリックスの数学的な特異値分解ではなく、マトリックスの低ランク近似を計算する近似方法であることを指摘することから始めましょう。二乗誤差の損失を最小化することにより。これを呼び出すより正確な、より一般的な方法は、マトリックス分解です。 Netflix Prizeのコンテキストでのこのアプローチの最初のバージョンは、有名なTry This at Homeブログ投稿でSimon Funkによって提示されました。 「真のSVD」アプローチは実際には何年も前に同じタスクに適用されていたが、それほど実用的な成功には至っていないことに注意することが重要です。

ウィキペディアには、Matrix因数分解(推奨システム)の記事にも同様の情報が埋め込まれています。

Simon Funkのブログ投稿で提案された元のアルゴリズムは、ユーザーアイテムの評価マトリックスを2つの低次元マトリックスの積として因数分解しました。特定のユーザーまたはアイテムに関連付けられた行または列は、潜在的要因と呼ばれます。その名前にもかかわらず、FunkSVDでは特異値分解は適用されないことに注意してください。

要約する:

1. SVDは、3つの新しいマトリックスでマトリックスを因数分解する、やや複雑な数学的手法であり、PCAやRSを含む多くのアプリケーションがあります。

2. Simon Funkは、2006年のNetflixコンペティションで非常にスマートな戦略を適用し、マトリックスを他の2つに分解し、勾配降下を使用して特徴と重みの最適値を見つけました。 SVDではありませんが、とにかくその用語を使用して自分のテクニックを説明しています。

3. Funkが行ったことに対するより適切な用語は、マトリックス分解です。

4.良い結果とその後の名声のために、人々はまだそのテクニックをSVDと呼んでいます。

これが少し物事を明確にするのに役立つことを願っています。