机器学习:随机梯度下降法
1.梯度下降
1)什么是梯度下降?
因为梯度下降是一种思想,没有严格的定义,所以用一个比喻来解释什么是梯度下降。
简单来说,梯度下降就是从山顶找一条最短的路走到山脚最低的地方。但是因为选择方向的原因,我们找到的的最低点可能不是真正的最低点。如图所示,黑线标注的路线所指的方向并不是真正的地方。
既然是选择一个方向下山,那么这个方向怎么选?每次该怎么走?
先说选方向,在算法中是以随机方式给出的,这也是造成有时候走不到真正最低点的原因。
如果选定了方向,以后每走一步,都是选择最陡的方向,直到最低点。
总结起来就一句话:随机选择一个方向,然后每次迈步都选择最陡的方向,直到这个方向上能达到的最低点。
2)梯度下降是用来做什么的?
在机器学习算法中,有时候需要对原始的模型构建损失函数,然后通过优化算法对损失函数进行优化,以便寻找到最优的参数,使得损失函数的值最小。而在求解机器学习参数的优化算法中,使用较多的就是基于梯度下降的优化算法(Gradient Descent, GD)。
3)优缺点
优点:效率。在梯度下降法的求解过程中,只需求解损失函数的一阶导数,计算的代价比较小,可以在很多大规模数据集上应用
缺点:求解的是局部最优值,即由于方向选择的问题,得到的结果不一定是全局最优
步长选择,过小使得函数收敛速度慢,过大又容易找不到最优解。
2.梯度下降的变形形式
根据处理的训练数据的不同,主要有以下三种形式:
1)批量梯度下降法BGD(Batch Gradient Descent):
针对的是整个数据集,通过对所有的样本的计算来求解梯度的方向。
优点:全局最优解;易于并行实现;
缺点:当样本数据很多时,计算量开销大,计算速度慢
2)小批量梯度下降法MBGD(mini-batch Gradient Descent)
把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性
优点:减少了计算的开销量,降低了随机性
3)随机梯度下降法SGD(stochastic gradient descent)
每个数据都计算算一下损失函数,然后求梯度更新参数。
优点:计算速度快
缺点:收敛性能不好
总结:SGD可以看作是MBGD的一个特例,及batch_size=1的情况。在深度学习及机器学习中,基本上都是使用的MBGD算法。
3.随机梯度下降
随机梯度下降(SGD)是一种简单但非常有效的方法,多用用于支持向量机、逻辑回归等凸损失函数下的线性分类器的学习。并且SGD已成功应用于文本分类和自然语言处理中经常遇到的大规模和稀疏机器学习问题。
SGD既可以用于分类计算,也可以用于回归计算。
1)分类
a)核心函数
sklearn.linear_model.SGDClassifier
b)主要参数(详细参数)
loss :指定损失函数。可选值:‘hinge’(默认), ‘log’, ‘modified_huber’, ‘squared_hinge’, ‘perceptron’,
"hinge":线性SVM
"log":逻辑回归
"modified_huber":平滑损失,基于异常值容忍和概率估计
"squared_hinge": 带有二次惩罚的线性SVM
"perceptron":带有线性损失的感知器
alpha:惩罚系数
c)示例代码及详细解释
import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import SGDClassifier from sklearn.datasets.samples_generator import make_blobs##生产数据 X, Y = make_blobs(n_samples=50, centers=2, random_state=0, cluster_std=0.60)##训练数据 clf = SGDClassifier(loss="hinge", alpha=0.01) clf.fit(X, Y)## 绘图 xx = np.linspace(-1, 5, 10) yy = np.linspace(-1, 5, 10)##生成二维矩阵 X1, X2 = np.meshgrid(xx, yy) ##生产一个与X1相同形状的矩阵 Z = np.empty(X1.shape) ##np.ndenumerate 返回矩阵中每个数的值及其索引 for (i, j), val in np.ndenumerate(X1):x1 = valx2 = X2[i, j]p = clf.decision_function([[x1, x2]]) ##样本到超平面的距离Z[i, j] = p[0] levels = [-1.0, 0.0, 1.0] linestyles = ['dashed', 'solid', 'dashed'] colors = 'k' ##绘制等高线:Z分别等于levels plt.contour(X1, X2, Z, levels, colors=colors, linestyles=linestyles) ##画数据点 plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.Paired,edgecolor='black', s=20) plt.axis('tight') plt.show()
d)结果图
2)回归
SGDRegressor非常适合回归问题具有大量训练样本(> 10000),对于其他的问题,建议使用的Ridge, Lasso或ElasticNet。
a)核心函数
sklearn.linear_model.SGDRegressor
b)主要参数(详细参数)
loss:指定损失函数。可选值‘squared_loss’(默认), ‘huber’, ‘epsilon_insensitive’, ‘squared_epsilon_insensitive’
说明:此参数的翻译不是特别准确,请参考官方文档。
"squared_loss":采用普通最小二乘法
"huber": 使用改进的普通最小二乘法,修正异常值
"epsilon_insensitive": 忽略小于epsilon的错误
"squared_epsilon_insensitive":
alpha:惩罚系数
c)示例代码
因为使用方式与其他线性回归方式类似,所以这里只举个简单的例子:
import numpy as np from sklearn import linear_model n_samples, n_features = 10, 5 np.random.seed(0) y = np.random.randn(n_samples) X = np.random.randn(n_samples, n_features) clf = linear_model.SGDRegressor() clf.fit(X, y)
Reference:
http://www.cnblogs.com/lc1217/p/7085034.html
机器学习:随机梯度下降法相关推荐
- 机器学习-算法背后的理论与优化(part7)--随机梯度下降法概述
学习笔记,仅供参考,有错必究 随机梯度下降法概述 机器学习场景 算法模型和损失函数 一个有监督学习算法或模型实质上是在拟合一个预测函数侧或者称为假设函数,其形式固定但参数 w ∈ R d w \in ...
- 机器学习中的数学原理——随机梯度下降法
这个专栏主要是用来分享一下我在机器学习中的学习笔记及一些感悟,也希望对你的学习有帮助哦!感兴趣的小伙伴欢迎私信或者评论区留言!这一篇就更新一下<白话机器学习中的数学--随机梯度下降法>! ...
- 机器学习(四):批量梯度下降法(BGD)、随机梯度下降法(SGD)和小批量梯度下降法(MBGD)
本文基于吴恩达老师的机器学习课程.看了吴恩达老师的机器学习课程,收获很多,想把课上学做的笔记结合自己的理解以及找到的一些资料综合起来做一个总结.大家感兴趣也可以自己去看一看吴恩达老师的课,这套课程,被 ...
- 机器学习笔记(10)——逻辑回归算法优化之随机梯度下降法
在上一篇文章<机器学习笔记(9)--深入理解逻辑回归算法及其Python实现>中,详细学习了逻辑回归算法的分类原理和使用梯度下降法来最小化损失函数的数学推导过程,从而拟合出分类函数的参数θ ...
- 机器学习小组知识点45:批量梯度下降法(BGD)和随机梯度下降法(SGD)的代码实现Matlab版1
原 机器学习小组知识点4&5:批量梯度下降法(BGD)和随机梯度下降法(SGD)的代码实现Matlab版 2016年10月19日 10:17:28 Eric2016_Lv 阅读数:3379 这 ...
- 机器学习系列手记(七):优化算法之随机梯度下降法
优化算法 随机梯度下降法 在机器学习中,优化问题的目标函数通常可以表示成 其中 θ\thetaθ 是待优化的模型参数, xxx 是模型输入, f(x,θ)f(x,\theta)f(x,θ) ...
- 【机器学习 - 8】:随机梯度下降法
文章目录 随机梯度下降法 随机梯度下降法的实现 随机梯度下降法 为什么使用随机梯度下降法? 如果当我们数据量和样本量非常大时,每一项都要参与到梯度下降,那么它的计算量时非常大的,所以我们可以采用随机梯 ...
- 机器学习之梯度下降法(GD)、随机梯度下降法(SGD)和随机平均梯度下降法(SAGD)
目录 基本原理 梯度下降法(Gradient Descent) 随机梯度下降法(Stochastic Gradient Descent,SGD)
- 1. 批量梯度下降法BGD 2. 随机梯度下降法SGD 3. 小批量梯度下降法MBGD
排版也是醉了见原文:http://www.cnblogs.com/maybe2030/p/5089753.html 在应用机器学习算法时,我们通常采用梯度下降法来对采用的算法进行训练.其实,常用的梯度 ...
最新文章
- 如何导出maven子项目_如何使用maven 轻松重构项目
- oracle 11g 忘记了sys,system,scott密码
- ionic2 安装与cordova打包
- 关于C#序列化结果的长度获取
- python文件封装成jar_【Python】Python文件打包为可执行文件
- knn算法(分类)-机器学习
- 学院教务管理系统oracle设计,浙工院教学教务管理信息系统的设计与实现
- python 设计模式 观察者_【python】设计模式之观察者模式
- 【转载】在windows上部署使用Redis
- 阿里云服务器怎么重置密码?服务器登录密码忘记了怎么办?
- bios调整服务器性能模式吗,华硕bios设置最佳性能 试试设置这几步
- 两台电脑如何共享文件?如何互相传输文件?
- SIM7600X常用指令
- 粗虚线和细虚线_车道划分线上下两侧有粗虚线
- MTU and MSS
- java 标注 废弃,Python标记函数或类为废弃(deprecated)并在Pychram或Idea中检测提示删除线...
- 百度me域名收录欠佳,站长如何应对?
- Google收购Moto:天使还是魔鬼?
- C语言:弗洛伊德算法
- 计算机网络原理 7层结构概述