第一次手撸梯度下降(MATLAB)记录一下

开心的一匹

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;

输入:

xy
1 11
1 22
1 33

输出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初试值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值