为什么 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.log
和 np.exp
与形状无关;在拟合过程中,这两个函数实际上是在二维数组上调用的。您可以通过定义自己的函数来检查这一点:
def mylog(y):
return np.log(y).ravel()
使用它,我们得到预期的 Expected 2D array, got 1D array instead
错误。
在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 asy
.
在您的示例中,它运行是因为 np.log
和 np.exp
与形状无关;在拟合过程中,这两个函数实际上是在二维数组上调用的。您可以通过定义自己的函数来检查这一点:
def mylog(y):
return np.log(y).ravel()
使用它,我们得到预期的 Expected 2D array, got 1D array instead
错误。