Error using * 内部矩阵尺寸必须在使用最小二乘法时一致 - 如何为多个自变量制作回归量数组

Error using * Inner matrix dimensions must agree in using Least Squares - how to make the regressor array for multiple independent variables

我正在尝试学习如何编写线性回归代码,其中数据 statistics_data 代表第一列中的酵母生长年份,第二列中的化学成分值和第三栏。使用最小二乘公式计算 theta 后,我想使用以下方法预测总体值:pred_year = 2020; pred_year_val = [1 2020]; 给出此错误:

Error using  * 
Inner matrix dimensions must agree.

Error in main_normal_equation (line 44)
pred_value = pred_year_val * theta;

代码如下:

    statistics_data = [2007, 9182927, 2;
2008,3,9256347;
2009,3.5,9340682;
2010,4,9415570;
2011,5,9482855;
2012,4.8,9555893;
2013,4.9,9644864;
2014,5,9747355;
2015,5,9851017;
2016,5,9995153;
2017,5,10120242;];


% Convert to independent variable matrix and response
X = (statistics_data(:,1:2));
y = (statistics_data(:,3));

% Convert matrix values to double
X = double(X);
y = double(y);

hold on;
% Set the x-axis label
xlabel('Year'); 
% Set the y-axis label
ylabel('Population'); 

% Plot population data
plot(X, y, 'rx', 'MarkerSize', 10);

m = length(y);
% Add ones column
X = [ones(m, 1) X];

%  Normal Equation
theta = (pinv(X'*X))*X'*y

% Predict population for 2020
pred_year = 2020;
pred_year_val = [1 2020];

% Calculate predicted value
pred_value = pred_year_val * theta;

% Plot linear regression line
plot(X(:,2), X*theta, '-')

   fprintf('Predicted population in 2020 is %d people\n ', int64(pred_value));

因此 pred_year_val 的大小为 [1 2],而 theta 的大小为 [3 1]。利用鸽巢原理可以确定pred_year_val的列数不等于theta的行数,因此不能进行矩阵乘法,即执行

pred_value = pred_year_val * theta;

注定要失败。因此,您似乎需要将化学成分的值添加到 pred_year_val.

在 matlab 中,当您使用 * 运算符时,您引用的是矩阵乘法。矩阵乘法对相乘矩阵的维数有严格的规定。

检查你的代码,你的意图似乎不是做矩阵乘法....

您可以使用 * 将标量乘以矩阵,并相应地缩放矩阵中的每个值。

您还可以使用 .* 运算符进行向量乘法,有时称为 逐个元素乘法

要解决您的问题,您必须阐明您是打算进行矩阵乘法、标量乘法还是向量乘法。然后,您必须正确设置操作数和运算符以反映您的目标。

我不清楚您的代码中的数学应该如何执行,否则我可以帮助您说明必须更改运算符和操作数的位置。

您可以先查看此处的文档:https://www.mathworks.com/help/matlab/matlab_prog/array-vs-matrix-operations.html