【问题标题】:Why does the func parameter of TransformedTargetRegressor need to return 2-dimensional array and not 1-dimensional?为什么TransformedTargetRegressor的func参数需要返回二维数组而不是一维?
【发布时间】:2021-07-17 17:14:46
【问题描述】:

TransformedTargetRegressor的文档中提到参数func需要返回一个二维数组。它不应该是一维数组吗?目标 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)

【问题讨论】:

    标签: python scikit-learn data-preprocessing


    【解决方案1】:

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

    另见the docs中的注释:

    在内部,目标y 始终转换为二维数组以供 scikit-learn 转换器使用。在预测时,输出将被重新整形为具有与y 相同的维数。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 2020-06-01
      • 1970-01-01
      • 2023-03-14
      相关资源
      最近更新 更多