标准标量拟合变换的误差

2024-06-01 00:25:12 发布

您现在位置:Python中文网/ 问答频道 /正文

 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].值 y=dataset.iloc[:,2].值

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


Tags: csvimportnumpy视频as错误transform数组
3条回答
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用于处理1d数组,但有一个不推荐的警告:在0.17中不推荐将1d数组作为数据传递,并在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()

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)

相关问题 更多 >