吴恩达机器学习入门笔记3-线性回归

3 线性回归

3.1 最小二乘法

试图找到一条直线,使所有样本到直线上的欧式距离之和最小

3.2 代价函数

cost function,往往令其最小化

单变量线性回归假设函数
(3.1) h ( θ ) = θ 0 + θ 1 x h(\theta)=\theta_0+\theta_1x\tag{3.1} h(θ)=θ0+θ1x(3.1)
[外链图片转存失败(img-uwFyHX2d-1568602098755)(E:\Artificial Intelligence Markdown\Machine Learning\pictures\3.2 代价函数.png)]

3.2.1 梯度下降法

不停进行 θ \theta θ迭代计算使代价函数J最小化

[外链图片转存失败(img-0joBWK6T-1568602098756)(E:\Artificial Intelligence Markdown\Machine Learning\pictures\3.2.1 梯度下降法梗概.png)]

[外链图片转存失败(img-E8lb3O2J-1568602098757)(E:\Artificial Intelligence Markdown\Machine Learning\pictures\3.2.1 梯度下降法直观解释.png)]

  • α \alpha α过小,代价函数需要很多步才能到达全局最低点
  • α \alpha α过大,代价函数可能会越过最低点,导致不收敛甚至发散
  • 正常选取 α \alpha α后,下降过程中接近局部最低点时,因为局部最低点导数为0,因为斜率变小,梯度下降的幅度也会越来越小,因此无需担心 α \alpha α过大导致不收敛
  • 如果代价函数已经到达局部最优点,下次参数数值便不会更新
(a)Batch梯度下降法

每次梯度下降均使用整个训练集的数据

3.2.2 代价函数-平方误差函数

(3.2) J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x i ) − y i ) 2 J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x_i)-y_i)^2\tag{3.2} J(θ)=2m1i=1m(hθ(xi)yi)2(3.2)

[外链图片转存失败(img-Mwb2RX9I-1568602098761)(E:\Artificial Intelligence Markdown\Machine Learning\pictures\3.2.2 平方误差函数.png)]

3.3 多元线性回归

多元即多个未知数 x x x,多个参数 θ \theta θ,其中 x 0 = 1 x_0=1 x0=1
(3.3) h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n = θ T x h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+\cdots+\theta_nx_n=\theta^Tx\tag{3.3} hθ(x)=θ0+θ1x1+θ2x2++θnxn=θTx(3.3)

x = [ x 0 x 1 x 2 ⋮ x n ] θ = [ θ 0 θ 1 θ 2 ⋮ θ n ] x=\left[\begin{matrix}x_0\\x_1\\x_2\\\vdots\\x_n\end{matrix}\right] \theta=\left[\begin{matrix}\theta_0\\\theta_1\\\theta_2\\\vdots\\\theta_n\end{matrix}\right] x=x0x1x2xnθ=θ0θ1θ2θn

3.3.1 多元梯度下降法

[外链图片转存失败(img-yv969LKY-1568602098763)(E:\Artificial Intelligence Markdown\Machine Learning\pictures\3.3.1 多元梯度下降法.png)]

增快梯度下降速度的技巧

  • 特征缩放,接近[-3 3],过大过小都需要改变[外链图片转存失败(img-PpkdibbU-1568602098765)(E:\Artificial Intelligence Markdown\Machine Learning\pictures\3.3.1 加速下降_确保取值范围归一.png)]
  • 每个特征值减去总特征值的平均
  • x 1 ← x 1 − μ 1 S 1 x_1\leftarrow\frac{x_1-\mu_1}{S_1} x1S1x1μ1 S 1 S_1 S1为特征值范围

确保代价函数下降正确方法

  • 降低学习率 α \alpha α:eg:0.003 0.03 0.3尽可能大
  • 画出 J ( θ ) J(\theta) J(θ)-迭代次数的曲线,确保其随着次数增加函数减小

依据经验选择不同特征进行线性回归

3.3.2 正规方程

无需进行多次迭代运算即可得到合适的参数 θ \theta θ值使代价函数下降到最小
(3.4) θ = ( X T X ) − 1 X T y \theta=(X^TX)^{-1}X^Ty\tag{3.4} θ=(XTX)1XTy(3.4)
X为特征矩阵,y为特征计算的真实值[外链图片转存失败(img-OfzAnyFH-1568602098766)(E:\Artificial Intelligence Markdown\Machine Learning\pictures\3.3.2 正规方程.png)]

3.3.3 梯度下降法和正规方程的优缺点
梯度下降法正规方程
缺点1.需要选择学习率 α \alpha α
2.需要多次迭代计算
1. ( X T X ) − 1 (X^TX)^{-1} (XTX)1计算复杂
优点计算速度受特征变量维度影响小1.无需考虑学习率
2.无需进行迭代计算
  • 特征变量<10000可采用正规方程,再大则选取梯度下降法

3.4 编程tips

3.4.1 matlab

有关代码风格

  1. %%一段结束后空一行阅读容易
  • 作梯度下降时,进行代价函数偏导计算记得给求和后矩阵转置,令参数量与参数改变量对应

θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 x j ( i ) \theta_j:=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2x_j^{(i)} θj:=θjαm1i=1m(hθ(x(i))y(i))2xj(i)

  • matlab中,inv(A)*B速度比A\B慢,\代表求解线性方程组Ax=B
    i n v ( X ′ X ) X = = ( X ′ X ) ∖ X inv(X&#x27;X)X==(X&#x27;X)\setminus{X} inv(XX)X==(XX)X

  • 进行对应列运算时,可采用bsxfun(fun,A,B)实现,速度更快

  • 多元变量情况下,采用向量化计算更快
    J ( θ ) = 1 2 m ( X θ − y → ) T ( X θ − y → ) J(\theta)=\frac{1}{2m}(X\theta-\stackrel{\rightarrow}{y})^T(X\theta-\stackrel{\rightarrow}{y}) J(θ)=2m1(Xθy)T(Xθy)

  • 针对多元变量的线性回归,预测新数据时需要把新数据标准化后再将矩阵右侧加一列

  • 实际上无需编些 J ( θ ) J(\theta) J(θ)只需编写其偏导数,但为了监控 J ( θ ) J(\theta) J(θ)的值确保梯度下降法正确工作,需要记录代价函数每次更新的量

  • opptions=optimset('Gradobj','On','MaxIter','100');
    initialTheta=zeros(2,1);
    [jVal,gradient]=costFunction(theta);%gradient表示梯度,即代价函数对各个参数的偏导
    [optTheta,functionval,exitFlag]=fminunc(@costFunction,initialTheta,options);%@表示地址,fminunc可使代价函数最小化
    %该函数要求参数至少为二维
    %利用设定的高级函数计算代价函数最小化时的参数值
    
  • %反向传播
    thetaVec=[Theta1(:) ; Theta2(:) ; Theta3(:)];
    DVec=[D1(:) ; D2(:) ; D3(:)];
    Theta1=reshape(thetaVec(1:110),10,11);
    Theta2=reshape(thetaVec(111:220),10,11);
    Theta1=reshape(thetaVec(221:231),1,11);
    

    [外链图片转存失败(img-KrwH0cp0-1568602098767)(E:\Artificial Intelligence Markdown\Machine Learning\pictures\3.4.1 反向传播matlab算法.png)]

  • maltab中sum(A.^2)与A*A’的值有略微不同

  • 编程时注意使用矩阵,使函数满足不同维数的情况

  • SVM程序包一般会自动加上偏置量 x 0 = 1 x_0=1 x0=1,因此无需额外添加

  • 使用svmTrain时记得应用训练集而不是交叉验证集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值