私は、C#6.0のアイテムベースの協調フィルタを使用してレストラン向けの推薦システムを開発中です。私はアルゴリズムを可能な限り実行するように設定したいので、ユーザーがまだレビューしていないレストランの評価を予測するさまざまな方法についていくつかの調査を行った。推薦システムの行列分解を使用する
私は、ユーザーが一緒にうまく適合かを確認できるようにするには、ユーザ間のピアソン相関を使用して、ユーザーベースの協調フィルタを設定したい
ファーストを行っている研究から始めましょう。
この主な問題は、この相関を計算するために必要なデータ量でした。まず、同じレストランで2人のユーザーにつき4件のレビューが必要でした。しかし、私のデータは非常に疎そうです。 2人のユーザーがまったく同じ4つのレストランを見直した可能性は低いです。私は一致条件を拡大することでこれを解決したかった(つまり、同じレストランのユーザーと同じではなく、同じ種類のレストラン)。しかし、これは相関関係でどのレビューを使用するかを決定するのが難しい問題であったユーザーは「ファーストフード」タイプのレストランで3件のレビューを残すことができました。これらのうちどれがファーストフード店での他のユーザーのレビューに最も適しているでしょうか?
さらに調査した結果、アイテムベースのコラボレーティブフィルタがユーザーベースのコラボレーティブフィルタより優れていると結論づけました。しかし、再び、データの希薄さの問題に遭遇しました。私のテストでは、ユーザーがまだレビューしていないレストランでレーティングの予測を計算することに成功しましたが、スパースデータセットでアルゴリズムを使用した場合、結果は十分ではありませんでした。 (ほとんどの場合、同じレストランを2人のユーザーが評価していないので、2つのレストランの間では類似性は不可能でした)。
さらに多くの研究をした結果、行列分解法を使用すると、疎なデータでうまくいくことが分かりました。今
私の問題
私はすべてこの方法を使用する上でのチュートリアルのためのインターネット上で探しているが、私は推薦システム内の任意の経験を持っていないと代数の私の知識も限られています。私は方法の正しさを理解しています。あなたは、1つの側にユーザーともう1つの側にレストランがあるマトリックスがあります。各セルは、ユーザーがレストランで指定したレーティングです。
行列分解法は、ユーザーとレストランの間の重みとレストランの種類とこれらの種類の間の重みを持つ2つの行列を作成します。
私が知ることができないのは、レストランのタイプとレストラン/ユーザーの間の重みを計算する方法です(行列分解を正しく理解していれば)。私はこれらの数値を計算する何十種類もの数式を見つけましたが、それらを分解してアプリケーションに適用する方法を理解することはできません。
アプリケーションでデータがどのように表示されるかの例を示します。
この表では、U1はユーザーを表し、R1はレストランを表します。 各レストランには独自のタグ(レストランの種類)があります。私。 R1は「イタリアの」タグを持っている、R2は
| R1 | R2 | R3 | R4 |
U1 | 3 | 1 | 2 | - |
U2 | - | 3 | 2 | 2 |
U3 | 5 | 4 | - | 4 |
U4 | - | - | 5 | - |
が正しい方向に私を指すか、私は自分のデータでこのメソッドを使用する必要がありますどのように説明することができ、誰もがありますなど、「ファーストフード」を持っていますか?どんな助けでも大歓迎です!
どういうわけかのアプローチが私に... *「一致しないユーザーに不審な音同じレストランではあるが、同じ種類のレストランでは「ユーザーが好きな種類の料理を評価しているかのように聞こえる。しかし、それはおそらくそうではないでしょう。ユーザーは、レストランが予想される食べ物をどれくらいうまく運んでいるかを評価しています。*まともなバーガーレストランをMc * D *に代えれば、この代用の結果はかなりランダムです.Next 'コール(私はあなたがそれより良いことを予測したいと思う?)。 – grek40
これは、アイテムベースのコラボレーティブフィルタに移動するか、または行列分解を実装する方法を見つけたときに可能性があると判断した理由です。 – RandomStranger
一般的な考え方は、レストランごとに評価不足をレストランタイプごとに置き換えることです。最初のマトリックスはレストランの評価を平均し、2番目のマトリックスは同じタイプのレストラン内の違いを強調表示します。たとえば、レストランAとBがイタリア語で、既存のユーザーが1と3のレートしかない場合、最初の行列は2と2番目の0,5と1,5(ここでは、セルの乗算を使用します)を含むことができます。 2人のユーザーがいる場合、2番目の行列は何とかレストラン<->の平均値をとっているので、全体の平均値は同じになります。 –