Algorithm 计算归一化业力
如何根据系统中用户的业力计算业力的标准化值(值介于0和1之间) 标准化值应反映用户相对于所有其他用户的业力值 我想我可能不得不以某种方式包括所有业力的平均值和标准差,但我似乎无法得出正确的公式Algorithm 计算归一化业力,algorithm,Algorithm,如何根据系统中用户的业力计算业力的标准化值(值介于0和1之间) 标准化值应反映用户相对于所有其他用户的业力值 我想我可能不得不以某种方式包括所有业力的平均值和标准差,但我似乎无法得出正确的公式 有什么帮助吗?您需要计算每个用户所属的百分比。在mysql中,您可以这样做: 其中rank是业力较低的用户数 min_karma = min(karmas) max_karma = max(karmas) normalized = (karma - min_karma) / (max_karma
有什么帮助吗?您需要计算每个用户所属的百分比。在mysql中,您可以这样做: 其中rank是业力较低的用户数
min_karma = min(karmas)
max_karma = max(karmas)
normalized = (karma - min_karma) / (max_karma - min_karma)
这具有这样的属性:karma=min_karma的用户获得0的标准化karma,karma=max_karma的用户获得1。其他的则线性分布在两者之间。你必须单独处理所有用户都有相同业力的特殊情况
如果需要非线性分布,可以使用对数函数:
normalized = (log(karma) - log(min_karma)) / (log(max_karma) - log(min_karma))
在这种情况下,业力永远不能低于1是很重要的,因为这可能会扭曲结果。我不确定这是不是正确的方向。考虑这样一种情况:100个用户的低业力分布在10左右,只有1的用户有100的高业力。我希望规范化的值考虑到只有1个用户具有高业力这一事实,因此给予具有例如15个业力的用户比线性优势更好的优势。这有意义吗?此外,没有最大业力,因为某些可以不确定地完成的操作(例如为发布的评论获得高评分)会添加业力,如果您想要非线性分布,您可以取分数的对数。@EdanB:max_业力指的是当前的最大值,随着人们得到更多的业力,这些都会发生变化。我想你可能想对业力设定一个“时间”限制。这样一来,最近的人就有了业力,但两年前的人就不算了。这样一来,新人就不仅仅是永远处于底层。
normalized = (log(karma) - log(min_karma)) / (log(max_karma) - log(min_karma))