Scikit learn 用sklearn回归矩阵型输出

Scikit learn 用sklearn回归矩阵型输出,scikit-learn,regression,Scikit Learn,Regression,我想计算一个适合y=f(X)的回归函数f(),其中y具有形状(n_样本,n_属性,n_输出)[即,n_输出不同属性的组件/标签],而不是传统的形状(n_样本,n_输出) 我可以处理后一种情况。它能处理前者吗 显然,我可以堆叠三维列,这样y就有了shapen_样本,n_attribs x n_输出,但为了一致性,我希望保留原始形状 仍然可以使用sklearn执行回归吗?我是否应该研究其他软件包,如Tensorflow/keras 谢谢, E CM如果您查看帮助页面: 该策略包括为每个目标装配一个回

我想计算一个适合y=f(X)的回归函数f(),其中y具有形状
(n_样本,n_属性,n_输出)
[即,n_输出不同属性的组件/标签],而不是传统的形状
(n_样本,n_输出)

我可以处理后一种情况。它能处理前者吗

显然,我可以堆叠三维列,这样y就有了shape
n_样本,n_attribs x n_输出
,但为了一致性,我希望保留原始形状

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

谢谢,
E CM

如果您查看帮助页面:

该策略包括为每个目标装配一个回归器。这是一个 扩展本机不支持的回归函数的简单策略 多目标回归

该函数为目标的每一列拟合一个单独的回归器,希望这就是您所需要的,因为根据您的描述,“计算一个适合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_
您可以通过评估列表中的每个项目来获得每列的系数等,例如:

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_

如果您查看帮助页面:

该策略包括为每个目标装配一个回归器。这是一个 扩展本机不支持的回归函数的简单策略 多目标回归

该函数为目标的每一列拟合一个单独的回归器,希望这就是您所需要的,因为根据您的描述,“计算一个适合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_
您可以通过评估列表中的每个项目来获得每列的系数等,例如:

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))
.yes。。我现在看到了。如果你保持身材,那么你最终得到的是一个多输出的列表谢谢!在SKI中没有内置的解决方案来学习处理这种情况,对吗?如果我想在sklearn.pipeline.pipeline中使用它,那么我需要构建一个自定义类,在y的第三轴上执行for循环。同意吗?是的。我可以这么说。或者您运行您的管道n timesHi@StupidWolf,感谢您花时间回答我的问题。我已经编辑了我的帖子,希望能让它更清晰。我感兴趣的是
y=np.random.normal(0,1,(100,2,2))
.yes。。我现在看到了。如果你保持身材,那么你最终得到的是一个多输出的列表谢谢!在SKI中没有内置的解决方案来学习处理这种情况,对吗?如果我想在sklearn.pipeline.pipeline中使用它,那么我需要构建一个自定义类,在y的第三轴上执行for循环。同意吗?是的。我可以这么说。或者运行管道n次