我需要在两个或更多因素上提供加权排序,按“相关性”排序。但是,这些因素并不完全独立,因为我希望其中一个或多个因素会影响其他因素的“紧急程度”(权重)。
例如:贡献内容(文章)可以被投票赞成或反对,因此具有评分;它们有发布日期,并且也被标记为类别。用户编写文章并可以投票,可能有一定的排名(专家等)。大概与StackOverflow类似,对吗?
我想为每个用户提供按标签分组但按“相关性”排序的文章列表,其中“相关性”是基于文章的评分和年龄计算的,可能受到作者排名的影响。即,一篇几年前写的高排名文章可能不像昨天写的中等排名文章那么相关。而且,如果一篇文章是由专家撰写的,那么它将被视为比由“Joe Schmoe”撰写的文章更相关。
另一个很好的例子是将酒店分配一个“元评分”,包括价格、评分和景点。
我的问题是,多因素排序的最佳算法是什么?这可能是那个问题的重复,但我对适用于任意数量因素(2-4个因素更为合理)的通用算法感兴趣,最好是“全自动”函数,不需要调整或用户输入,并且我无法解析线性代数和特征向量方程。
我找到的可能性有:
注意:S是“排序分数”。
我还发现了用于双因素加权算法的SQL实现,这基本上就是我最终需要编写的东西。
例如:贡献内容(文章)可以被投票赞成或反对,因此具有评分;它们有发布日期,并且也被标记为类别。用户编写文章并可以投票,可能有一定的排名(专家等)。大概与StackOverflow类似,对吗?
我想为每个用户提供按标签分组但按“相关性”排序的文章列表,其中“相关性”是基于文章的评分和年龄计算的,可能受到作者排名的影响。即,一篇几年前写的高排名文章可能不像昨天写的中等排名文章那么相关。而且,如果一篇文章是由专家撰写的,那么它将被视为比由“Joe Schmoe”撰写的文章更相关。
另一个很好的例子是将酒店分配一个“元评分”,包括价格、评分和景点。
我的问题是,多因素排序的最佳算法是什么?这可能是那个问题的重复,但我对适用于任意数量因素(2-4个因素更为合理)的通用算法感兴趣,最好是“全自动”函数,不需要调整或用户输入,并且我无法解析线性代数和特征向量方程。
我找到的可能性有:
注意:S是“排序分数”。
- "线性加权" - 使用类似于这样的函数:
S = (w1 * F1) + (w2 * F2) + (w3 * F3)
,其中wx
是任意指定的权重,Fx
是因素的值。您还需要归一化F
(即Fx_n = Fx / Fmax
)。我认为这有点像Lucene搜索的工作方式。 - "基数加权" - 更像是分组而不是加权,它只是一个线性加权,其中权重是10的递增倍数(类似于CSS选择器特异性),以便更重要的因素显着更高:
S = 1000 * F1 + 100 * F2 + 10 * F3 ...
。 - 估计真实值(ETV) - 这显然是Google Analytics在其报告中引入的内容,其中一个因素的价值影响(权重)另一个因素 - 结果是根据更多“统计显著性”值进行排序。链接解释得很好,因此这里只是方程式:
S = (F2 / F2_max * F1) + ((1 - (F2 / F2_max)) * F1_avg)
,其中F1
是“更重要”的因素(文章中的“跳出率”),F2
是“显著性修改”的因素(文章中的“访问次数”)。 - 贝叶斯估计 - 看起来与ETV非常相似,这是IMDb计算其评级的方法。请参见此StackOverflow帖子以获得解释;方程式:
S = (F2 / (F2+F2_lim)) * F1 + (F2_lim / (F2+F2_lim)) × F1_avg
,其中Fx
与#3相同,F2_lim
是“显着性”因素的最小阈值限制(即任何小于X的值都不应考虑)。
我还发现了用于双因素加权算法的SQL实现,这基本上就是我最终需要编写的东西。
S = (f1 * .80) + (f2 * .80)
这样的东西会发生什么? - 425nesp