通过使用StandardScaler类的常规过程缩放目标变量会产生错误。但是,通过添加行y = y.reshape(-1,1)
解决了该错误。之后,将fit_transform方法应用于目标变量即可得出标准化值。我不知道添加y.reshape(-1,1)
是如何工作的?
X是具有一个特征的自变量,y是数字目标变量“ Salary”。我试图将支持向量回归应用于该问题,该问题需要显式的特征缩放。我尝试了以下代码:
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
sc_y = StandardScaler()
X = sc_X.fit_transform(X)
y = sc_y.fit_transform(y)
它给了我这样的错误:
ValueError:预期的2D数组,取而代之的是1D数组重塑数据
如果数据具有单个功能,则使用
array.reshape(-1, 1)
或
array.reshape(1, -1)
(如果它包含单个样本)。在进行以下更改之后:
X = sc_X.fit_transform(X)
y = y.reshape(-1,1)
y = sc_y.fit_transform(y)
标准化工作得很好。我需要了解添加此
y = y.reshape(-1,1)
如何帮助实现它。谢谢。
最佳答案
这在SKLearn中很有用。
从缩放器的.transform
函数的docs中,.transform
的输入必须是2D矩阵,其中第二维是要素数量:
通过居中和缩放执行标准化
参数:X:类似数组,形状为[n_samples,n_features]数据
用于沿要素轴缩放。
现在,最后一个维度必须明确设置为1,不能丢失。在重整数据之前(即y=y.reshape(-1,1)
),缺少最后一个维度-请参见以下示例:
import numpy as np
a = np.array([0,0,0])
print(a) # [0 0 0]
print(a.shape) # (3,)
b = a.reshape(-1,1)
print(b) # [[0] [0] [0]]
print(b.shape) # (3,1)
reshape方法更改数组的形状:例如,如果a是具有6个元素(以及任意形状)的数组,则
a.reshape(3,2)
会将其形状更改为3×2。 -1参数的基本含义是“使用此处需要的维,以便数据适合”。因此,a.reshape(-1,1)
包含n个元素的数组到n×1 2d数组(没有显式指定n)。关于python - 使用Sklearn库的StandardScaler在Python中缩放目标变量会产生错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57848731/