Python 基于Sklearn的多元线性回归

Python 基于Sklearn的多元线性回归,python,scikit-learn,linear-regression,Python,Scikit Learn,Linear Regression,我想使用带有多维输入和输出样本(例如向量)的sklearn来训练线性模型Y=M_1*X_1+M_2*X_2。我尝试了以下代码: from sklearn import linear_model from pandas import DataFrame x1 = [[1,2],[2,3],[3,4]] x2 = [[1,1],[3,2],[3,5]] y = [[1,0],[1,2],[2,3]] model = { 'vec1': x1, 'vec2': x2, 'c

我想使用带有多维输入和输出样本(例如向量)的
sklearn
来训练线性模型
Y=M_1*X_1+M_2*X_2
。我尝试了以下代码:

from sklearn import linear_model
from pandas import DataFrame 

x1 = [[1,2],[2,3],[3,4]]
x2 = [[1,1],[3,2],[3,5]]
y = [[1,0],[1,2],[2,3]]
model = {
    'vec1': x1,
    'vec2': x2,
    'compound_vec': y}

df = DataFrame(model, columns=['vec1','vec2','compound_vec'])
x = df[['vec1','vec2']].astype(object)
y = df['compound_vec'].astype(object)
regr = linear_model.LinearRegression()
regr.fit(x,y)
但我得到了以下错误:

regr.fit(x,y)
 ...
array = array.astype(np.float64)
ValueError: setting an array element with a sequence.

有人知道代码有什么问题吗?如果这是训练
Y=M_1*X_1+M_2*X_2

的正确方法,只需将
x1
x2
Y
列表展平即可。一种方法是按如下方式使用数组:

import numpy as np
x1 =np.array(x1).flatten()
x2 =np.array(x2).flatten()
y =np.array(y).flatten()
第二种方法是使用
ravel
as:

x1 =np.array(x1).ravel()
x2 =np.array(x2).ravel()
y =np.array(y).ravel()
第三种不使用NumPy的方法是使用列表理解:

x1 =[j for i in x1 for j in i]
x2 =[j for i in x2 for j in i]
y =[j for i in y for j in i]
可能有更多的方法,但你知道问题所在。更多的方法,你可以看看

输出

LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)

我对你的问题投了赞成票,因为知道输入数据的正确格式与训练你的模型相关。你的目标是,正如你的第一句话所暗示的那样,同时学习和预测多个输出值吗(公式中Y是多维的吗)?或者它只是重新格式化数据(正如在接受的答案中所做的那样)?@MarcusV。我需要训练模型,以便给定两个多维输入,如向量,它在相同的空间(向量)中预测输出,因此
M_1
M_2
在矩阵空间中。如果有一个自变量,情况会很好,但我对有两个自变量感到困惑。@Shimil:这里没有什么好困惑的。在
Y=M_1*X_1+M_2*X_2
中,对于给定值
X_1
和给定值
X_2
,您将有一个相应的
Y
值。因此,如果你的数据中有6对
X_1
X_2
值,那么你将有6个
Y
@Bazingaa的输出值,可能Shimil仍然希望实际有多个输出/因变量,但线性回归无法开箱即用。它可以使用[MultiOutputRegressor](sklearn.MultiOutputRegressor.MultiOutputRegressor)包装器工作,假设y和y都可以独立预测(因为它适合每个输出一个模型)。