【问题标题】:scaling data between -1 and 1 centred on zero以零为中心在 -1 和 1 之间缩放数据
【发布时间】:2017-11-14 16:10:42
【问题描述】:

对于任何不正确的措辞,请提前致歉。我没有找到答案的原因可能是因为我没有使用正确的术语。

我有一个看起来像这样的数据框

0        -0.004973    0.008638   0.000264     -0.021122   -0.017193
1        -0.003744    0.008664   0.000423     -0.021031   -0.015688
2        -0.002526    0.008688   0.000581     -0.020937   -0.014195
3        -0.001322    0.008708   0.000740     -0.020840   -0.012715
4        -0.000131    0.008725   0.000898     -0.020741   -0.011249
5         0.001044    0.008738   0.001057     -0.020639   -0.009800
6         0.002203    0.008748   0.001215     -0.020535   -0.008368
7         0.003347    0.008755   0.001373     -0.020428   -0.006952
8         0.004476    0.008758   0.001531     -0.020319   -0.005554
9         0.005589    0.008758   0.001688     -0.020208   -0.004173
10        0.006687    0.008754   0.001845     -0.020094   -0.002809
...

对于每一列,对于该列的最小值和最大值,我想将数据缩放到 -1.0 到 1.0 之间的浮点数。
我已经用scaler = MinMaxScaler(feature_range = (-1, 1)) 尝试了 scikit learn 的 minmax 缩放器,但是一些值因此改变了符号,我需要保留它。

有没有办法将缩放“集中”在零上?

【问题讨论】:

  • 我只展示数据框的一个样本,所有列都有正负值
  • 我看到你有消极和积极的价值观。你想保持0分吗?在这种情况下,只需将负数除以 df 的最小值(或行或列,无论您想标准化),正数除以最大值。
  • 谢谢@GáborErdős,这可能会成功!

标签: python pandas scikit-learn


【解决方案1】:

您是否尝试过使用 sklearn 中的 StandardScaler

它有with_meanwith_std 选项,你可以使用它们来获取你想要的数据。

【讨论】:

  • 但这会导致偶尔值大于(小于)1 (-1)。也许使用StandardScaler 后跟MinMaxScaler
  • 如果我们使用 4*sgima = 1,那么 with_std = 1/4。那么我相信它不会跨越 1 到 -1 的边界
  • 我猜可以工作,不知道这对 OP 来说是否足够好。
  • 谢谢@kppatel,你能说明我将如何使用4*sgima = 1with_std = 1/4 吗?后者用作标准缩放器的参数,但前者?
  • 如果你取4*sigma = 1,这意味着你99.9999998%的观察值将低于-1到1
【解决方案2】:

将负值缩放到列的最小值并将正值缩放到列的最大值的问题是正数的比例可能与正数的比例不同。如果您想对负值和正值使用相同的比例,请尝试以下操作:

def zero_centered_min_max_scaling(dataframe):
    """
    Scale the numerical values in the dataframe to be between -1 and 1, preserving the
    signal of all values.
    """
    df_copy = dataframe.copy(deep=True)
    for column in df_copy.columns:
        max_absolute_value = df_copy[column].abs().max()
        df_copy[column] = df_copy[column] / max_absolute_value
    return df_copy

【讨论】:

    猜你喜欢
    • 2020-08-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 2023-01-17
    相关资源
    最近更新 更多