我正在寻找一种算法,该算法可以通过较大的系数缩放较大的离群值并仅缩放较小的数字(或者事件使它们与以前相同)。我们不必保持精确的比例,但只是一个想法,即大数仍然大于小数。
例如我有一组 10、15、200。 让我们分别将最小值和最大值定义为 0 和 100,并且缩放值应在该集合内(最小值和最大值未预定义,可以调整)。 使用该算法,我们可以将它们缩放到 5、6、20。
关于如何缩放这些数字的公式有什么想法吗?
我的用例是 3 个重叠集的维恩图数据。我想保留大集比小集大的事实,但大圆不应该比小圆大 20 倍。
最佳答案
您没有提供足够的细节来给出具体建议,但总的想法是您希望显着降低幅度。一般情况下,我们会通过以下方式处理此问题:
- 平方根(或其他分数根)
- log(基础并不重要;根据需要扩展)
- arcTan(将结果限制在0-1的范围内)
玩一些你不寻常的案例,看看你喜欢哪个。您发布的示例最接近 sqrt 想法。
评论后更新
如果这用于选择维恩图中圆的半径,那么 sqrt
确实是保留对大小(来自面积)的认知解释的自然选择。这适用于任何 2D 缩放——尽管请注意,对带有阴影的图片(暗示 3D)执行此操作表明立方根将是合适的比例。 (引用:如何使用统计数据说谎)。
在输入量级非常不同的情况下,这有时是不可能的。例如给定 (1, 1000, 1000000),您可能想要使用更高的根,或更改为对数,只是为了使最小的形状易于处理。
关于按大因子缩放大数和按小因子缩放小数的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48431809/