StandardScalar Fit_Transform 出错

Getting Error on StandardScalar Fit_Transform

 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 使其成为二维数组。 但我希望它保持为一维数组,因为它是因变量,并希望它保持这种状态。我还解决了之前的不同示例,在这些示例中我不得不重新缩放相似的数据,但它并没有给我这种错误。不知道为什么现在给我。此外,我在编码时正在观看视频,视频中的一切都是一样的,但他没有收到任何错误。

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

y.flatten()

StandardScaler 旨在处理特征,而不是标签或目标数据。 因此仅适用于二维数据。请在此处查看文档:

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

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

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

import numpy as np
y = np.array(y).reshape(-1,1)
y = sc_y.fit_transform(y)
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()

StandardScaler 用于处理一维数组,但有一个弃用警告:将一维数组作为数据在 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()