2017-09-02 109 views
2

我正在使用推荐系统。这将是一个Android应用程序,用户将在其中输入他们的偏好,并在这些偏好的基础上,向该用户显示其他匹配的简档。我从用户那里获取数据并将其存储在Firebase中。如何实施策略设计模式?

这些是数值和为了显示匹配的简档与该用户,我使用用于计算用户之间的相似性计数两种算法:Cosine similarityPearson correlation

我撷取算法的名称从应用程序,然后执行算法,以显示相似的配置文件给用户。

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

} 

因为这将是一个实时应用,因此这种方法是完全错误的,我想实现战略设计模式,其中的算法可以在运行时,而不是在编译时决定。

所以现在的问题是,在策略设计模式中,我将如何决定何时使用哪种算法?

例如,当您用信用卡购买东西时,信用卡类型无关紧要。所有信用卡都有一个磁条,其中编码了信息。条和它包含的内容代表'接口',卡的类型将是'实现'。每张信用卡都可以被任何其他人取代,而且所有信用卡都完全相互独立。

同样,我应该在什么基础上选择余弦和皮尔森之间的运行时间与策略设计模式?

+0

为什么这种方法是错误的?这仍然是运行时选择策略,因为它取决于请求 – ByeBye

回答

0

从我对它的理解中,皮尔逊在两个用户配置文件有非常不同的项目集合(在这种情况下是首选项)的情况下表现会更差。

也许这可能是你的标准?如果匹配首选项的数量超过某个阈值,则使用Pearson,其他情况使用余弦。

你也许可以向你的用户显示一个关闭匹配列表,它使用余弦显示用户谁的配置文件有很多共同点。

然后,您可以显示第二个列表,其中显示您可能也会感兴趣,它使用Pearson显示没有大量共同偏好的匹配配置文件。

+0

谢谢你的回答。你在说我应该把门槛作为实施战略设计模式的标准。例如,我分析了他们两人的结果,然后我发现对于皮尔逊来说,0.2的阈值给出了完美的结果,而在余弦中,0.9的阈值给出了完美的结果。那么我怎么能在这些阈值的基础上实施SDP?你能简要描述一下这一点吗? –

+0

我需要更好地看看你的课程,才能够帮助你。但从外观上看,工厂设计模式可能更适合这种战略模式。您只需致电工厂即可获得配置文件之间的匹配度,然后工厂可以返回需要使用的相应算法。 –

+0

你也许可以保留一个比较策略作为输入的ProfileComparator接口。然后,您可以将其扩展到CosineProfileComparator和PearsonProfileComparator。现在,当您返回近距离匹配列表时,您可以使用CosineComparator实例化ProfileComparator,并使用PearsonComparator –