2017-09-02 14 views
2

私は推薦システムに取り組んでいます。ユーザーが自分の設定を入力し、その設定に基づいて他の一致するプロファイルがそのユーザーに表示されるAndroidアプリケーションです。私はユーザーからデータを取得し、Firebaseに保存しています。ストラテジーデザインパターンの実装方法は?

これらは数値であり、そのユーザーに合わせたプロファイルを示すために、私は、ユーザ間の類似数を計算するための2つのアルゴリズムを使用しています:Cosine similarityPearson correlation

私はアルゴリズムの名前を取得していますアプリケーションと類似のプロファイルを表示するためにアルゴリズムを実行します。

if (request.query.algo === "cosine") { 
    // compute cosine value 
} 
else if (request.query.algo === "pearson-correlation") { 
    // compute pearson correlation coefficents 

} 

そう、この方法は完全に間違っているリアルタイムアプリケーションだろうと、私はアルゴリズムが実行時にではなく、コンパイル時に決定することができ戦略のデザインパターンを実装したいです。

これで問題は、ストラテジーデザインパターンでは、いつどのアルゴリズムを使用するかを決めるのですか?

たとえば、クレジットカードで何かを購入した場合、クレジットカードの種類は問題になりません。すべてのクレジットカードには情報が暗号化された磁気ストリップがあります。ストリップとそれに含まれる内容は「インターフェース」を表し、カードのタイプは「実装」です。各クレジットカードは他のクレジットカードに置き換えることができ、すべてが互いに完全に独立しています。

同様に、実行時にCosineとPearsonの間で戦略設計パターンを選択する必要があるベースは?

+0

なぜこの方法が間違っていますか?これは依頼に依存しているので、これは実行時にまだchosing戦略です – ByeBye

答えて

0

私の理解から、ピアソンは、2つのユーザープロファイルが非常に異なる項目セット(この場合はプリファレンス)を持つ場合に悪化します。

おそらくそれがあなたの基準になる可能性がありますか?一致する嗜好の数が特定の閾値を上回る場合、Pearsonを使用し、他の場合は余弦を使用します。

あなたのユーザーにはおそらくコサインを使用してプロファイルの共通点が多いユーザーを示すCLOSE一致リストを表示できます。

次に、ピアソンを使って共通の好みを持たない一致するプロファイルを表示する、興味深いかもしれないという2番目のリストを表示できます。

+0

あなたの答えをありがとう。あなたは、戦略設計パターンを実装するための基準としてしきい値を考慮する必要があると言います。たとえば、私は両者から得た結果を分析した後、ピアソンの場合0.2の閾値が完全な結果を与え、余弦では0.9の閾値が完全な結果を与えることが分かった。だから私はどのようにこれらのしきい値に基づいてSDPを実装することができますか?この点について簡単に説明してください。 –

+0

私はあなたのクラスをよりよく見て、それを手伝うことができます。 しかし、物の見た目では、工場のデザインパターンがそのパターンに適しているかもしれません。ファクトリを呼び出すだけで、プロファイルの一致度が与えられ、ファクトリは使用する必要がある適切なアルゴリズムを返すことができます。 –

+0

おそらく、入力として比較戦略を持つProfileComparatorインターフェースを保持することができます。次に、それをCosineProfileComparatorとPearsonProfileComparatorに拡張することができます。ここで、近くのマッチのリストを返すと、CoscomComatorと、PearsonComparator –

関連する問題