Tanimoto係数を使用して、同じ好みを持つ人々を検索する

「集合的な心のプログラミング」という本の演習を解き、この本で言及されているアルゴリズムの1つの実装を共有することにしました(第2章-演習1)。



初期条件は次のとおりです。重要な評価を持つ辞書があるとします。



評論家= { 「リサローズ」{ 「スーパーマンリターンズ」3.5「あなた、私とデュプリー」2.5「ナイトリスナー」3.0 }

「ジーンシーモア」{ 「スーパーマンリターンズ」5.0「ナイトリスナー」3.5「あなた、私、デュプリー」3.5 } }


スコアが高いほど、映画が好きになります。

たとえば、一方の評価に基づいて他方の映画を推薦できるようにするために、批評家の関心はどれだけ似ているかを計算する必要があります。







係数谷本-2つのセットの類似度を記述します。 インターネット上で、計算式のいくつかのオプションを見つけました。 そして、私は次のことに専念することにしました。



ここで、kはタニモト係数(0から1までの数)であり、1に近いほどセットは類似しています。

aは、最初のセットの要素の数です。

bは、2番目のセットの要素の数です。

cは、2セットの共通要素の数です。

次に、2人の批評家の評価を比較する必要があります。

1つのポイントを明確にしたいだけです。 2つのセットで共通の要素と見なすべきものは何ですか? 現在の形式で評価を提示しても、同様の関心を持つ人々を正確に特定できないことは明らかです。 実際、本質的に、このアルゴリズムの3.5と4.0の同じ評価は完全に異なる数値です。 そのため、評価オプションの数が2〜3以下の場合、Tanimoto係数を使用する必要があります(たとえば、「気に入った、気に入らなかった」、「お勧め、見なかった、お勧めしません」)。評価に次の変換を適用しました。評価が3未満の場合、映画は高評価されませんでした(評価は-0になります)。それ以外の場合は評価されました(評価は-1になります)。 この形式のデータは、実験に適しています。

def prepare_for_tanimoto critics_arr

arr = critics_arr。 コピー

arrの評論家向け

arr [ critic ]の映画の場合:

arr [批評家] [映画] < 3の場合

arr [評論家] [映画] = 0

その他

arr [評論家] [映画] = 1

返却


出力では、次の辞書を取得します。



評論家= { 「リサローズ」{ 「スーパーマンリターンズ」1「あなた、私とデュプリー」0「ナイトリスナー」1 }

'Gene Seymour'{ 「スーパーマンリターンズ」1「ナイトリスナー」1「あなた、私とデュプリー」1 } }


次に、2人の評論家の評価の類似度係数を計算する関数を作成します。



def tanimoto critics_arr、critic1、critic2

arr = prepare_for_tanimoto critics_arr



a = len arr [ critic1 ]

b = len arr [ critic2 ]

c = 0.0



arr [ critic1 ]の映画の場合:

if arr [ critic1 ] [ film ] == arr [ critic2 ] [ film ]

c = c + 1



koef = c / a + b-c

戻りケーフ




tanimoto関数の機能を確認してください。



>>>プリントタニモト(評論家、「ジーンシーモア」、「リサローズ」)

>>> 0.5



私の意見では、結果は正しいです。 各評論家の評価数が増えると、類似度係数の計算の精度が向上することに注意してください。



評価のデータベースがあれば、人々の興味の類似性の係数を計算し、タニモト法に関する推奨事項を提示し始めることができます。



サンプルテキストはこちらからダウンロードできます。

著者のウェブサイトの本からすべての例の全文をダウンロードできます。 そこには、重要な評価を持つより完全な配列があります。



All Articles