我想使用多个预测因子来预测多个因变量。如果我理解正确的话,原则上我们可以建立一堆线性回归模型每个模型预测一个因变量,但如果因变量是相关的,那么使用多元回归更有意义。我想做后者,但我不知道怎么做。
到目前为止,我还没有找到一个专门支持这个功能的Python包。我尝试过scikit-learn,尽管他们的线性回归模型示例只显示了y是一个数组(每个观察值一个因变量)的情况,但它似乎能够处理多个y。但是当我将这种"多元"方法的输出与我通过手动循环每个因变量并相互独立预测得到的结果进行比较时,结果是完全相同的。我认为情况不应该是这样,因为一些因变量之间存在很强的相关性(>0.5)。代码看起来就像这样,y
是n x 1
矩阵或n x m
矩阵,x
和newx
矩阵的大小不同(x == n
中的行数)。
ols = linear_model.LinearRegression()
ols.fit(x,y)
ols.predict(newx)
这个函数实际上执行多元回归吗?
如果您想要考虑因变量之间的相关性,您可能需要偏最小二乘回归。这种方法基本上是寻找自变量的投影和因变量的投影,使这两个投影之间的协方差最大。查看scikit-learn实现
这是一个数学/统计问题,但我还是会在这里回答。
你看到的结果绝对是意料之中的。像这样的线性模型不会考虑因变量之间的相关性。
如果你只有一个因变量,你的模型将本质上由一个权重向量组成
w_0 w_1 ... w_n,
,其中n
为特征数。对于m
因变量,您将得到一个权重矩阵
w_10 w_11 ... w_1n
w_20 w_21 ... w_2n
.... ....
w_m0 w_m1 ... w_mn
但是对于不同的输出变量(1,…, m)是完全相互独立的,并且由于总误差平方和分解为每个输出变量的误差平方和,因此最小化总损失的平方与为每个输出变量建立一个单变量线性模型并最小化它们的平方损失完全相同。