首页 > 解决方案 > 将 MinMaxScaler 与某些数据一起使用时出错

问题描述

我正在尝试使用 MinMaxScaler 来规范化我的数据。奇怪的是有些数据有效,有些则无效。

我的 x 数据包含坐标,具有形状 (21,24321)。因此,有 21 行和 24321 列,如下所示:

array([[-1.72507889, -1.70618793, -1.68895362, ...,  1.68897011,
         1.70620441,  1.72343872],
       [-1.72507889, -1.70618793, -1.68895362, ...,  1.68897011,
         1.70620441,  1.72343872],
       [-1.72507889, -1.70618793, -1.68895362, ...,  1.68897011,
         1.70620441,  1.72343872],
       ...,
       [-1.72507889, -1.70618793, -1.68895362, ...,  1.68897011,
         1.70620441,  1.72343872],
       [-1.72507889, -1.70618793, -1.68895362, ...,  1.68897011,
         1.70620441,  1.72343872],
       [-1.72507889, -1.70618793, -1.68895362, ...,  1.68897011,
         1.70620441,  1.72343872]])

每行的值相同,因此第 1 行的值与第 20 行的值相同。

当我运行时:

x_scaler = MinMaxScaler(feature_range=(-1,1))
x = x_scaler.fit_transform(x)

I get:

array([[ 0.,  1.,  1., ...,  0.,  1., -1.],
       [ 0.,  1.,  1., ...,  0.,  1., -1.],
       [ 0.,  1.,  1., ...,  0.,  1., -1.],
       ...,
       [ 0.,  1.,  1., ...,  0.,  1., -1.],
       [ 0.,  1.,  1., ...,  0.,  1., -1.],
       [ 0.,  1.,  1., ...,  0.,  1., -1.]])

另一方面,如果我使用标准公式:

x_max = np.max(x)
x_min = np.min(x)
x = 2*((x-x_min)/(x_max-x_min)-0.5)

I get:

array([[-1.        , -0.98904401, -0.97904881, ...,  0.98000961,
         0.9900048 ,  1.        ],
       [-1.        , -0.98904401, -0.97904881, ...,  0.98000961,
         0.9900048 ,  1.        ],
       [-1.        , -0.98904401, -0.97904881, ...,  0.98000961,
         0.9900048 ,  1.        ],
       ...,
       [-1.        , -0.98904401, -0.97904881, ...,  0.98000961,
         0.9900048 ,  1.        ],
       [-1.        , -0.98904401, -0.97904881, ...,  0.98000961,
         0.9900048 ,  1.        ],
       [-1.        , -0.98904401, -0.97904881, ...,  0.98000961,
         0.9900048 ,  1.        ]])

为什么会这样?是有一些错误还是我做错了?

谢谢

标签: python

解决方案


在我看来,您的数据正在错误的轴上进行迭代。

x_scaler = MinMaxScaler(feature_range=(-1,1))
x = x_scaler.fit_transform(x.T).T

应该给你你期望的值


推荐阅读