通过使用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/

10-12 19:30