量化机器学习系列分享(三)逻辑回归与优化方法
由bq2qbou2创建,最终由bq2qbou2 被浏览 123 用户
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就表示二阶导数的逆,相当于普通运算的倒数
\