计算归一化的业力

时间:2010-01-05 06:09:57

标签: algorithm

我如何根据系统中用户的业力来计算业力的标准化值(0到1之间的值)?

标准化值应反映用户的业力相对于所有其他用户的价值。

我想我可能不得不以某种方式包括所有业力的平均和标准偏差,但我似乎无法提出正确的公式。

任何帮助?

2 个答案:

答案 0 :(得分:8)

 min_karma = min(karmas)
 max_karma = max(karmas)
 normalized = (karma - min_karma) / (max_karma - min_karma)

这具有以下属性:具有karma = min_karma的用户获得0的归一化业力,并且具有karma = max_karma的用户获得1.其他线性地分布在其间。您必须单独处理所有用户具有相同业力的特殊情况。

如果您想要非线性分布,可以使用对数函数:

 normalized = (log(karma) - log(min_karma)) / (log(max_karma) - log(min_karma))

在这种情况下,重要的是业力永远不会低于1,因为这可能会导致结果出现偏差。

答案 1 :(得分:2)

您希望计算每个用户所属的百分位数。在mysql中,你可以这样做:

http://forums.mysql.com/read.php?20,105223,105278#msg-105278

rank / total

其中rank是业力较低的用户数。