不会返回0

时间:2017-12-15 07:52:26

标签: function math formula

我正在编写一个公式,用作给定值的衰减乘数。 问题如下:我有一个处理窗口 - 天可以说10,这个窗口每天都会重新计算。我需要使用反映id存在的天数的因子来衰减某个参数。目前我所做的是(previousWinSize-(start of the current window-start of the previous window))/previousWinSize 在这种情况下,如果我之前的窗口大小是10,并且处理天数的差异是2(10-2)/ 10,这给我0.8乘以我的变量并分别衰减.2。 然而,如果我有一个3天的窗口,并且再次有2天的差异(3-2)/ 3我得到接近0的值,这比我想要的更多。 我正在寻找一个公式,当数字很小时会更好地扩展,并且不会产生巨大的衰减因子。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我建议使用sigmoid函数,例如

您可以获取函数的输出,即根据处理天数的不同返回0到1之间的数字,并将其输入sigmoid。如果正确设置a(斜率)和b(拐点)参数,例如,可以确保当原始方程返回接近0的数字时,得到的最低衰减乘数为~0.5。

我画了上面我上面说的例子: https://www.desmos.com/calculator/nqemuexjhg (这基于:https://www.desmos.com/calculator/rna4aqta0c

我认为你使用这种方法确实有两个边缘情况。当你的等式返回0时,sigmoid并不会给你0.5(你甚至可能不想开始),你最终会得到接近0.5的东西。在这种情况下,如果继续应用sigmoid,你可能会开始看到你的值漂移。当你的等式返回1时也是如此。在通过sigmoid之后你不会得到1,你会得到接近1的东西。

我认为在这种情况下我会做的是在sigmoid应用之前进行某种检查 e.g。

if(x == 0)
    y = 0;
else if(x == 1)
    y = 1;
else
    y = sigmoid(x);

来源/可能进一步阅读: https://en.wikipedia.org/wiki/Sigmoid_function