策略分享

量化机器学习系列分享(三)逻辑回归与优化方法

由dontbelazy创建,最终由dontbelazy 被浏览 65 用户

1. 逻辑回归

1.1 分类问题的定义

分类问题的标签是离散型的变量,我们的目的是用特征,来预测标签归属于几个类别当中的某一种

  • 如果是预测标签属于两个类别当中的哪一种,就叫二分类问题,比方说预测股票明天是涨,还是不涨,两个类别
  • 如果是预测标签属于多个类别当中的哪一种,就叫多分类问题,比方说预测股票明天是涨,还是跌,还是不涨不跌,还是涨停,还是跌停,五个类别

本次分享我们主要讨论二分类问题

对于二分类问题,我们需要把定性的类别,转换为定量的数字,来让计算机理解类别的概念

  • 一种做法是将一个分类定义为1,另一个分类定义为0,比方说预测股票明天是涨,还是不涨,可以将涨定义为1,不涨定义为0(传统模型常用)
  • 一种做法是将一个分类定义为1,另一个分类定义为-1,比方说预测股票明天是涨,还是不涨,可以将涨定义为1,不涨定义为-1(深度神经网络模型常用)

对于机器学习来说,计算机并不是直接预测标签是0还是1是

  • 机器学习模型将这个问题转化为了预测标签为1的概率

  • 标签为0的概率不用另外预测,直接用1减去标签为1的概率,就是标签为0的概率了

得到了标签为1的概率和标签为0的概率以后,我们只是得到了概率而已,那么标签到底是1还是0呢

  • 通常的做法是,如果标签为1的概率大于0.5(P(Y=1|X)>0.5),那么标签就为1,否则标签就为0
  • 例如,如果预测出来股票明天涨的概率为0.7,那么我们就认为股票明天会涨;如果预测出来股票明天涨的概率为0.4,那么我们就认为股票明天不会涨;

\

1.2 线性回归在分类问题上的局限性

线性回归用于回归问题时,Y是一个连续型变量,取值可以是Y定义域上的任何值,表达式与拟合图像(只有一个特征)为:

如果直接用线性回归去解决分类问题,Y是一个离散型变量,取值只能是0或1,表达式与拟合图像(只有一个特征)为:


可以看出,在分类问题上,线性回归有以下的一些问题

  • 线性回归预测出来的,标签为1的概率(P(Y=1|X),第二张图里的斜向上的蓝线)是可能大于1或小于0的,这对于概率来说是无意义的
  • 线性回归是容易收到极端值的影响的,可以想象一下,如果在第二张图里,有一个数据的位置在很右上角的位置(X很大,Y为1),那么蓝色的拟合线就会因为它而很大程度向右偏移

因此我们需要对线性回归模型,进行改进,以解决这两个问题,让线性回归更适合分类问题

\

1.3 逻辑回归

1.3.1 逻辑回归的定义

逻辑回归(Logistic Regression),是将线性回归表达式的右半边,套在一个逻辑函数(Logistic Function)里,从而去预测P(Y=1|X),其表达式和拟合图像为

可以看出,逻辑回归可以解决,线性回归在分类问题上的两个问题

  • 逻辑函数的值域为0-1之间,所以逻辑回归预测出来的概率,不会比0小,也不会比1大
  • 如果有极端值的话,例如在上图里,有一个数据的位置在很右上角的位置(X很大,Y为1),蓝色的拟合线基本不用变化,就可以照顾到这个极端值

\

1.3.2 逻辑回归的参数估计

回顾一下线性回归的参数估计,我们要想在线性回归中将beta估计出来,我们的优化目标是最小化MSE,说白了是找到能让MSE取最小的beta:

要想找到能让MSE取最小的beta,其实方法很简单,就和我们中学时候学的求函数最小值的方法一样,求导等于0后解方程,所以beta其实就是这么解出来的

  • 虽然这是矩阵版本的求导与解方程,但是它本质上就是用求导等于0再解方程的方法求beta参数值
  • 最终我们可以将方程的等式整理为,beta在左边,其他一些东西在右边的形式


在逻辑回归中,我们的最优化目标是最小化交叉熵(Cross Entropy)

我们以同样的思路去求beta

  • 在交叉熵式子中对beta求导数,之后再令求导的式子为0,然后解出beta
  • 但是,这个式子非常复杂,在这个式子中,想要对于beta求个导都是个不可能的事情,更别说解接下来的方程了
  • 因此,我们需要一些别的方法,来求得这个,可以让交叉熵的式子取得最小的beta
  • 但是,不论用什么样的方法,机器学习中参数求解的原则依然是不变的,找到可以让损失函数最小的参数

\

1.4 梯度下降法与牛顿拉弗森法

假如给你这样一道中学时候学的开口向上的二次函数f(x) = x^2 - x - 2,让你求解,在x等于多少的时候函数取得最小值,我们还记得公式x=-2a/b=0.5时取得最小

但是如果说,我们不知道解方程的方法,而用一种”一步一步慢慢试”的方法,想把这个解试出来的话,梯度下降法与牛顿拉弗森法就提供了这样的两种思路

1.4.1 梯度下降法

梯度下降法的思路是:

  • 我们可以随机从一点开始试,比方说我们先随便猜一个x=3,
  • 猜完之后我们也不确定x=3时,f(x)是不是取得最小
  • 接着我们可以看看两边的值是不是更小,其实并不用左右两边的值都看,因为我们可以对函数求一个导数,此处的导数为正的话,一定是左边小右边大的,所以我们试一试左边就好了
  • 我们先往左走1的步长到x=2,然后同理看一看左边的值会不会更小,更小的话就再往左走一步
  • 我们再往左走1的步长到x=1,然后同理看一看左边的值会不会更小,更小的话就再往左走一步
  • 我们再往左走,但是这时候的步长就要小一些了,因为此时的坡度很缓了,更可能接近我们想要的最小值了,所以要谨慎一点慢慢走,比方说我们往左0.1的步长到x=0.9
  • 当我们从x=0.9开始往左一点一点走的时候,0.8, 0.7, 0.6…我们可以计算出对应的f(x)值为-2.09, -2.16, -2.21, -2.24,我们发现f(x)的变化越来越小了,那么我们就不想接着尝试了,到0.6就停止了

梯度下降法的公式为:

这当中有两个灵魂元素:

  • 导数项不仅可以告诉算法哪边的值更小,还可以智能地根据坡度调整每次的步长,坡度大就多走点,坡度小就少走一点
  • alpha学习率:规定了整体步长

1.4.2 牛顿拉弗森法

牛顿拉弗森法的思路和梯度下降法是一样的,都是每次向值更低的地方去移动,直到函数值变化的越来越小为止

  • 但是牛顿拉弗森法并没有一个固定的学习率,它的学习率是由函数的二阶导数的倒数决定的,
  • 二阶导数的倒数做学习率可以做到更灵活地调整步长

牛顿拉弗森法的公式为:

  • 其中H是二阶导数的矩阵形式
  • H-1就表示二阶导数的逆,相当于普通运算的倒数

\

1.5 逻辑回归的代码实现

https://bigquant.com/codeshare/0462578a-e056-414c-b10c-695f46298010

\

2. 优化方法进阶

我们本次分享中提到的优化方法,都是适用于大部分机器学习算法的,不仅仅是逻辑回归

\

2.1 高维优化示意图

当模型中有一个参数的时候,我们只需要沿着一个维度找全局最优参数,这种情况用二维图像就可以表示

  • X轴为唯一的参数值
  • Y轴为损失函数

当模型有两个参数的时候,我们需要沿着两个维度找全局最优参数,这种情况要用三维图像表示

  • X1轴为第一个参数值
  • X2轴为第二个参数值
  • Y轴为损失函数

像我们的逻辑回归模型,有K个参数,那就要用K+1维图像表示了,当然K+1维图像我们是画不出来的,但是我们可以抽象的理解,在一个K+1维空间中,有那么一个点,在这个点上,损失函数的值是最低的

\

2.2 传统优化方法的局限性

2.2.1 卡在局部最优

上面介绍到的优化方法,不论是梯度下降,还是牛顿拉弗森法,都有一个共同的缺点,那就是可能只找到局部最优而非全局最优

例如以下函数中想要求解使得f(x)取最小的x,

  • 如果我们从右上角出发的话,我们就会卡在x=6左右,认为x=6就是最优解
  • 但是明显最优解在x=0.8左右

一些比较直接的解决方式是:

  • 设置一个大一点的学习率,这样步长也会很大,争取越过局部最优
  • 多尝试几个初始位置,比方说我们如果从左上角开始,那么就会避开局部最优,直接达到全剧最优

除了这些方法外,我们还可以改进一些优化算法,做到避开局部最优的目的

\

2.2.2 卡在鞍点

鞍点是高维优化中常遇到的一个问题,鞍点的导数为0,但是既不是最高点,也不是最低点,如下图所示

避免卡在鞍部主要是用一些改进的优化算法

\

2.3 优化算法改进版

2.3.1 动量方法(Momentum)

动量方法,也称惯性方法,顾名思义,我们在从高到低找全局最优的时候,我们希望下降的过程可以有一个惯性,到了局部最优以后,可以借助惯性冲出去

动量方法的优化公式为

  • beta为动量系数
  • alpha为学习率

\

2.3.2 自适应梯度方法(AdaGrad)

自适应梯度方法的思想,是高维优化的时候,不同特征X,更新率不同,自适应梯度方法主要为了避免卡在鞍部

  • 经常更新的特征,以后少更新一些
  • 不经常更新的特征,以后多更新一些

自适应梯度方法的公式如下

  • 其中gi^2代表了第i个特征到目前为止更新了的梯度的平方和
  • epsilon通常设置为0.000001,目的是避免除0错误

\

2.3.3 自适应矩估计算法(Adam)

自适应矩估计法,是将以上两种方法,动量方法,与自适应梯度方法,二者的思想合二为一,是机器学习算法中最常用的优化方法

  • 既使用动量来避免局部最优
  • 又使用不同特征不同更新率来避免鞍部

自适应矩估计法的公式为

  • 带m的项是考虑动量
  • 带v的项是考虑自适应更新率

\

{link}