【问题标题】:Regression of matrix-shaped output with sklearn使用 sklearn 回归矩阵形输出
【发布时间】:2021-03-22 09:26:37
【问题描述】:

我想计算一个适合 y = f(X) 的回归量 f(),其中 y 的形状为 (n_samples, n_attribs, n_outputs) [即,不同属性的 n_outputs 组件/标签],而不是传统的形状 (n_samples, n_outputs)

MultiOutputRegressor in sklearn 可以处理后一种情况。能处理前者吗?

显然我可以堆叠第 3 维列,因此 y 的形状为 n_samples, n_attribs x n_outputs,但为了方便起见,我想保留原始形状。

是否仍然可以使用 sklearn 执行回归?我应该看看其他包,比如 Tensorflow/keras 吗?

谢谢, 电子商务

【问题讨论】:

    标签: scikit-learn regression


    【解决方案1】:

    如果您查看帮助页面:

    此策略包括为每个目标拟合一个回归器。这是一个 扩展本身不支持的回归器的简单策略 多目标回归。

    此函数适合您目标的每一列的单独回归量,希望这是您所需要的,因为根据您的描述,“计算适合 y = f(X) 的回归量 f()”,不清楚什么您寻求使用的回归。

    如果有添加维度,你会受到这个函数的限制,如果你不堆叠它,我猜你做的回归量和你的第三个维度一样多,例如:

    import numpy as np
    from sklearn.multioutput import MultiOutputRegressor
    from sklearn.linear_model import Ridge
    
    X = np.random.normal(0,1,(100,10))
    y = np.random.normal(0,1,(100,2,2))
    
    fits = [MultiOutputRegressor(Ridge(random_state=123)).fit(X, y[:,:,i]) for i in range(y.shape[2])]
    

    您可以通过评估列表中的每个项目来获得每列的系数等,例如:

    fits[0].estimators_[0].coef_
    

    【讨论】:

    • 嗨@StupidWolf,感谢您花时间回答我的问题。我已经编辑了我的帖子,希望让它更清楚。我对y = np.random.normal(0,1,(100,2,2))的情况很感兴趣。
    • 是的.. 我现在看到了。如果你保持你的形状,那么你最终得到的是一个 MultiOutputRegressor 列表
    • 谢谢! sklearn 中没有内置解决方案来处理这种情况,对吧?如果我想在 sklearn.pipeline.Pipeline 中使用它,那么我需要构建一个自定义类,在 y 的第 3 轴上执行 for 循环。同意吗?
    • 是的。我会这么说。或者你运行你的管道 n 次
    猜你喜欢
    • 2021-02-20
    • 2019-02-27
    • 2018-04-08
    • 2020-03-24
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多