收藏夹的加权功能

时间:2010-11-02 15:10:38

标签: math

我有一个项目清单。用户偶尔可以选择它们。现在我想根据它们的受欢迎程度来订购这些物品。对此有什么好的加权功能?

约束:

  • 重量应为[0,1)
  • 优先考虑递归计算(不是必需的)
  • 较新的事件必须比旧事件具有更大的影响力。
  • 我赞成批准的功能。因为我曾经开发过这样的东西,但效果不如预期。

3 个答案:

答案 0 :(得分:3)

  

现在我想根据他们的受欢迎程度订购商品。

所以你按照一些用户选择项目的次数进行排序。

  

重量应在[0,1)

很好,除以某个用户选择某个项目加一个的总次数。

  

优先采用递归计算

为什么呢?也许我错过了你想要做的事情,因为否则这种约束对我来说就失去了。

编辑:

回复您的修改,请尝试

sum ( 1 / age of vote ) / age of item

对于给定项目的所有投票所得的总和。

答案 1 :(得分:1)

如果你有一个每个项目的投票计数器,你可以使用'衰落常数',以使旧的投票随着时间“消失”。类似的东西:

Nvotes(i) = IsClicked(i) + Nvotes(i) * Kfade

其中:0 < Kfade < 1

因此,每当拦截一个新的点击时,所有计数器都会被提前,只有所选的项目增加1。

编辑:由于总数小于1,您可能希望按目前的总点击次数对Nvotes进行标准化。

答案 2 :(得分:0)

保留需要排序的项目列表items。让每个项目都有一个分数。按照新近度降低的顺序,保留N个最近点击的列表clicks。每个项目都可以在列表中出现多次。选择一个小于1的常量fade。然后执行:

for item in items:
    item.score = 0.0
bonus = 1.0
for item in clicks:
    item.score += bonus
    bonus *= fade

现在按分数对项目进行排序,先排序最高。

得分不在0到1的范围内,但我不明白为什么你真的需要它。之后将分数标准化将是直截了当的。

这不是递归的,但是以递归形式输入是直截了当的。

这不是已知的算法。我不知道任何已知的算法,除了从前到前移动,这几乎肯定比你想要的更具侵略性。