我正在处理用户配置文件,其中用户配置文件中存在的每个术语都具有权重,并且根据一系列因素(例如,持续时间,访问总数等等)制定权重,我需要规范化它们的求和结果为0到1之间的数字,我执行了这个等式:
(x+y+z+......)/100
其中x,y和z是因子。我已经向我自己建议了这个等式(对不起,我在数学方面不是很好:(),但不幸的是它返回的值超过1,所以有什么办法可以用来限制结果总和在0和1之间?
非常感谢提前。
答案 0 :(得分:2)
好的,一般来说,为了规范化,这就是你要做的事情:
要旋转它,你会反过来:取你的标准化数字,乘以范围(即最大 - 最小),然后再加上最小值。
您遇到问题的原因是因为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
是一些缩放常数(由你选择)。您将此变换应用于各个因子并对其进行平均,或者仅将其应用于全局总和。