8

私は、ユーザーの好みに応じてさまざまなアイテムをユーザーに推薦するコンセプトに基づいて設計されたWebサイトを設計しています。 (評価したアイテム、お気に入りリストに追加されたアイテムなど)Amazon、Movielens、Netflixの例です。コラボレーティブフィルタリング/レコメンデーションシステムの構築

私の問題は、私はこのシステムの数学的な部分に関してどこから始めるべきかわかりません。私は必要とされる数学を学びたいと思っています。それはちょうど私はどんなタイプの数学が必要なのか分かりません。

私はGrouplens.orgにある出版物のいくつか、具体的には "Towards a Scalable kNN CF Algorithm: Exploring Effective Applications of Clustering"を見てきました。 (pdf)私はページ5 "予測生成"まですべてを理解することにかなり慣れています

p.s.私は何が起こっているのか正確には分かりませんが、それは役に立つかもしれませんが、私は知る必要がある数学にもっと興味があります。このように私は何が起こっているのか理解することができます。

答えて

8

Programming Collective Intelligenceは、Pythonのサンプルコードがたくさん入っていて、実際にこのフィールドを使いやすくなっています。少なくとも、トピックに関する学術論文の数学を理解する舞台に立つのに役立ちます。

+0

書籍のご提案ありがとうございます! – John

5

Algorithm of the Intelligent Web(H Marmanis、D Babenko、Manning publishing)は、サブジェットに関する入門書です。また、概念の検索についても説明しますが、その主な焦点は分類、推薦システムなどです。これはあなたのプロジェクトに適したプライマであり、適切な質問をしたり、あなたの状況にもっと有望で実用的に見える場所を深く掘り下げたりすることができます。

本書には、関連する数学トピック(主に線形代数)の「リフレッシャー」も含まれていますが、このリフレッシャーは最小限です。あなたはウェブ上でよりうまくいくでしょう。

線形代数を発見するには、MIT OpenCourseWareで利用できるProf. Gilbert Strand's 18.06 lecture seriesに従ってください。

線型代数は、あなたはそれが有用なの分布、共分散、ベイズ推定などの基本的な統計概念をブラッシュアップするために見つけることが;-)救いへの唯一の方法ではありません...

+1

ありがとう、私は本を見てみましょう。講義シリーズに感謝します。 – John

10

私は手順を説明しましょう導入された著者(私はそれを理解できるように):

入力:

  • トレーニングデータ:ユーザー、アイテム、およびこれらの項目へのユーザーの評価(ませんすべて 項目定格は必ずしも各ユーザー)
  • ターゲットユーザー:我々は 評価を予測したい対象ユーザによる評価がありませんアイテム:一部のアイテムのいくつかの評価
  • 対象項目持つ新しいユーザーそれのための。

出力:

  • 対象ユーザによる目標項目の予測

これはアイテムの束のために繰り返すことができ、その後、我々は(N-トップのアイテムを返します予測最高値)

手順:
このアルゴリズムは、ナイーブなKNNメソッドと非常によく似ています(すべてのトレーニングデータを検索して、ターゲットユーザーと同様の評価を持つユーザーを見つけ、評価を組み合わせて[投票])。
この単純な方法では、ユーザー/アイテムの数が増えても、あまり拡張できません。

提案されたアルゴリズムは、最初K < < NNユーザの総数である)K基(同様の項目を評価し、人々のグループ)に訓練ユーザをクラスタリングすることです。
次に、それらのクラスタをスキャンして、ターゲットユーザーがどれに近いのかを確認します(すべてのトレーニングユーザーを見るのではなく)。
最後に、lを選択し、それらの距離で重み付けした平均値として予測を行います。lクラスタ。

使用される類似度は係数correlationであり、クラスタリングアルゴリズムは二分法K-Meansアルゴリズムであることに注意してください。単純に標準kmeansを使用することができ、Euclidean distanceやコサイン距離のような他の類似性メトリックも使用できます。

5ページの最初の式は、相関の定義されています。これは、物事を少し明確に

predRating = sum_i(rating_i * corr(target,user_i))/sum(corr(target,user_i)) 
       where i loops over the selected top-l clusters 

ホープ:)

:二式は基本的加重平均である

corr(x,y) = (x-mean(x))(y-mean(y))/std(x)*std(y) 

+1

ありがとう、それはまだ私にとってギリシャ語です。ある日、私は戻ってきて、それはすべて意味をなさないでしょう。 :) – John

0

あなたはおそらく知っているべきです:

  • 線形代数
  • 人工知能/機械学習/統計情報があると便利

  • 距離空間
  • トポロジ
  • EDA /堅牢な統計
  • アフィン代数
  • 機能解析言っ

  • グラフ理論、あなただけの常識で遠くに行くことができます。システムで満足させるプロパティのリストがある場合は、それらのプロパティを満たすコードを書くだけで多くのことができます。

    例としては、次のようになります。

    • スコアは単調に我々が持っている、X、YのためのオープンZの改善案をドアを保つ
    • いくつかのパラメータに増加している「悪い」勧告を行うことはありませんラインを下ろす。 Abracadabra Recommender APIthe official documentationから
  • 0

    、あなたは間を区別して起動します。

    • 科目:これらは、ユーザーにお勧めしたいエンティティです。映画や記事は、たとえば主題です。被験者は、様々な被験者の間でそれらを区別する特定の属性または内容を有することを特徴とする。

    • 属性::属性は、サブジェクトの特性の総称です。これは何でもかまいませんし、それは実際にあなたがどのように被写体を定義するかにもよります。サブジェクトが映画である例では、属性はジャンルとすることができる。冒険、アクション、SF。属性は、この映画の説明、俳優名、映画が公開された年などのキーワードでもあります。名前を付けましょう!

    • ユーザー:名前が示すとおり、これは特定の科目の推奨を受けたい人です。ユーザーは、属性またはサブジェクト(およびその後に接続された属性)を好みにしてユーザープロファイルを作成します。

    • フロー 推薦システムのいずれかのタイプに関連し、それはまた、直感的に理解することは簡単である一般的なフロー(ものが行われているため)があります。

    私たちが常にやる必要があることは、件名とそれに対応する属性を推奨エンジンに入力することです。通常これは一度だけ行う必要がありますが、動的に行うこともできます。たとえば、記事を推薦している場合、記事があなたのウェブサイトやブログに追加されるたびにこれを行うことができます。

    第2ステップでは、ユーザーの設定を入力します。ユーザーの一意のIDとともに、特定の件名や属性を好き嫌いを付けて推薦システムを鍛えることができます。例えば、ユーザには映画のリストが示され、各映画に評価を与えるオプションが与えられる。あるいは、ユーザは、彼が好む属性(例えば、どのジャンル、キーワード、リリース日など)を入力することによってプロフィールを構築してもよい。この部分は、実際にあなたのプロジェクトの論理と決定に依存します。

    システムが訓練されている(科目とユーザーの設定で満たされている)と、エンジンを呼び出して推奨事項を提供することができます。これを1回だけ行うこともできますが、動的に行うこともできます(したがって、ユーザーからフィードバックを受け取るたびにモデルを再学習します)。ユーザがより多くのフィードバックを提供するにつれて、モデルはより良くなり、推奨はユーザの実際の好みに近づく。

    Abracadabra Recommender APIでは、モデルをトレーニングし、推奨事項を受け取るために、HTTP呼び出しをAPIに送信するだけで済みます。 APIは、ウェブサイトやアプリ(Angular、React、Javascript ...)やサーバー(NodeJS、Curl、Java、Python、Objective-C、Ruby、.NETなど)から任意の言語を使用してアクセスできます。 。