我正在尝试使用sklearn.preprocessing.MinMaxScaler来缩放使用Keras构建的RNN的y值
from sklearn.preprocessing import MinMaxScaler
#snip
print(X_train.shape)
print(y_train.shape)
(11025, 21)
(11025,)
但
minmax_scaler = MinMaxScaler(copy=False)
minmax_scaler.fit(X_train, y_train)
minmax_scaler.transform(X_train)
minmax_scaler.transform(y_train)
引发错误
/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/sklearn/preprocessing/data.py:359: DeprecationWarning:
Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19.
Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.
warnings.warn(DEPRECATION_MSG_1D, DeprecationWarning)
我没有成功使用错误中建议的“reshapes()”。
https://github.com/scikit-learn/scikit-learn/issues/1549看起来很有希望但突然关闭了。
我应该如何/可以缩放y以使其与X保持一致?
答案 0 :(得分:1)
您正在尝试做的是技术方面,而且还有基本的方面。
从技术上讲,请注意这些形状,
(11025, 21)
(11025,)
是不同的:第一个是2d,第二个是1d。 transform
方法需要2d形状。如果确实希望将y
传递给它,您可以执行类似
minmax_scaler.transform(y_train.reshape((len(y_train), 1)))
这会使它成为一个二维数组。
现在这不会抛出,但从根本上说,这几乎肯定不是你想要的。您的变压器已经过培训X
,而不是y
。您应该在转换之前在y
(见下文)上训练变压器,或考虑您是否真的要转换y
。
修改强>
如果您真的想要转换y
,它应该看起来像
some_scaler.fit(y_train.reshape((len(y_train), 1)), y).transform(y_train.reshape((len(y_train), 1)))