ここでの私のプラットフォームは Ruby です。特に Rails 3.2 を使用する Web アプリケーションです。
特定のアイテムの評価に基づいてオブジェクト (人) を一致させようとしています。人々は、他の人々と同じ項目のすべてまたは一部を評価するか、まったく評価しない場合があります。評価は 0 から 5 までの整数です。評価できるアイテムの数とユーザーの数は、どちらも重要であると見なすことができます。
簡単なイラスト -
力ずくのアプローチは、すべての人を繰り返し処理し、各項目の違いを計算することです。Ruby風味の疑似コードでは -
MATCHES = {}
for each (PERSON in (people except USER)) do
for each (RATING that PERSON has made) do
if (USER has rated the item that RATING refers to) do
MATCHES[PERSON's id] += difference between PERSON's rating and USER's rating
end
end
end
lowest values in MATCHES are the best matches for USER
ここでの問題は、アイテム、評価、および人の数が増えると、このコードの実行に非常に長い時間がかかることです。キャッシュを今のところ無視すると、これは多くのコードを実行する必要があります。私のアプリの機能。
私はこれを達成するために、より賢いアルゴリズムとより賢いデータベースを受け入れていますが、それをアルゴリズム的に行うことで、MySQL または PostgreSQL にすべてを保持できるようにすることで、私の人生はずっと楽になります。私が言える唯一のことは、データが持続する必要があるということです。
さらに詳細が役立つ場合は、お気軽にお問い合わせください。どんな支援も大歓迎です!