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数组,因为它的因变量并希望它保持这种状态。此外,我解决了早期不同的例子,我不得不重新缩放类似的数据,它没有给我这种错误。不知道为什么现在给我。此外,我在编码时观看视频,在视频中一切都是一样的,但他没有任何错误。
答案 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()