开心的一匹
function [theta,J] = myGradientDescent(X,y,alpha)
%样本个数
m = size(X,1)
if m~=size(y,1)
disp('维度错误')
end;
%输入参数的个数
n = size(X,2)
%theta的维度,并初始化theta
n_theta = n+1
theta = zeros(n_theta,1)
%为样本增加x0=1
X_1 = [ones(size(X,1),1),X]
J = zeros(m,1)
for i = 1:50
p = X_1*theta
J(i) = sum((p-y).^2)/(2*m)
%******!!!!!!
theta = theta - (alpha/m).*sum(X_1'*(p-y))
end;
输入:
x | y |
---|---|
1 1 | 1 |
1 2 | 2 |
1 3 | 3 |
输出theta:
0.5199
0.5199
0.5199
cost函数变化
心得体会:由于用矩阵运算优化算法,所以在矩阵维度的变化 要特别注意
如感叹号处代码sum括号内的运算,p-y矩阵为(m,1)矩阵,X_1为(m,n+1)相乘前因将X_1转置后与p-y相乘而不是p-y与X_1相乘
可以看到下降后算法并没有求到最优解,而这个问题显而易见的可以得出theta的值,那么算法可能掉进了局部最优解,需要对初试值进行优化,由于数据量小可以用rand函数多次运算处更合适的theta初试值