【发布时间】:2025-08-10 05:20:02
【问题描述】:
我正在尝试使用 Octave 中的 fminunc 仅使用一项功能实现线性回归。
这是我的代码。
x = load('/home/battousai/Downloads/ex2Data/ex2x.dat');
y = load('/home/battousai/Downloads/ex2Data/ex2y.dat');
m = length(y);
x = [ones(m , 1) , x];
theta = [0 , 0]';
X0 = [x , y , theta];
options = optimset('GradObj' , 'on' , 'MaxIter' , 1500);
[x , val] = fminunc(@computeCost , X0 , options)
这里是成本函数,它返回梯度以及成本函数的值。
function [J , gradient] = computeCost(x , y , theta)
m = length(y);
J = (0.5 / m) .* (x * theta - y )' * (x * theta - y );
gradient = (1/m) .* x' * (x * theta - y);
end
数据集的长度为50,即维度为50 x 1。我没有得到应该如何将X0 传递给fminunc 的部分。
更新的驱动程序代码:
x = load('/home/battousai/Downloads/ex2Data/ex2x.dat');
y = load('/home/battousai/Downloads/ex2Data/ex2y.dat');
m = length(y);
x = [ones(m , 1) x];
theta_initial = [0 , 0];
options = optimset('Display','iter','GradObj','on' , 'MaxIter' , 100);
[X , Cost] = fminunc(@(t)(computeCost(x , y , theta)), theta_initial , options)
成本函数的更新代码:
function [J , gradient] = computeCost(x , y , theta)
m = length(y);
J = (1/(2*m)) * ((x * theta) - y )' * ((x * theta) - y) ;
gradient = (1 / m) .* x' * ((x * theta) - y);
end
现在我将theta 的值设为[0,0],但是当我使用正规方程时,theta 的值变成了[0.750163 , 0.063881]。
【问题讨论】: