为什么 TransformedTargetRegressor 的 func 参数需要 return 二维数组而不是一维?

Why does the func parameter of TransformedTargetRegressor need to return 2-dimensional array and not 1-dimensional?

TransformedTargetRegressor的文档中提到参数func需要return一个二维数组。它不应该是一维数组吗?目标 y 主要具有一维形状 (n_samples,)。

下面的代码,其中目标 y 和 func 的输出是一维的,可以正常运行 -

exponentiate = lambda x: np.exp(x)
naturalLog = lambda x: np.log(x)
loglinreg = compose.TransformedTargetRegressor(regressor=linear_model.LinearRegression(),func=naturalLog,inverse_func=exponentiate)
loglinreg.fit(X_train,yCO_train)
loglinreg.score(X_train,yCO_train)

source中,func是使用FunctionTransformer应用的,这需要二维输入。这也与另一个选项一致,直接设置一个 transformer 对象,通常需要二维输入。

另见 the docs 中的注释:

Internally, the target y is always converted into a 2-dimensional array to be used by scikit-learn transformers. At the time of prediction, the output will be reshaped to a have the same number of dimensions as y.

在您的示例中,它运行是因为 np.lognp.exp 与形状无关;在拟合过程中,这两个函数实际上是在二维数组上调用的。您可以通过定义自己的函数来检查这一点:

def mylog(y):
    return np.log(y).ravel()

使用它,我们得到预期的 Expected 2D array, got 1D array instead 错误。