吴恩达机器学习课程(一)之梯度下降原理
来源:互联网 发布:淘宝api 编辑:程序博客网 时间:2024/06/08 19:20
梯度下降法
对于线性回归分析,我们将假设函数定义为
h(x)=θ0+θ1x1+⋯+θnxn
令x0=1,记x=(x0x1⋯xn),θ=⎛⎝⎜⎜⎜⎜θ0θ1⋮θn⎞⎠⎟⎟⎟⎟
因为假设函数与参数θ 有关,记hθ(x)=h(x)=xθ
对于每一个训练样本X(i)=(xi0,xi1,⋯,xin) ,假设函数与样本输出值存在误差hθ(Xi)−yi,那么损失函数定义为:J(θ)=12∑ni=1(hθ(Xi)−yi)2
目标函数定义为minθJ(θ)=12∑ni=1(hθ(Xi)−yi)2 梯度下降的迭代算法
梯度下降法的原理是每次沿着梯度的方向去更新参数,更新公式为
θi=θi−α∂J(θ)∂θi
其中∂J(θ)∂θi=∑mi=1(hθ(Xi)−yi)∂(hθ(Xi)−yi)∂θi
对于样本数量m=1情况,∂(hθ(Xi)−yi)∂θi=∂(θ0+θ1x1+⋯+θnxn−yi)∂θi=xi
所以参数θi=θi−α(hθ(Xi)−yi)xi
所以当样本数量大于1的情况,梯度下降过程为:
θi=θi−α∑mj=1hθ(Xj)−yj)xji
由于每个参数的求解都需要整个样本数据集的迭代,称为批量随机梯度下降法,收敛速度慢
为了加快训练速度,采用随机梯度下降法,这种方法是通过随机选取一组样本进行参数迭代,训练速度较快,但是会存在噪声,使得参数迭代不是向着整体最优方向,此时可以采用小批量随机梯度下降,这种方法的是选取小批量样本进行参数的迭代,三种方法的python代码如下:
x = [[1,4],[2,5],[5,1],[4,2]]y= [19,26,19,20]theta = [1,1] #参数初始值alpha = 0.1#学习率max_iter = 10000 #最大迭代次数iter_count = 0 #当前迭代次数loss = 10 #当前误差eps = 0.0001 #精度err1 = [0,0,0,0] err2 = [0,0,0,0]while loss>eps and iter_count<max_iter: loss = 0 err1sum = 0 err2sum = 0 for j in range(4): predict_y = x[j][0]*theta[0]+x[j][1]*theta[1] err1[j] = (predict_y-y[j])*x[j][0] err1sum += err1[j] err2[j] = (predict_y-y[j])*x[j][1] err2sum += err2[j] theta[0] = theta[0]-alpha*err1sum/4 #损失函数一般要做平均 theta[1] = theta[1]-alpha*err2sum/4 for j in range(4): predict_y = x[j][0]*theta[0]+x[j][1]*theta[1] loss += (1/(2*4))*(predict_y-y[j])**2 iter_count += 1print(theta)###随机梯度下降SGDimport randomx = [[1,4],[2,5],[5,1],[4,2]]y= [19,26,19,20]theta = [1,1] #参数初始值alpha = 0.01#学习率max_iter = 10000 #最大迭代次数iter_count = 0 #当前迭代次数loss = 10 #当前误差eps = 0.0001 #精度error = 0while loss>eps and iter_count<max_iter: loss = 0 i = random.randint(0,3)#随机抽取一组样本 predict_y = x[i][0]*theta[0]+x[i][1]*theta[1] theta[0] = theta[0]-alpha*(predict_y-y[i])*x[i][0]#损失函数一般要做平均 theta[1] = theta[1]-alpha*(predict_y-y[i])*x[i][1] for i in range(4): predict_y = x[i][0]*theta[0]+x[i][1]*theta[1] error = 0.5*(predict_y-y[i])**2 loss += error iter_count += 1print(theta)###小批量随机梯度下降MBGDimport randomx = [[1,4],[2,5],[5,1],[4,2]]y= [19,26,19,20]theta = [1,1] #参数初始值alpha = 0.01#学习率max_iter = 10000 #最大迭代次数iter_count = 0 #当前迭代次数loss = 10 #当前误差eps = 0.0001 #精度error = 0while loss>eps and iter_count<max_iter: loss = 0 #这里随机选取2组样本更新theta i = random.randint(0,3)#随机抽取一组样本 j = (i+1)%4 predict_y0 = x[i][0]*theta[0]+x[i][1]*theta[1] predict_y1 = x[j][0]*theta[0]+x[j][1]*theta[1] theta[0] = theta[0]-alpha*1/2*((predict_y0-y[i])*x[i][0]+(predict_y1-y[i])*x[j][0])#损失函数一般要做平均 theta[1] = theta[1]-alpha*1/2*((predict_y0-y[i])*x[i][1]+(predict_y1-y[i])*x[j][1]) for i in range(4): predict_y = x[i][0]*theta[0]+x[i][1]*theta[1] error = 0.5/2*(predict_y-y[i])**2 loss += error iter_count += 1print(theta)
梯度下降的矩阵算法
定义梯度
▽θJ=⎛⎝⎜⎜⎜⎜⎜⎜⎜∂J∂θ0∂J∂θ1⋮∂J∂θn⎞⎠⎟⎟⎟⎟⎟⎟⎟
以下说明几个公式,不懂的可以去看线性代数的知识
定义矩阵的迹trA=∑ni=1Aii,那么根据矩阵性质有trA=trAT,trAB=trBA,trABC=trCAB=trBCA,trABATC=CAB+CTABT,tra=a(a∈R)
对于整个数据集X=⎛⎝⎜⎜⎜⎜X1X2⋮Xm⎞⎠⎟⎟⎟⎟,其中Xi=(xi0xi1⋯xin)
j假设函数h=Xθ=⎛⎝⎜⎜⎜⎜X1θX2θ⋮Xmθ⎞⎠⎟⎟⎟⎟=⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜hθ(X1)hθ(X2)⋮hθ(Xm)⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟
Xθ−y=⎛⎝⎜⎜⎜⎜⎜hθ(X1)−y1hθ(X2)−y2⋮hθ(Xm)−ym⎞⎠⎟⎟⎟⎟⎟ ,所以损失函数计算公式为
J(θ)=12(Xθ−y)T(Xθ−y)=12∑mi=1(hθ(Xi)−yi)2
▽θJ(θ)=12▽θtr(Xθ−y)T(Xθ−y)=12▽θtr(θTXTXθ−θTXTy−yTXθ+yTy)
▽θtr(θTXTXθ)=▽θtr(θIθTXTX)=XTXθI+XTXθIT=2XTXθ
▽θtr(yTXθ)=XTy,▽θtr(θTXTy)=▽θtr(yTXθ)=XTy,▽θtr(yTy)=0
所以▽θJ(θ)=12(2XTXθ−2XTy)=XTXθ−XTy
当梯度等于0时,有θ=(XTX)−1XTy ,这就是梯度下降的矩阵算法
- 吴恩达机器学习课程(一)之梯度下降原理
- 斯坦福《机器学习》课程算法matlab实现之梯度下降算法——直线回归(一)
- Andrew Ng机器学习课程(一) - Python梯度下降实战
- 机器学习(斯坦福课程2)梯度下降
- 机器学习之梯度下降
- 斯坦福机器学习课学习笔记(一)-梯度下降
- 机器学习(一):监督学习应用:梯度下降
- 监督学习之梯度下降——Andrew Ng机器学习笔记(一)
- 机器学习笔记(一):梯度下降算法,随机梯度下降,正规方程
- Andrew Ng机器学习笔记(一):梯度下降法
- 机器学习入门:线性回归及梯度下降(一)
- 机器学习(一)回归(regression)、梯度下降(gradient descent)
- 机器学习第十周(一)--随机梯度下降
- 机器学习之梯度下降学习笔记
- 机器学习算法入门之(一)梯度下降法实现线性回归
- 梯度下降与线性回归--《机器学习》课程学习笔记
- 机器学习课程学习--梯度下降GradientDscent的理解
- 机器学习之第一站:线性回归与梯度下降法[一]——原理与实现
- 漂亮的Adapter模式-体会RecyclerView的设计实现
- 手把手教你webpack3(8)url-Loader配置简述
- Spring注解方法学习笔记
- Java设计模式之责任链模式
- 第一章作业2-算法时间复杂度和空间复杂度
- 吴恩达机器学习课程(一)之梯度下降原理
- 100种数据恢复的方法?!
- C++ expected initializer before 'myfile'
- 冒泡排序
- Samba
- Android Studio生成UML图
- Git安装配置教程
- LOJ6012「网络流 24 题
- MATLAB2012b license过期