按大因子缩放大数和按小因子缩放小数的算法

Algorithm to scale large numbers by large factor and small numbers by small factor

我正在寻找一种算法,该算法可以通过较大的因子缩放较大的离群值并仅缩放较小的数字(或者事件使它们与以前相同)。我们不必保持精确的比例,但只是一个想法,即大数仍然大于小数。

例如我有一组 10、15、200。 让我们分别将最小值和最大值定义为 0 和 100,并且缩放值应在该集合内(最小值和最大值未预定义,可以调整)。 使用该算法,我们可以将它们缩放到 5、6、20。

关于如何缩放这些数字的公式有什么想法吗?

我的用例是 3 个重叠集的维恩图数据。我想保留大集比小集大的事实,但大圆不应该比小圆大 20 倍。

你没有提供足够的细节来给出具体的建议,但总体思路是你想要一些显着的震级降低。一般来说,我们用类似下面的方式来处理这个问题:

  • 平方根(或其他分数根)
  • log(基础并不重要;根据需要缩放)
  • arcTan(将结果限制在0-1范围内)

玩一些你不寻常的案例,看看你喜欢哪个。您发布的示例最接近 sqrt 想法。

评论后更新

如果这用于选择维恩图中圆的半径,那么 sqrt 确实是保留对大小(从面积)的认知解释的自然选择。这适用于任何 2D 缩放——尽管请注意,对带有阴影的图片执行此操作(implied 3D)表明 cube root 是正确的规模。 (参考:如何使用统计数据说谎)。

这有时是不可能的,在输入量级非常不同的情况下。例如给定 (1, 1000, 1000000),您可能想要使用更高的根,或更改为对数,只是为了使最小的形状易于处理。