y

时间:2016-08-18 22:50:52

标签: python-3.x scikit-learn numpy-broadcasting

我正在尝试使用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保持一致?

1 个答案:

答案 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)))