将数据规范化为 [-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 )
我想你会期待这样的结果
您正在做的是使用您的 min
和 max
并假设这是您工作的范围。然后压缩所有值 并移动 使它们适合 [-1, 1] 范围。
问题是:当极值与 0 的距离不同时,您将不得不移动,这将移动所有零。这在数学上是正确的,因为它保留了分布。
比如说,对于序列 [-1, 0, 2]
,极值是 -1
和 2
。操作后,它将变为 [-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]
我有一系列 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 )
我想你会期待这样的结果
您正在做的是使用您的 min
和 max
并假设这是您工作的范围。然后压缩所有值 并移动 使它们适合 [-1, 1] 范围。
问题是:当极值与 0 的距离不同时,您将不得不移动,这将移动所有零。这在数学上是正确的,因为它保留了分布。
比如说,对于序列 [-1, 0, 2]
,极值是 -1
和 2
。操作后,它将变为 [-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]