我正在开发一个推荐系统。这将是一个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
}由于这将是一个实时应用程序,所以这种方法是完全错误的,我想实现策略设计模式,其中算法可以在运行时而不是编译时决定。
所以现在的问题是,在策略设计模式中,我如何决定何时使用哪种算法?
例如,当你用信用卡买东西时,信用卡的类型并不重要。所有的信用卡都有一个磁条,里面有编码信息。条带及其包含的内容表示“接口”,卡的类型将是“实现”。每一张信用卡都可以被任何其他信用卡取代,所有信用卡都是完全相互独立的。
同样,我应该在运行时和策略设计模式的余弦和皮尔逊之间做出选择的依据是什么?
发布于 2017-09-03 03:55:54
根据我的理解,在两个用户配置文件具有非常不同的项目集(在这种情况下是首选项)的情况下,Pearson的表现会更差。
也许这可以成为你的标准?在匹配偏好的数量超过某个阈值的情况下,使用Pearson,对于其他情况,使用余弦。
你也许可以给你的用户显示一个接近匹配的列表,它使用余弦来显示哪些用户的配置文件有很多共同之处。
然后,您可以显示第二个列表,该列表表明您可能也会感兴趣,该列表使用Pearson显示没有太多共同偏好的匹配配置文件。
https://stackoverflow.com/questions/46017573
复制相似问题