回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析;如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。常用的方法有梯度下降法和最小二乘法。

1.梯度下降法(GD)

1.1 原理:

        

        其中,为学习速率或步长(Learning rate)

1.2 假设函数:

        

1.3 损失函数:

         

1.4 分析过程:

        1.4.1 批量梯度下降法(BGD)

               批量梯度下降法,是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有m个的样本来进行更新。更新公式为:

                

        1.4.2 随机梯度下降法(SGD)

                随机梯度下降法,其实和批量梯度下降法原理类似,区别在与求梯度时没有用所有的m个样本的数据,而是仅仅选取一个样本 i
来求梯度。更新公式为:

                

             
  随机梯度下降法,和4.1的批量梯度下降法是两个极端,一个采用所有数据来梯度下降,一个用一个样本来梯度下降。自然各自的优缺点都非常突出。对于训练速度来说,随机梯度下降法由于每次仅仅采用一个样本来迭代,训练速度很快,而批量梯度下降法在样本量很大的时候,训练速度不能让人满意。对于准确度来说,随机梯度下降法用于仅仅用一个样本决定梯度方向,导致解很有可能不是最优。

        1.4.3 小批量梯度下降法(MBGD)

               
 小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,我们采用x个样子来迭代,1<x<m。一般可以取x=10,当然根据样本的数据,可以调整这个x的值。更新公式为:

                

1.5 算法调优:

        在使用梯度下降法时,需要进行调优。哪些地方需要调优呢?

    ①
算法的步长选择。在前面的算法描述中,我提到取步长为1,但是实际上取值取决于数据样本,可以多取一些值,从大到小,分别运行算法,看看迭代效果,如果损失函数在变小,说明取值有效,否则要增大步长。前面说了。步长太大,会导致迭代过快,甚至有可能错过最优解。步长太小,迭代速度太慢,很长时间算法都不能结束。所以算法的步长需要多次运行后才能得到一个较为优的值。对于步长,可以使用下列数据进行测试:

         
  0.001、0.01、0.1、1、10...,或者可以用0.001、0.003、0.01、0.03、0.1、0.3、1...,即可以用3倍或10倍的速度,将其慢慢调整到一个区间,然后再进行微调

    ②
算法参数的初始值选择。初始值不同,获得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;当然如果损失函数是凸函数则一定是最优解。由于有局部最优解的风险,需要多次用不同初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。

    ③
归一化。 由于样本不同特征的取值范围不一样,可能导致迭代很慢,为了减少特征取值的影响,可以对特征数据归一化,也就是对于每个特征x,求出它的期望和标准差std(x),然后转化为:

            

            这样特征的新期望为0,新方差为1,迭代速度可以大大加快。

2.最小二乘法(OLS)

矩阵表达式: 

令:

        ,

那么,

                

当然,有可能不存在,这种情况是极少数。如果不可逆,则一般考虑下面两种情况:

        (1)移除冗余特征。某一些特征之间存在线性依赖

        (2)特征太多时,删除一些特征,比如(m<n),对于小样本数据使用正则化。

3.梯度下降法和最小二乘法的选择

梯度下降法 最小二乘法

缺点:

* 需要选择学习率
* 需要多次迭代
* 特征值范围相差太大时,需要归一化
优点:

* 当特征数n很大时,能够较好的工作
优点:

* 不需要选择学习率
* 不需要多次迭代
* 不需要归一化
缺点:

* 当特征数n很大时,运算的很慢,因为求逆矩阵比较慢

通常情况下,当n<10000时,用最小二乘法。当n>=10000时,考虑用梯度下降法。

一些更复杂的算法下只能选择梯度下降法

技术
©2019-2020 Toolsou All rights reserved,
hive大量小文件处理方法总结苹果不送充填器耳机真为环保?可能还是为了赚钱吧 Unity3D Input按键系统灰色预测使用正交表法设计测试用例函数基本定义和使用‘未完待续face_recognition的5个应用实例VaR - 风险价值 - 蒙特卡罗法 - Python一个猜数字的小游戏,用JavaScript实现k8s入门到放弃--k8s重要概念