2

私はRailsアプリケーションを構築しています。これは、教師に学生を推奨し、その逆もあります。私はそれらの専攻(数学、生物学など)、経験(中学生など)、クラス(数学201など)、嗜好(自己記述キーワード)および評価などの複数の次元に基づいてそれらを一致させる必要があります。コラボレーティブまたは構造化の推奨?

いくつかのRailsコラボレーション推奨エンジン(推奨、おすすめ)とMahoutをチェックアウトしました。より構造化されたクエリを可能にするもっと構造化されたデータがあるので、私の場合は共同推奨が最善の選択ではないようです。私の質問があり

if student looks for a Math tutor in Math 201: 
    if there's a tutor in Math major offering tutoring in Math 201 then return 
    else if there's a tutor in Math major then sort by experience then return 
    else if there's a tutor in quantitative major then sort by experience then return 
    ... 

:共同の推薦アルゴリズムの利点は、私の推薦システムはpreference-になることを与えている何

  1. 例えば、私のような学生のための推奨ロジックを持つことができますベース?

  2. 重要な利点がある場合は、上記のように優先度ベースの推奨とどのように組み合わせることができますか?

  3. 私のアプローチでは、複数のテーブルをクエリするため、効率的でない可能性があります。これについて何をすべきですか?

ありがとうございます。

答えて

4

あなたの互換性の測定値は、metricとして有益に改訂される可能性があります。あなたがしなければならないことは、あなたのデータの次元の異なるコンポーネントであるとあなたの `列 'を解釈しようとすることです。この考え方は、最終的に生徒と教師(そして学生/生徒と教師/教師)との間の互換性の測定値を返すバイナリ関数を生成する必要があるということです。すべてのタイプのデータには、このメトリックを拡張するための動機は、あなたが最近傍検索として、あなたの一致基準を再定式ためにこのアイデアを使用することができるということです。

http://en.wikipedia.org/wiki/Nearest_neighbor_search

データ構造とソリューションの多くはこれにあります。問題は非常によく研究されているので。たとえば、あなたは多くの場合、点群データで使用される次のライブラリを試してみることができます:

http://www.cs.umd.edu/~mount/ANN/

物事を少し最適化するために、また、あなたのデータセットに主成分分析を実行して、データをプリフィルタリング試みることができます。これにより、最近傍探索を行う空間の次元を減らすことができ、通常はある程度のノイズを減らすという利点があります。

http://en.wikipedia.org/wiki/Principal_component_analysis

幸運!

+0

ありがとう、百万、ミコラ! – AdamNYC

3

個人的には、協調フィルタリング(cf)がうまくいくと思います。 cfの中心的な考え方は、です。これは、セレンディピティです。言い換えれば、制約をあまりにも多く追加すると、潜在的にユーザーに控えめな推奨がもたらされる可能性があります。 cfの全体のポイントは、類似のユーザーに基づく刺激的で関連性のある推奨を提供することです。そのような厳しい制約を課す必要はありません。

カスタムcfアルゴリズムの実装を決める場合は、Amazonの推奨システムについて説明しているAmazon [pdf]で公開されているこの記事を読むことをお勧めします。簡単に説明すると、使用するアルゴリズムは次のとおりです。

for each item I1 
    for each customer C who bought I1 
     for each I2 bought by a customer 
      record purchase C{I1, I2} 
    for each item I2 
     calculate sim(I1, I2) 
     //this could use your own similarity measure, e.g., cosine based 
     //similarity, sim(A, B) = cos(A, B) = (A . B)/(|A| |B|) where A 
     //and B are vectors(items, or courses in your case) and the dimensions 
     //are customers 
return table 

このテーブルの作成はオフラインで行われます。オンラインアルゴリズムは、推奨事項を迅速に返すでしょう。明らかに、推奨品質は優れています。

どのような場合でも、cfに関する一般的な考え方(さまざまなcf戦略など)とそれがあなたに適している理由を知りたい場合は、その記事を参照してください(心配しないでください。 )。シンプルなcf recommendenderの実装は難しくありません。最適化は後で行うことができます。

関連する問題