我需要对2+个因子进行加权排序,按“相关性”排序。然而,这些因素并非完全孤立,因为我希望一个或多个因素影响其他因素的“紧迫性”(权重)。
示例:贡献内容(文章)可以上/下投票,因此具有评级;他们有一个发布日期,他们也被标记为类别。用户撰写文章并可以投票,并且可能有也可能没有自己的某种排名(专家等)。可能与StackOverflow类似,对吧?
我想为每个用户提供按标签分组但按“相关性”排序的文章列表,其中相关性是根据文章的评级和年龄计算的,并且可能受到作者排名。 I.E.几年前撰写的高度评价的文章未必与昨天撰写的中等文章相关。也许如果一篇文章是由专家撰写的,那么它将被视为比“Joe Schmoe”所写的文章更具相关性。
另一个很好的例子是assigning hotels a "meta score" comprised of price, rating, and attractions。
我的问题是,多因素排序的最佳算法是什么?这可能是that question的重复,但我对任意数量因素的通用算法感兴趣(更合理的期望是2-4个因素),最好是“全自动”功能,我不喜欢t必须调整或要求用户输入,我无法解析线性代数和特征向量的古怪。
到目前为止我找到的可能性:
注意:S
是“排序分数”
S = (w1 * F1) + (w2 * F2) + (w3 * F3)
,其中wx
是任意分配的权重,Fx
是因子的值。您还需要规范化F
(即Fx_n = Fx / Fmax
)。我认为这有点Lucene search works。S = 1000 * F1 + 100 * F2 + 10 * F3 ...
。S = (F2 / F2_max * F1) + ((1 - (F2 / F2_max)) * F1_avg)
,其中F1
是“更重要”的因素(文章中的“跳出率”),F2
是“重要性修改”因素(文章中的“访问”)。S = (F2 / (F2+F2_lim)) * F1 + (F2_lim / (F2+F2_lim)) × F1_avg
,其中Fx
与#3相同,F2_lim
是“重要性”因子的最小阈值限制(即不应考虑小于X的任何值) )。选项#3或#4看起来很有前途,因为你不必像在#1和#2中那样选择任意加权方案,但问题是如何对两个以上的因素做这个?
我也遇到了SQL implementation for a two-factor weighting algorithm,这基本上是我最终需要写的。
答案 0 :(得分:6)
正如评论中所提到的,我会建议所谓的“妥协解决方案”'任何有类似问题的人更关心的是不必设置权重而不是使一个标准比其他标准更重要。
基本上,您将每个标准视为一个坐标(当然,在标准化之后)。根据您的判断,您可以选择绝对最佳点,例如:在这种情况下,最高级别的作者,最新的文章等。一旦你选择了最佳的解决方案,彼此的解决方案'根据其与最佳距离的距离进行评级。对于每篇文章的得分,样本公式将是欧几里德距离的倒数:S = 1 /(sqrt((rank-rank_ideal)^ 2 +(age-age_ideal)^ 2 + ... +(xn - xn_ideal)^ 2))。
这会将所有条件视为平等,因此请记住这一点。
答案 1 :(得分:0)
考虑权重的链接。例如。你有3个因素: X , Y 和 Z 。
您可以为每条记录计算 ETVyz 为W = (Z/Zmax * Y) + (1 - Z/Zmax) * Yavg
,然后将 ETVxw 计算为S = (W/Wmax * X) + (1 - W/Wmax) * Xavg
。
你可以链接更多相似的因素。
答案 2 :(得分:0)
@gankoji不久提出的解决方案是对TOPSIS方法的简化。
在TOPSIS中,折衷解可以看作是选择距理想解的欧氏距离最短,距负理想解的欧氏距离最远的解。
此类问题属于“ MCDM-多准则决策”一词。
Python软件包scikit-criteria和mcdm提供了大多数流行方法的实现。软件包文档链接到相应的算法论文。