他のユーザーの好みに基づいて、ユーザーが望むものを見つけるアルゴリズム
-
05-07-2019 - |
質問
家族の好みに基づいてHTPCで映画を分類するアプリを書くことを考えています。
統計やAIについては知りませんが、こちらは非常にジューシーです。どこから始めればいいのかわかりません。
達成したいことは次のとおりです。
-
各ユーザーのお気に入りからサンプルのセットを作成し、各サンプル属性を個別に評価します。たとえば、ユーザーは西洋映画が好きな場合があるため、西洋のジャンルはそのユーザー(俳優、監督などの他の属性など)にもう少し重みを持ちます。
-
ユーザーは、他のユーザーの好みに基づいて提案を取得できます。たとえば、ユーザーAとBの両方がスピルバーグ(ユーザー間の接続)を好み、ユーザーBがバットマンビギンズを愛しているが、ユーザーAがケイティホームズを嫌う場合、ユーザーAの映画をそれに応じて計量します(ここでも、たとえば、各属性は別々に、ユーザーAはアクション映画があまり好きではないので、評価を少し下げます。ケイティホームズはメインスターではないので、他の属性と同じように考慮しないでください。
基本的には、ユーザーBのセットと同様にユーザーAのセットを比較し、ユーザーAの評価を出します。
これを実装する方法についてはおおまかな考えがありますが、一部の優秀な人はすでにはるかに優れたソリューションをすでに考えていると確信しているので、...提案はありますか?
実際、簡単な調査の結果、ベイジアンフィルターが機能すると思われます。もしそうなら、これはより良いアプローチでしょうか? 「正規化」と同じくらい簡単ですか?映画データ、各ユーザーの分類子のトレーニング、および各映画の分類のみ
あなたの提案にいくつかの脳融解の概念が含まれている場合(私はこれらの主題、特にAIでは経験がありません)、肉付きのものに飛び込む前に私が研究するための基本的なリストも含めていただければ幸いです。
ありがとう!
解決
これに適したアルゴリズムがいくつかあります:
ARTMAP:互いに確率でグループ化します(これは高速ではありませんが、問題のIMOに最適です)
ARTMAPは、共通の属性のグループを保持し、パーセンテージによって類似性の可能性を決定します。 ARTMAP
KMeans:これは、ベクトルが互いに離れている距離でベクトルを分離します KMeans:Wikipedia
PCA:すべての値の平均を変動ビットから分離します。これは、コンピュータビジョンで顔の検出と背景の減算を行うために使用するものです。 PCA
他のヒント
Matthew Podwysockiにはこの件に関する興味深い記事がありました
これはこの質問に似ています推奨システムを構築したかった。簡単に言うと、映画に対するユーザーの評価(1〜5つ星の評価など)と各映画の属性(年、ジャンル、俳優など)からなるトレーニングデータのセットが提供されます。レコメンダーを作成して、目に見えない映画に可能な評価を出力するようにします。したがって、inptデータは次のようになります。
user movie year genre ... | rating
---------------------------------------------
1 1 2006 action | 5
3 2 2008 drama | 3.5
...
および未評価の映画Xの場合:
10 20 2009 drama ?
評価を予測したい。これをすべての未表示の映画に対して行い、予測される映画の評価でソートし、上位10を出力すると、推奨システムが得られます。
最も簡単なアプローチは、 k-nearest neighbor アルゴリズムを使用することです。評価された映画の中で、「最も近い」を検索します。を映画Xに追加し、評価を組み合わせて予測を作成します。 このアプローチには、非常にシンプルから簡単に実装できるという利点があります。
他のより洗練されたアプローチが存在します。たとえば、デシジョンツリーを構築し、トレーニングデータに一連のルールを適合させることができます。 ベイジアンネットワーク、人工ニューラルネットワーク、サポートベクターマシン、他の多くの...適切な背景のない人にとっては、これらのそれぞれを簡単にたどることはできません。 それでも、私はあなたが外部ツール/ライブラリを使用することを期待しています。これで、Bayesian Networksに精通しているように見えるので、単純な単純なBayesネットは、実際には非常に強力です。利点の1つは、欠落データの下で予測できることです。
主なアイデアは多少同じです。持っている入力データを取得し、モデルをトレーニングし、それを使用して新しいインスタンスのクラスを予測します。
プログラミングを必要としないシンプルで直感的なパッケージでさまざまなアルゴリズムを試してみたい場合は、 Weka (私の最初の選択肢)、オレンジ 、または RapidMiner 。最も難しい部分は、必要な形式にデータセットを準備することです。残りは、どのアルゴリズムを選択して適用するのと同じくらい簡単です(すべて数クリックで!)
詳細を詳しく説明したくない人は、直観的で実装が簡単なので、最近傍法を使用することをお勧めします。 Weka (または他のツールの1つ)を調べる価値があります。
K最近傍アルゴリズムはあなたの路地のすぐ上にあるかもしれません。