为什么MaxAbsScaler()没有将列范围设置为[-1,1]?

时间:2016-09-16 23:45:33

标签: python scikit-learn

从scikit学习文档(http://scikit-learn.org/stable/modules/preprocessing.html),我了解MaxAbsScaler通过将每列除以其最大值来工作。这应该将最大值设置为1,即等于变换df = df / df.max()。

这给了我期望的结果:

from sklearn import preprocessing
import numpy as np
import pandas as pd
max_abs_scaler = preprocessing.MaxAbsScaler()

df = pd.DataFrame(np.random.randn(100,50), columns=np.arange(50))
dfdividebymax = df/df.max()
dfdividebymax.max(axis=0)

是1的数组,因为每列最多出现一次。  然而,

dftransformed = max_abs_scaler.fit_transform(df)
dftransformed.max(axis=0)
array([ 0.9542721 ,  0.95156696,  0.98142822,  0.86959599,  0.82640483,
        1.        ,  0.71766434,  0.97071355,  1.        ,  1.        ,
        1.        ,  1.        ,  0.96306546,  1.        ,  1.        ,
        0.96927375,  1.        ,  1.        ,  1.        ,  0.90660616,
        1.        ,  0.93072587,  0.90154812,  0.81959713,  0.83557895,
        1.        ,  1.        ,  0.988002  ,  0.89144342,  0.74270055,
        0.66322889,  0.93516648,  0.84134716,  1.        ,  1.        ,
        1.        ,  1.        ,  1.        ,  1.        ,  0.63151867,
        0.86357431,  0.71128973,  1.        ,  1.        ,  1.        ,
        0.69890436,  1.        ,  1.        ,  0.95098563,  0.73306342])

现在输出几列,其最大值严格小于1.缺少某些最大值的原因是什么?

1 个答案:

答案 0 :(得分:2)

缺少的部分在于变换器找到数据帧绝对值的最大值。因此,如果原始数据框中的绝对值为负,则会注意到您指出的“不一致”。换句话说,在随机数据帧中,例如,前5个要素的最大绝对值在df中具有负值。您可以在source code

的第784行看到转换