我正在研究推荐系统。它将是一个Android应用程序,用户将在其中输入他们的首选项,并根据这些首选项,将向该用户显示其他匹配的配置文件。我从用户那里获取数据并将其存储在Firebase中。
这些是数值,为了向该用户显示匹配的配置文件,我使用两种算法来计算用户之间的相似性计数:Cosine similarity
和Pearson correlation
我从应用程序中获取算法的名称,然后执行算法以向用户显示类似的配置文件。
if (request.query.algo === "cosine") {
// compute cosine value
}
else if (request.query.algo === "pearson-correlation") {
// compute pearson correlation coefficents
}
因为它是一个实时应用程序,所以这个方法是完全错误的,我想实现策略设计模式,其中算法可以在运行时而不是在编译时决定。
所以现在的问题是,在策略设计模式中,我如何决定何时使用哪种算法?
例如,当您使用信用卡购物时,信用卡的类型并不重要。所有信用卡都有一个磁条,其中包含编码信息。条带及其包含的内容代表了界面'卡的类型将是'实施'。每张信用卡都可以被任何其他信用卡取代,并且所有信用卡完全相互独立。
同样,我应该根据战略设计模式在运行时间选择Cosine和Pearson之间的基础?
答案 0 :(得分:0)
根据我对它的理解,Pearson在两个用户配置文件具有非常不同的项目集(在这种情况下是首选项)的情况下会表现更差。
也许那可能是你的标准?如果匹配首选项的数量超过某个阈值,请使用Pearson,对于其他情况使用余弦。
您或许可以向您的用户显示一个CLOSE匹配列表,该列表使用余弦来显示配置文件有很多共同点的用户。
然后你可以显示第二个列表,其中表示你可能也感兴趣,它使用Pearson来显示没有很多共同偏好的匹配配置文件。