不会的函数 return 0

Function that will not return 0

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

提前致谢。

我建议使用 sigmoid 函数,例如

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

我已经将我上面提到的示例绘制成图表: https://www.desmos.com/calculator/nqemuexjhg (这是基于:https://www.desmos.com/calculator/rna4aqta0c

我认为您确实有两种使用此方法的极端情况。当您的等式 returns 0 时,S 型曲线不会完全给您 0.5(您甚至可能不想开始),您最终会得到接近 0.5 的值。在这种情况下,如果您继续应用 sigmoid,您可能会开始看到您的值在漂移。当你的等式 returns 1 时也是如此。通过 sigmoid 后你不会得到 1,你会得到接近 1 的东西。

我认为在这种情况下我会做的是在应用 sigmoid 之前进行某种检查 例如

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

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