【问题标题】:The problem with the dimensions of a matrix when computing the least squares method计算最小二乘法时矩阵的维数问题
【发布时间】:2021-05-06 11:30:13
【问题描述】:

我之前在这个领域的话题。

Problem in solving algorithm polynomial regression,least squares method in Octave

我决定不更改主要问题,而是为每个问题创建一个新问题。

这一次,问题如下。我在多项式回归中使用了最小二乘法。

将该函数对参数b的向量进行微分并将导数设为零,我们得到方程组(矩阵形式)。这个公式。

也就是说,如果我想从这里表达b,我需要做我所做的。

b=X^{T}y/(X^{T}X)=> b=X'*y1/(X'*X)

代码:

#Generating random values ​​of experimental data
x=0:0.1:5;
y=3*x+2;
y1=y+randn(size(y));
k=5;#Polynomial degree
X=[x' ones(length(x),1)];
b=X'*y1/(X'*X); Error: operator *: nonconformant arguments (op1 is 2x51, op2 is 1x51)\

是的,数组Xy1 的尺寸不重合。附加的屏幕截图将显示所有内容。在此屏幕截图中,变量 X、y1 和 X'(转置)。

然后我决定从数组X 中选择一列并将其乘以y1

如果您查看屏幕截图,您会发现现在转置的X'y1 维度匹配。也就是说,应该没有错误,但它仍然存在。

【问题讨论】:

  • 请注意A/BB\A 不同。如果你从(X'*X) * b = X' * y1开始,那么你在两边都左除以(X'*X)来求解b(X'*X) \ (X'*X) * b = (X'*X) \ X' * y1 -> b = (X'*X) \ X' * y1

标签: regression octave octave-gui


【解决方案1】:

你的数学错了。进行矩阵运算时,不能随意划分。

最小二乘解是

b=(X'*X)^-1 * X' * y

另外你对y 的定义是错误的,或者你的尺码不合适。

x=0:0.1:5;
y=(3*x+2)'; %transpose!
y1=y+randn(size(y));
X=[x' ones(length(x),1)];

矩阵的逆是你永远不应该用数字计算的东西。幸运的是,有一种叫做 Moore-Penrose 伪逆的东西,它确保在使用时,您将获得原始问题的最小二乘解。所以让我们使用它。

b=pinv(X'*X)*X'*y;
b_with_noise=pinv(X'*X)*X'*y1;

请注意,下面的数值精度基本上为零,这意味着它是正确的。

sum(X*b-y)

ans =

  -5.8176e-14

现在,在 MATLAB/octave 中,您可以更轻松地做到这一点:

b=X\y;
b_with_noise=X\y1;

MATLAB 将找到计算最小二乘解的最佳算法。 mldivide 有更多信息(octave 文档有点缺乏,但应该以相同的方式工作)。

【讨论】:

    猜你喜欢
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 2021-08-14
    • 2021-12-26
    • 2021-02-11
    • 2021-05-07
    • 2014-02-28
    相关资源
    最近更新 更多