从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.缺少某些最大值的原因是什么?
答案 0 :(得分:2)
缺少的部分在于变换器找到数据帧绝对值的最大值。因此,如果原始数据框中的绝对值为负,则会注意到您指出的“不一致”。换句话说,在随机数据帧中,例如,前5个要素的最大绝对值在df中具有负值。您可以在source code
的第784行看到转换