我如何根据系统中用户的业力来计算业力的标准化值(0到1之间的值)?
标准化值应反映用户的业力相对于所有其他用户的价值。
我想我可能不得不以某种方式包括所有业力的平均和标准偏差,但我似乎无法提出正确的公式。
任何帮助?
答案 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是业力较低的用户数。