【发布时间】:2020-02-23 01:15:57
【问题描述】:
在早期版本的 sklearn 的 MinMaxScaler 中,可以指定缩放器标准化数据的最小值和最大值。换句话说,以下是可能的:
from sklearn import preprocessing
import numpy as np
x_data = np.array([[66,74,89], [1,44,53], [85,86,33], [30,23,80]])
scaler = preprocessing.MinMaxScaler()
scaler.fit ([-90, 90])
b = scaler.transform(x_data)
这将导致上面的数组缩放到 (0,1) 的范围,其中 -90 的最小可能值变为 0,90 的最大可能值变为 1,并且中间的所有值都被缩放因此。使用 0.21 版的 sklearn 会引发错误:
ValueError: Expected 2D array, got 1D array instead:
array=[-90. 90.].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
我将scaler.fit ([-90, 90]) 转为scaler.fit ([[-90, 90]]),但后来我得到了:
ValueError: operands could not be broadcast together with shapes (4,3) (2,) (4,3)
我知道我可以做到scaler.fit (x_data),但这会导致转换后的结果如下:
[0. 0.33333333 0.35714286]
[1. 1. 0. ]
[0.3452381 0. 0.83928571]]
我的问题有两个:1) 数字似乎不正确。它们应该在 0 和 1 之间缩放,但是对于应该分别更高和更低的值,我得到了许多 0 和许多 1。 2)如果我想根据固定范围(例如(-90. 90))将每个未来数组缩放到(0,1)范围怎么办?这是一个方便的功能,但现在我必须使用特定的数组来进行缩放。更重要的是,每次缩放都会产生不同的结果,因为我必须重新拟合每个未来的数组,从而得到可变的结果。
我在这里遗漏了什么吗?有没有办法保留这个漂亮的功能?如果没有,我将如何确保我的数据每次都正确且一致地缩放?
【问题讨论】:
标签: python numpy machine-learning scikit-learn