使用*内部矩阵维度时出错必须同意使用最小二乘法 - 如何为多个自变量生成回归数组

问题描述 投票:0回答:2

我正在尝试学习如何编码线性回归,其中数据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));
matlab matrix deep-learning statistics least-squares
2个回答
0
投票

所以pred_year_val的大小[1 2]theta的大小[3 1]。使用鸽子孔原理,我们可以确定pred_year_val的列数不等于theta的行数,因此我们不能执行矩阵乘法,即执行

pred_value = pred_year_val * theta;

必然会失败。因此,您似乎需要将化学成分的值添加到pred_year_val


0
投票

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

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

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

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

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

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

您可以从这里查看文档开始:https://www.mathworks.com/help/matlab/matlab_prog/array-vs-matrix-operations.html

© www.soinside.com 2019 - 2024. All rights reserved.