我需要提供 2+ 个因素的加权排序,按“相关性”排序。但是,这些因素并不是完全孤立的,因为我希望一个或多个因素影响其他因素的“紧迫性”(权重)。
示例:贡献的内容(文章)可以被向上/向下投票,因此具有评级;他们有一个发布日期,并且还带有类别标签。用户撰写文章并可以投票,并且他们自己可能有也可能没有某种排名(专家等)。可能类似于 StackOverflow,对吧?
我想为每个用户提供按标签分组但按“相关性”排序的文章列表,其中相关性是根据文章的评分和年龄计算的,并且可能受作者排名的影响。IE 几年前写的高排名文章可能不一定像昨天写的中等排名文章那样相关。也许如果一篇文章是由专家写的,它会被视为比“Joe Schmoe”写的更相关。
另一个很好的例子是为酒店分配一个由价格、评级和景点组成的“元分数”。
我的问题是,多因素排序的最佳算法是什么?这可能是该问题的重复,但我对任何数量的因素(更合理的预期是 2-4 个因素)的通用算法感兴趣,最好是我不需要的“全自动”功能调整或要求用户输入,我无法解析线性代数和特征向量的古怪。
到目前为止我发现的可能性:
注:S
是“排序分数”
- “线性加权” - 使用类似的函数:,其中是任意分配的权重,并且是因子的值。您还想规范化(即)。我认为这有点像Lucene 搜索的工作原理。
S = (w1 * F1) + (w2 * F2) + (w3 * F3)
wx
Fx
F
Fx_n = Fx / Fmax
- “Base-N weighted” - 更像是分组而不是加权,它只是一个线性加权,其中权重以 base-10 的倍数增加(与CSS 选择器特异性相似的原理),因此更重要的因素显着更高: .
S = 1000 * F1 + 100 * F2 + 10 * F3 ...
- 估计真实价值(ETV) ——这显然是谷歌分析在他们的报告中引入的,其中一个因素的价值影响(权重)另一个因素——结果是对更“统计显着”的值进行排序。该链接很好地解释了它,所以这只是等式: ,其中“更重要”的因素(文章中的“跳出率”)是“显着性修改”因素(文章中的“访问”)。
S = (F2 / F2_max * F1) + ((1 - (F2 / F2_max)) * F1_avg)
F1
F2
- 贝叶斯估计- 看起来与 ETV 非常相似,这就是 IMDb 计算其评级的方式。有关解释,请参阅此 StackOverflow 帖子;equation: ,其中与#3 相同,并且是“显着性”因子的最小阈值限制(即不应考虑小于 X 的任何值)。
S = (F2 / (F2+F2_lim)) * F1 + (F2_lim / (F2+F2_lim)) × F1_avg
Fx
F2_lim
选项 #3 或 #4 看起来很有希望,因为您不必像在 #1 和 #2 中那样选择任意加权方案,但问题是如何针对两个以上的因素进行此操作?
我还遇到了两因素加权算法的 SQL 实现,这基本上是我最终需要编写的。