将数据规范化为 [-1 and 1] ,但需要保留 0 值

Normalising data to [-1 and 1] , but 0 value needs to be preserved

我有一系列 r=data,既有正值也有负值。我想将其标准化为 [-1,1] 范围。

我用过 apply(lambda x: -1 + (2*((x - x.min()) / (x.max() - x.min())))) 将数据从 -1 归一化为 1,但在我的数据中 0 很重要,因此我想保留它。

我该如何完成?

使用 numpy 你可以做到这一点

输入:

r =(-5,-10,0,1,17)

import numpy as np
normalized = np.where(r>0,r/r.max(),np.where(r<0,-r/r.min(),r))

输出:

normalized = (-0.5 ,-1 ,0 ,0.0588235,1 )

我想你会期待这样的结果

您正在做的是使用您的 minmax 并假设这是您工作的范围。然后压缩所有值 并移动 使它们适合 [-1, 1] 范围。

问题是:当极值与 0 的距离不同时,您将不得不移动,这将移动所有零。这在数学上是正确的,因为它保留了分布。

比如说,对于序列 [-1, 0, 2],极值是 -12。操作后,它将变为 [-1, -0.66, 1].

为了解决这个问题,您必须假设您工作的范围与两侧的零距离相等。所以那将是你的最大极值。在上面的例子中是 2。现在,如果您假设您在 [-2, 2] 范围内工作,您的序列将变为 [-0.5, 0, 1].

只需将所有项目除以最大极值即可轻松实现。

def normalize(seq):
    extremum = max(abs(i) for i in seq)
    return [i / extremum for i in seq]