吕洋洋
某大型资管公司在职量化策略研究员,熟悉数据清洗工作,擅于运用宏观因子、行业因子等进行对期货品种价格影响建模与相关性分析,理解机器学习多元回归法,SVM,XGboost,金融时间序列等底层算法逻辑,部分算法可自定义函数封装。掌 握各种机器学习包与数据计算分析包的运用。包括不限于:Alphalens,pandans,爬虫技术,sklearn,statsmodels 等。
『正文』
ˇ
从新的一年开始,立的flag要一步一步逼迫自己完成。今天第一篇分享的是手撸机器学习算法,这里不仅有算法的数学推导公式,还有demo代码的实现。也算是给自己提高一些数学素养了吧。
梯度下降法,顾名思义……em……算了,百度一个吧。
梯度下降法(gradient descent),又名最速下降法(steepest descent)是求解无约束最优化问题最常用的方法,它是一种迭代方法,每一步主要的操作是求解目标函数的梯度向量,将当前位置的负梯度方向作为搜索方向(因为在该方向上目标函数下降最快,这也是最速下降法名称的由来)。
梯度下降法特点:越接近目标值,步长越小,下降速度越慢
在用梯度下降法结合线性回归之前呢,我先给大家用一个很通俗易懂的方法跟大家解释一下,梯度下降法的数学基本表达。请看下面截图。
我们假设一个函数,y=x^2+2x+5 求这个函数的最小值,众所周知,要对函数求导,让一阶导函数等于0。那么当x=-1的时候,导数等于0。但是,如何用梯度下降法去求解呢?也很简单,第一个照片的前半部分:X -= x-α*导数。
我们先假设一个步长alpha,然后在初始化一个x,也就是照片中的theta,然后一次一次的循环往复,循环的次数也是一个经验值。根据梯度下降的循环公式,按照照片中的假设定义,我们第一次梯度下降得出来的theta=2.52,然后从2.52在进行循环,如下图所示:
第二次循环,我们得到theta=2.0976,循环往复下去,这个theta会在一个临界值点稳定下来,那么这个点或者说临界值就是我们要找的最终下降的点,整个过程称为“梯度下降法”。
上面是本人手写的笔记,下面是demo代码。
注意:
1、alpha不能过大,因为过大会导致 梯度下降不能收敛。
例如下图所示:
2、设置最后一个迭代的数值与上一次的迭代的数值的差值,小于一个特别特别小的数,说明下降稳定了,就可以停止迭代
当我们加大迭代次数后,,我们可以看到最终我们想要的结果,x=-1
以上就是梯度下降的基本原理,其实甚是简单,但是还不知道为什么全网少有能最接地气的方式讲明白的。
下面,我继续来分享如何与线性回归放在一起,求解线性回归,其实梯度下降降法和最小二乘法是殊途同归的两种方式。
如下图所示:
注释:我们先有一个假设函数,也就是h(x)(theta就不打了),这个函数是theta(i)*x(i)的乘积再连加,连加符号i=0到n,n指的就是特征数,也就是自变量x的个数。
代价函数或者叫成本函数,就是假设函数减去真实值的差再求平方。这一部分其实就是最小二乘法中的计算。
实际中,我们的函数可能是N维的,我们在求偏导过程中,以j来表示,当j=0时候,就是对theta(0)求偏导,以此类推。
还有一个需要提醒的是,一般往往机器学习中的向量指的都是列向量,如果没有特殊情况,那么转置后就是行向量。
J(theta)对theta1(j)进行求偏导,整个偏导过程如下图所示:
在函数内部偏导过程中,我们将h(x)变换为向量点积连加求和的形式,在手稿里面我用了f用以区分前面i=1到m的连加,实际上不区分也没什么。在theta(f)*x(f)(i) - y(i)这个展开式中,f实际也是从0开始,那么如下图箭头所指,其余项均是常数项,求导为0,剩下f中的j项,那么最终也就剩下了theta(j)前面的系数 X(j)
注释:i表示的是特征数,在右上角的角标里面代表的是第i个数据,也就是说当j=0,i=1表示的是第0个特征的,第一个数据。
最终,我们对J(theta)求完偏导后的导数,带入到上文介绍的梯度下降降法的公式里面。
下面照片是手稿中手写的一个案例。
注释:theta(0)*x(0)是展开式中的一个默认项,其中x(0) 均为1,theta项均为初始化定义,在不断的迭代过程中变化。
下面是python代码实现线性回归和梯度下降法的结合
第一步:先导入数据,然后特征归一化,定义代价成本函数
第二步:通过根据偏导后的公式,写梯度下降降法的线性回归
第三步:损失函数以及画图
通过损失函数图,我们可以看出,在迭代到200次左右,基本上成本函数值区域平稳。
至此,我们这一期从头到尾梯度下降如何与线性回归结合的,就到这里结束了。
👌
End