数据帧列表上的MinMax缩放器

时间:2019-01-13 12:17:02

标签: python pandas scikit-learn scikits

我有一个数据框列表(所有数据框都有相同的数字列,代表同一测试的不同结果。我想将它们分开)。 我想训练scikit MinMaxScalar,它将考虑所有数据框中每一列的最小值和最大值。 有人可以解决这个问题吗?

谢谢

MAK

2 个答案:

答案 0 :(得分:1)

您要执行以下操作:

  1. 创建一个临时DataFrame tmp作为列表中所有DF的串联
  2. MinMaxScaler对象放在tmp DF上
  3. 使用合适的MinMaxScaler对象
  4. 缩放(转换)列表中的所有DF

更新:

  

希望您有一个训练建议,而又不会造成临时工作   数据框?

我们可以利用.partial_fit()方法来迭代地拟合来自所有DF的数据:

创建示例DF列表:

In [100]: dfs = [pd.DataFrame(np.random.rand(3,3)*100 - 50) for _ in range(3)]

In [101]: dfs[0]
Out[101]:
           0          1          2
0  45.473162  42.366712  41.395652
1 -35.476703  43.777850 -36.363200
2   0.479528  14.861075   4.196630

In [102]: dfs[2]
Out[102]:
           0          1          2
0   6.888876 -24.454986 -39.794309
1  -8.988094 -34.426252 -24.760782
2  34.317689 -43.644643  44.243769

缩放比例:

In [103]: from sklearn.preprocessing import MinMaxScaler

In [104]: mms = MinMaxScaler()

In [105]: _ = [mms.partial_fit(df) for df in dfs]

In [106]: scaled = [mms.transform(df) for df in dfs]

结果:

In [107]: scaled[0]
Out[107]:
array([[1.        , 0.9838584 , 0.91065751],
       [0.07130264, 1.        , 0.03848462],
       [0.48381052, 0.66922958, 0.49341912]])

In [108]: scaled[1]
Out[108]:
array([[0.53340314, 0.8729412 , 0.62360548],
       [0.        , 0.39480025, 1.        ],
       [0.04767918, 0.10412712, 0.95859434]])

In [109]: scaled[2]
Out[109]:
array([[0.55734177, 0.2195048 , 0.        ],
       [0.37519322, 0.10544644, 0.16862177],
       [0.87201883, 0.        , 0.94260309]])

答案 1 :(得分:0)

请查看 MinMaxScaler 方法的描述,例如在 https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html

fit(X[, y])     Compute the minimum and maximum to be used for later scaling.
transform(X)    Scaling features of X according to feature_range.

因此,假设您的DataFrames列表位于dfList中,那么您应该:

  • 根据以下结果调用fit(pd.concat(dfList))设置最小值/最大值 所有实验。
  • 然后在每个DataFrame上调用transform(...)

请注意,没有显式创建任何临时表保存 所有实验的合并结果。