Matlab矩阵乘法维度不匹配报错:线性回归预测问题求助
矩阵乘法维度不匹配问题排查与解决方案
问题根源
错误发生在 r=(pn')*(best); 行,核心原因是矩阵维度不匹配:
best是梯度下降输出的参数向量,维度为2x1(对应截距项θ₀和特征项θ₁)- 你的代码中
pn被错误构造成3x1向量,转置后为1x3,无法与2x1的best进行矩阵乘法(第一个矩阵的列数3 ≠ 第二个矩阵的行数2)
同时你的归一化函数逻辑错误,会导致预测值偏差,需要一并修正。
具体解决方案
1. 修正归一化函数
当前归一化公式不符合标准min-max缩放逻辑,替换为正确实现:
function [x, maxs, mins] = normalize(x) mins = min(x); maxs = max(x); x = (x - mins) ./ (maxs - mins); % 标准min-max缩放至[0,1]区间 end
2. 修正预测代码的维度问题
你想要对两个输入值(7和7)进行预测,需构造符合模型输入要求的矩阵(每行对应一个样本,包含截距项1和归一化后的特征值):
% 预测部分修正代码 p = [7; 7]; % 待预测的输入值(2x1向量) pn = (p - mins) ./ (maxs - mins); % 使用训练数据的min/max进行归一化 pn = [ones(length(p), 1), pn]; % 添加截距项列,构造2x2的输入矩阵 r = pn * best; % 矩阵乘法得到2x1的预测结果(对应每个输入值的预测利润)
3. 额外优化建议
- 原代码中
yCalc1 = b1*x;是无截距项的线性回归结果,若要与梯度下降的带截距模型对比,需修改为yCalc1 = b0 + b1*x(通过[ones(m,1),x]\y求解包含截距的参数) - 确保
cost函数实现正确(标准均方误差公式:J(theta) = (1/(2*m)) * sum((xo*theta - y).^2))
内容的提问来源于stack exchange,提问作者user14018621
相关产品推荐
相关产品推荐

