我实现了梯度下降算法以最小化成本函数,以获得用于确定图像是否具有良好质量的假设.我在Octave做到了.这个想法以某种方式基于Andrew Ng 的机器学习类的算法
因此,我有880个值"y",其中包含从0.5到12的值.我在"X"中有880个值,从50到300,可以预测图像的质量.
遗憾的是,算法似乎失败了,经过一些迭代后,theta的值非常小,theta0和theta1变为"NaN".而我的线性回归曲线有奇怪的价值......
这是梯度下降算法的代码:(theta = zeros(2, 1);,alpha = 0.01,iterations = 1500)
function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)
m = length(y); % number of training examples
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
tmp_j1=0;
for i=1:m,
tmp_j1 = tmp_j1+ ((theta (1,1) + theta (2,1)*X(i,2)) - y(i));
end
tmp_j2=0;
for i=1:m,
tmp_j2 = tmp_j2+ (((theta (1,1) + theta (2,1)*X(i,2)) - y(i)) *X(i,2));
end
tmp1= theta(1,1) - (alpha * ((1/m) * tmp_j1))
tmp2= …Run Code Online (Sandbox Code Playgroud) 我试图在具有单个特征和多个训练样例(m)的数据集上实现批量梯度下降.
当我尝试使用正规方程时,我得到了正确的答案但错误的答案下面的代码在MATLAB中执行批量梯度下降.
function [theta] = gradientDescent(X, y, theta, alpha, iterations)
m = length(y);
delta=zeros(2,1);
for iter =1:1:iterations
for i=1:1:m
delta(1,1)= delta(1,1)+( X(i,:)*theta - y(i,1)) ;
delta(2,1)=delta(2,1)+ (( X(i,:)*theta - y(i,1))*X(i,2)) ;
end
theta= theta-( delta*(alpha/m) );
computeCost(X,y,theta)
end
end
Run Code Online (Sandbox Code Playgroud)
y是具有目标值的向量,X是一个矩阵,第一列中包含一列和第二列值(变量).
我使用矢量化实现了这一点,即
theta = theta - (alpha/m)*delta
Run Code Online (Sandbox Code Playgroud)
... delta是一个初始化为零的2元素列向量.
成本函数J(Theta)是1/(2m)*(sum from i=1 to m [(h(theta)-y)^2]).
matlab gradient machine-learning linear-regression gradient-descent