何时以及如何将 StandardScaler 与目标数据一起用于预处理

数据挖掘 Python scikit-学习 特征缩放
2022-03-09 09:47:10

我试图弄清楚何时以及如何使用scikit-learn's StandardScaler 转换器,以及如何将其应用于目标变量。

我读过这篇文章,虽然公认的答案认为没有必要标准化目标向量,但其他答案表明它可能仍然是有益的。

所以让我们假设我想继续标准化目标向量。根据语法,实例的fit_transform方法StandardScaler可以采用特征矩阵 X 和目标向量 y 来解决监督学习问题。

但是,当我应用它时,该方法只返回一个数组。如果我尝试解压缩两个值,如下面的代码所示,我会收到“ValueError: too many values to unpack (expected 2)”错误:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_scaled, y_scaled = scaler.fit_transform(X,y) # X is some feature array, y is the target vector

# This code will produce an error message

这与文档一致,文档指出返回值是单个输出数组X_new

那么我的问题是:为什么有一个选项可以添加y到方法的参数中?它会改变 X 标准化的方式吗?

如果没有,我应该使用类似下面的代码吗?:

from sklearn.preprocessing import StandardScaler

scaler_X = StandardScaler()
scaler_y = StandardScaler()

X_scaled = scaler_X.fit_transform(X)
y_scaler = scaler_y.fit_transform(y)

1个回答

对于回归问题,使用 Scikit-Learn 在 Python 中缩放特征和目标的正确方法是使用如下管道:

from sklearn.linear_model import LinearRegression
from sklearn.compose import TransformedTargetRegressor
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler


tt = TransformedTargetRegressor(regressor=LinearRegression(),
                                transformer = StandardScaler)

model = Pipeline([("scaler",StandardScaler()),("regressor",tt)])