【问题标题】:Multivariate multiple linear regression using Sklearn使用 Sklearn 的多元多元线性回归
【发布时间】:2019-01-30 20:54:42
【问题描述】:

我想使用具有多维输入和输出样本(例如向量)的 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的正确方法?

【问题讨论】:

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

标签: python scikit-learn linear-regression


【解决方案1】:

只需展平您的 x1x2y 列表,您就可以开始了。一种方法是使用数组,如下所示:

import numpy as np
x1 =np.array(x1).flatten()
x2 =np.array(x2).flatten()
y =np.array(y).flatten()

第二种方法是使用ravel作为:

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]

可能有更多方法,但您知道问题所在。更多方法可以看here

输出

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

【讨论】:

    猜你喜欢
    • 2018-08-11
    • 2021-01-12
    • 2017-06-21
    • 2020-10-09
    • 2010-11-23
    • 2017-02-25
    • 1970-01-01
    • 2019-04-07
    • 2021-08-01
    相关资源
    最近更新 更多