【问题标题】:Linear regression coefficients for multiple linear equations多个线性方程的线性回归系数
【发布时间】:2015-05-08 06:53:50
【问题描述】:

对于i = 1..30,我有多个Zi=ai*Xi+bi*Yi 形式的线性方程。 如何使用 MATLAB 计算每对回归系数值,或者每个 (Z,X,Y) 组合的 ab 的 30 个值?

我尝试了以下代码:

A=Z; B=[Xs Ys];
C = B \ A;

A 是我的Z 点,而B 是我的XY 点的矩阵。但是,我似乎只得到所有点的一对回归系数。 提前致谢!

【问题讨论】:

  • 你使用的代码是什么?
  • 输入和预期输出...?
  • 嗨,我有两个矩阵 A=Zs, B=[Xs Ys];我尝试了 B\A ,它只为整个矩阵提供了一个 a 和 b 值。我想得到 a 和 b 的每个组合。

标签: matlab linear-regression


【解决方案1】:

如果我理解您的问题表述,不幸的是,您在那里设置的方法不是解决问题的正确方法。该假设假设您试图将所有点放在一条线上。因此,B 的每一行都将作为您试图找到其线性回归的 one 线上的一个点。如果您想同时求解多行,则需要更改公式。

这其实很简单。我将假设您有 30 个(x,y) 点,其中每个点表示一条线的一个方程。您将它们分别设置为XsYs。每个等式的输出也在Zs 中。我还将假设这些是 column 向量,因此,您的系统设置如下:

a_ib_i 是每行的系数。您知道每一行的(x,y),您的目标是解决每个对应的ab。因此,您需要重新设计您的系统,以便解决ab

以矩阵形式重写该问题,可以这样完成:

a_1, b_1, a_2, b_2, ... 的右侧向量是您最终要解决的问题。你可以看到我们有一个Y = M*X 的矩阵方程,其中MY 是已知的,X 是我们需要通过执行X = M\Y 来解决的问题。因此,您只需将xy 值重新排列成一个像上面这样的块矩阵。首先,我们需要找到正确的线性索引,以便我们可以将 xy 值放入该矩阵中,然后使用 ldivide 运算符通过最小二乘法求解系统。该矩阵是一个N x 2N 矩阵,其中N 是我们拥有的方程或约束的总数(因此在您的情况下为30):

N = numel(Xs);
M = zeros(N, 2*N);
xind = sub2ind(size(M), 1:N, 1:2:2*N);
yind = sub2ind(size(M), 1:N, 2:2:2*N);
M(xind) = Xs;
M(yind) = Ys;

sub2ind 允许您使用一行代码将多个值放入矩阵中。具体来说,sub2ind 从一组行和列坐标中确定 linear 索引以访问矩阵。如果您还不知道,您可以使用单个数字而不是一对行和列来访问矩阵中的值(和设置值)。 sub2ind 将允许您通过指定一组线性索引来一次在矩阵中设置多个值,以使用相应的向量访问矩阵。

在我们的例子中,我们需要两组线性索引——一组用于x 值,一组用于y 值。请注意,x 值从第一列开始,每隔一列跳过。对于y 值,可以说相同的行为,但我们从第二列开始。一旦我们有了这些索引,我们就在这个矩阵中设置xy 值,现在我们只需求解系数:

coeff = M \ Z;

coeff 现在将是 2N x 1 向量,因此如果您愿意,可以将其重新整形为矩阵:

coeff = reshape(coeff, 2, []);

现在,coeff 的形状将使得每个 都会为您拥有的每个方程提供一对 a,b。因此,第一列表示a_1, b_1,第二列表示a_2, b_2,依此类推。 coeff 的第一行是每个约束的所有 a 系数,而第二行是每个约束的所有 b 系数。

【讨论】:

    猜你喜欢
    • 2021-08-20
    • 2018-01-06
    • 2016-05-10
    • 2017-03-24
    • 2017-03-12
    • 2017-05-20
    • 2021-01-02
    • 1970-01-01
    • 2016-05-29
    相关资源
    最近更新 更多