以零为中心在-1和1之间缩放数据

时间:2017-11-14 16:10:43

标签: python pandas scikit-learn

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

我的数据框看起来像

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之间的浮点数,用于此列的最小值和最大值。 我已经尝试使用scikit学习了scaler = MinMaxScaler(feature_range = (-1, 1))的minmax缩放器,但是有些值会改变符号,我需要保留它。

有没有办法让中心'零缩放?

2 个答案:

答案 0 :(得分:2)

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

它有with_meanwith_std选项,您可以使用它来获取所需的数据。

答案 1 :(得分:0)

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

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