如何在所有列上使用MinMaxScaler?

时间:2018-09-07 16:07:01

标签: python numpy scikit-learn

现在,我将数据存储在2 x 2 numpy数组中。如果我要在数组上使用MinMaxScaler fit_transform,它将逐列对其进行归一化,而我希望对整个np数组进行归一化。反正有这样做吗?

2 个答案:

答案 0 :(得分:1)

根据文档,您似乎无法更改MinMaxScaler的轴。一种替代方法是根据文档中的MinMaxScaler的定义来定义缩放函数:

X_std = (X - X.min()) / (X.max() - X.min())
X_scaled = X_std * (max - min) + min

因此您可以这样做:

import numpy  as np

X = np.array([[-1, 2], [-0.5, 6]])


def min_max_scale(X, range=(0, 1)):
    mi, ma = range
    X_std = (X - X.min()) / (X.max() - X.min())
    X_scaled = X_std * (ma - mi) + mi
    return X_scaled

print(min_max_scale(X))

输出

[[0.         0.42857143]
 [0.07142857 1.        ]]

基本上,您需要删除axis参数,以考虑整个数组中的最大值和最小值。

答案 1 :(得分:0)

为什么不通过以下方式使用原始的MinMaxScaler API:

  1. 将X numpy数组重塑为一列数组,
  2. 规模
  3. 整形结果恢复为X数组的形状

    import numpy as np
    
    X = np.array([[-1, 2], [-0.5, 6]])
    scaler = MinMaxScaler()
    X_one_column = X.reshape([-1,1])
    result_one_column = scaler.fit_transform(X_one_column)
    result = result_one_column.reshape(X.shape)
    print(result)
    

输出

[[ 0.          0.42857143]
 [ 0.07142857  1.        ]]