Andrew Ng机器学习笔记(一):梯度下降法


假设线性回归方程为:

y为实际值,为了使得拟合最佳,则要实现:

注:1/2是为了计算方便,无实际意义。
方法一:梯度下降法

引入了梯度下降法,使得每一步都是向下降速度最快的那个方向,而最终也一定会收敛。(获得的是局部最优)
每一次求导选择方向最小,负方向。

具体算法如下:
每一次迭代更新一次系数:

注:=表示的是赋值的意思

经过不断的迭代之后,

α实际上是learning rate,也就是决定了步长的大小
但是越接近局部最优的时候,步长会不断地调整变小。
因为θ中有多个参数,所以每次迭代对于每个参数都需要进行梯度下降,直到J(θ)收敛到最小值。
这个方法叫做batch gradient descent。
当样本数量比较小的时候可以使用此方法,但当样本数量很大时,该方法的工作量很大,因为每一个样本每一个方向都计算了,计算量很大。
故有了随机梯度下降法,不考察所有的数据,没那么精确,总是在局部最优附近徘徊。

每一次至考虑一个样本点的最优,而不是所有样本点的误差和,收敛过程比较曲折。





几个简单的MATLAB代码例子:
1、简单的hense矩阵:

function x=fsxhesse(f,a,b)
syms x1 x2;
% fsxhesse函数 求函数的hesse矩阵;
% 本程序仅是简单的求二次函数的hesse矩阵!;
% x=fsxhesse(f)为输入函数 f为二次函数 x1,x2为自变量;
% fsx TJPU 2008.6.15
x1=a;x2=b;
fx=diff(f,'x1');     %求f对x1偏导数
fy=diff(f,'x2');     %求f对x2偏导数
fxx=diff(fx,'x1');   %求二阶偏导数 对x1再对x1
fxy=diff(fx,'x2');   %求二阶偏导数 对x1再对x2
fyx=diff(fy,'x1');   %求二阶偏导数 对x2再对x1
fyy=diff(fy,'x2');   %求二阶偏导数 对x2再对x2
fxx=subs(fxx);       %将符号变量转化为数值
fxy=subs(fxy);
fyx=subs(fyx);
fyy=subs(fyy);
x=[fxx,fxy;fyx,fyy]; %求hesse矩阵
% v=[a,b]; 
% df=jacobian(f,v);%雅克比矩阵 
% df
% df=df.'; %转置
% df
% G=jacobian(df,v);
% x=G;



2、最速下降法

function x=fsxsteep(G,f,e,a,b)
% fsxsteep函数 最速下降法
% x=fsxsteep(f,e,a,b)为输入函数 f为函数 e为允许误差 (a,b)为初始点;
% fsx TJPU 2008.6.15
x1=a;x2=b;
%Q=fsxhesse(f,x1,x2);
Q=G;
x0=[x1 x2]';
fx1=diff(f,'x1'); %对x1求偏导数
fx2=diff(f,'x2'); %对x2求偏导数
g=[fx1 fx2]'; %梯度
g1=subs(g); %把符号变量转为数值
g
g1
d=-g1;
k=0;
while (abs(norm(g1))>=e)  %norm(g1)为g1的2范数,即sqrt(x1^2+x2^2)
% for k=0:200
t=(-d)'*d/((-d)'*Q*d);%步长
%t=1/30;
x0=x0-t*g1; %迭代更新,搜索到的点
v=x0;
vpa(x0,10)%精度的位数
a=[1 0]*x0;
b=[0 1]*x0;
x1=a;
x2=b;
g1=subs(g);
d=-g1;
k=k+1;
end;
x=v;
k

3、例子:

syms x1 x2 x3;
x=[1,0.3;1,0.45;1,0.5;1,0.7];
y=[1;2;3;4];
% x=[1,1;1,2;1,4;1,4;1,5;1,7;1,7];
% y=[2;4;6;8;9;13;14];
X=[x1,x2];
fx=0;
X
X'
hh=x1.^2;
hh
for i=1:4
    fx=fx+(X*(x(i,:)).'-y(i,1)).^2;
end
fx
v=[x1,x2];
df=jacobian(fx,v);
df=df.';
G=jacobian(df,v);
z=fsxsteep(G,fx,1e-4,6,1)
a=vpa(z(1,1),5);
a
b=vpa(z(2,1),5);
b
x3=0:5;
f=a+b*x3;
f
figure(1);
plot(x3,f);
i=1;
for i=1:4
    text(x(i,2),y(i),'*');
    y(i)
end
x1=-50:2:50;x2=2*x1;
[x1,x2]=meshgrid(x1,x2);
 %Z= (x1 + 2*x2 - 2).^2 + (x1 + 3*x2 - 2).^2 + (x1 + 4*x2 - 5/2).^2 + (x1 + x2 - 1).^2;
%Z=x1.^2+10*x2.^2;
fx
fx=(x1 + x2/2 - 3).^2 + (x1 + (3*x2)/10 - 1).^2 + (x1 + (7*x2)/10 - 4).^2 + (x1 + (9*x2)/20 - 2).^2;
figure(2);
surf(x1,x2,fx)
text(10,10,100,'*****');
figure(3);
contour(x1,x2,fx,100);
text(10,10,'***');

方法二:最小二乘法

将训练特征表示为 X 矩阵,结果表示成 y 向量,仍然是线性回归模型,误差函数不变。那么

θ 可以直接由下面公式得出 


但要求X是满秩的,求矩阵的逆也比较慢


用误差函数为平方和的概率解释

假设预测结果和实际结果之间存在误差,


一般来讲,误差满足平均值为 0 的高斯分布,也就是正态分布。那么 x 和 y 的条件概率也就是 


为了要实现模型能够在全部样本上预测最准,也就是概率积最大。这个概率积成为最大似然估计。我们希望在最大似然估计得到最大值时确定 θ。那么需要对最大似然估计公式求导,求导结果是 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值