在用户配置文件中规范化0到1之间的数字

时间:2014-02-09 06:55:46

标签: math

我正在处理用户配置文件,其中用户配置文件中存在的每个术语都具有权重,并且根据一系列因素(例如,持续时间,访问总数等等)制定权重,我需要规范化它们的求和结果为0到1之间的数字,我执行了这个等式:

(x+y+z+......)/100

其中x,y和z是因子。我已经向我自己建议了这个等式(对不起,我在数学方面不是很好:(),但不幸的是它返回的值超过1,所以有什么办法可以用来限制结果总和在0和1之间?

非常感谢提前。

2 个答案:

答案 0 :(得分:2)

好的,一般来说,为了规范化,这就是你要做的事情:

  1. 找到绝对最小值,然后从您的数字中减去该值。 (这可能是0,在这种情况下,您可以跳过此步骤。)
  2. 找到绝对最大值。步骤1之后的总范围将为0 ..(最大值 - 最小值)。将您的数字除以此值,一切都将在0..1。
  3. 的范围内

    要旋转它,你会反过来:取你的标准化数字,乘以范围(即最大 - 最小),然后再加上最小值。

    您遇到问题的原因是因为x + y + z + ...的范围不是100。

    示例

    如果x的范围为0-10,则y的范围为15-25,z的范围为10-25,您的特定值为x = 8,y = 17,z = 12:

    x + y + z = 8 + 17 + 12 = 37
    min = 0 + 15 + 10 = 25
    max = 10 + 25 + 25 = 60
    
    so your normalized value is calculated by doing: 
    (37 - 25) / (60 - 25) = (12 / 35) = 0.342857 (approximately).
    

    要从标准化数字返回到复合数字,请执行相反的操作:

    0.342857 * 35 = 11.999995 = 12 once rounded.
    12 + 25 = 37
    

答案 1 :(得分:1)

如果您的变量无限制,则没有人可以达到标准化值1,因为如果某人达到1,则另一个具有较大因子的人将超过1。

这就是说,您可以使用将[0 +inf[映射到[0 1[的函数转换每个因子,例如X/(X+a)1-2^(-X/a),其中a是一些缩放常数(由你选择)。您将此变换应用于各个因子并对其进行平均,或者仅将其应用于全局总和。