在StandardScalar Fit_Transform

时间:2017-12-06 13:28:53

标签: python arrays machine-learning scikit-learn sklearn-pandas

 import numpy as np
 import matplotlib.pyplot as plt
 import pandas as pd

 dataset = pd.read_csv('Position_Salaries.csv')
 X = dataset.iloc[:, 1:2].values
 y = dataset.iloc[:, 2].values

from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
sc_y = StandardScaler()
X = sc_X.fit_transform(X)
y = sc_y.fit_transform(y)

好的,这就是问题所在。 X和y都是单一特征,并且有一列。如您所见,X是矩阵。 y是向量      X = dataset.iloc [:,1:2] .values      y = dataset.iloc [:,2] .values

现在当我运行y = sc_y.fit_transform(y)时,我得到的错误是它是一维数组。如果我改变y = dataset.iloc[:, 2:3].values使其成为2D数组。 但我希望它保留为1D数组,因为它的因变量并希望它保持这种状态。此外,我解决了早期不同的例子,我不得不重新缩放类似的数据,它没有给我这种错误。不知道为什么现在给我。此外,我在编码时观看视频,在视频中一切都是一样的,但他没有任何错误。

4 个答案:

答案 0 :(得分:4)

StandardScaler旨在处理功能,而不是标签或目标数据。 因此仅适用于二维数据。请参阅此处获取文档:

您可以使用scale function。 StandardScaler只是这个函数的包装器。

from sklearn.preprocessing import scale
y = scale(y)

或者如果您想使用StandarScaler,您需要将y重塑为2-d数组,如下所示:

import numpy as np
y = np.array(y).reshape(-1,1)
y = sc_y.fit_transform(y)

答案 1 :(得分:1)

StandardScaler曾经与一维数组一起使用,但与DeprecationWarning一起使用:在0.17中弃用数据时传递一维数组,在0.19中将引发ValueError。如果数据具有单个功能,则使用X.reshape(-1,1)来重塑数据,如果包含单个样本,则使用X.reshape(1,-1)来重塑数据。

因此,遵循您要寻找的解决方案:

sc_y = StandardScaler()
y = np.array(y).reshape(-1,1)
y = sc_y.fit_transform(y)
y = y.flatten()

答案 2 :(得分:0)

from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X = sc_X.fit_transform(X)

sc_y = StandardScaler()
y = np.array(y).reshape(-1,1)
y = sc_y.fit_transform(y)
y = y.flatten()

答案 3 :(得分:-1)

您可以使用flatten从2D数组中获取一维数组:

y.flatten()