梯度下降法原理和实现
2019-01-25 21:14
253 查看
在机器学习算法中,在最小化损失函数时,可以通过梯度下降法来一步一步的迭代求解,得到最小化的损失函数。梯度下降不一定能找到全局的最优解,有可能是一个局部的最优解。当损失函数是一个凸函数时,梯度下降就一定能得到最优解。梯度下降的相关概念有:
步长。步长决定在梯度下降的过程中,每一步沿梯度负方向前进的长度。
特征。指的是样本特征。
假设函数:在监督学习中,为了拟合输入样本,而使用假设函数。
损失函数:为了评估模型的好坏。通常用损失函数来度量拟合的程度。损失函数最小化,意味着拟合程度较好,参数对于模型是最优的。损失函数通常采用假设函数和样本输出的差取平方。
梯度下降详细算法
(1)先决条件
我们可以对假设函数进行一个简化,增加一个特征x0=1, 这样
对于上述的假设函数,损失函数为:
这里的系数不影响取极值时对应的模型参数值,仅影响损失函数的值。我们关心的是对应的模型参数值,所以系数可以根据使求导更加简单易化简的方式自定义。
(2)参数初始化
主要初始化特征参数θ,算法终止距离ε以及步长α。在没有任何先验知识的时候,通常设所有θ为0,步长为1.
(3)算法过程
1.确认损失函数,对θi求偏导。
2.用步长乘以损失函数的梯度,得到当前下降的距离。
3.确认是否所有θ的梯度下降距离都小于ε,如果是则算法终止,当前所有θ即为最终结果,否则进入步骤4。
4.更新所有的θ,对于θi其更新表达式如下,更新完成后继续转入步骤1。
θ_i=θ_i-α ∂/(∂θ_i ) J(θ_0,θ_1,…θ_n)
对梯度下降模拟的代码如下:
import numpy as np import matplotlib.pyplot as plt plot_x=np.linspace(-1,6,141) plot_y=(plot_x-2.5)**2-1 #进行可视化 plt.plot(plot_x,plot_y) plt.show()
def dJ(theta): return 2*(theta-2.5) def J(theta): return (theta-2.5)**2-1 theta=0.0 eta=0.1 epsilon=1e-8 theta_history=[theta] i_iter=0 n_iter=1e4 while i_iter<n_iter: gradient=dJ(theta) last_theta=theta theta=theta-eta*gradient theta_history.append(theta) if(abs(J(theta)-J(last_theta))<epsilon): break i_iter+=1 plt.plot(plot_x,J(plot_x)) plt.plot(np.array(theta_history),J(np.array(theta_history)),color='r',masker='+') plt.show()
视频课笔记,如有侵权删,欢迎批评指正,谢谢。
相关文章推荐
- 机器学习算法 原理、实现与实践 —— 感知机与梯度下降
- 梯度下降原理及Python实现
- 梯度下降法快速教程 | 第二章:冲量(momentum)的原理与Python实现
- 梯度下降法快速教程 | 第三章:学习率衰减因子(decay)的原理与Python实现
- 梯度下降原理及线性回归代码实现(python/java/c++)
- 线性回归与梯度下降法[一]——原理与实现
- 机器学习之第一站:线性回归与梯度下降法[一]——原理与实现
- 回归与梯度下降法及实现原理
- 机器学习算法 原理、实现与实践 —— 感知机与梯度下降 神经网络
- 线性回归、梯度下降原理介绍与案例python代码实现
- 梯度下降原理及Python实现
- 机器学习算法 原理、实现与实践 —— 感知机与梯度下降
- 梯度下降原理及Python实现
- 梯度下降原理及Python实现
- 线性回归与梯度下降法——原理与实现
- 机器学习深度学习基础笔记(2)——梯度下降之手写数字识别算法实现
- 随机梯度下降和批量梯度下降的原理和区别
- python最优化-梯度下降实现
- 梯度下降法及其Python实现
- 深入浅出--梯度下降法及其实现