机器学习:随机梯度下降法

机器学习:随机梯度下降法1.梯度下降  1)什么是梯度下降?      因为梯度下降是一种思想,没有严格的定义,所以用一个比喻来解释什么是梯度下降。         简单来说,梯度下降就是从山顶找一条最短的路走到山脚最低的地方。但是因为选择方向的原因,我们找到的的最低点可能不是真正的最低点。如图所示,黑线标注的路线所指的方向并不是真正的地方。    既然是选择一个方向下山,那么这个方向怎么选…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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 = val
    x2 = 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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/195052.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 个人博客网站与工具软件

    个人博客网站与工具软件文章目录个人博客网站张兵个人博客杨雨的个人博客李洋个人博客廖雪峰的官方网站工具类网站工具:Xmind/ProcessOnAscilflow【在线画图】VisualStudioCode印象笔记TyporaMd2All【markdown排版工具】DouTu【表情包在线制作】学习网站极客学院个人博客网站张兵个人博客链接地址张兵一个人的博客;杨雨的个人博客链接地址:杨雨个人博客站;李洋个人博客链接地址:李洋博客;廖雪峰的官方网站链接地址:廖雪峰官博;工具类网站工具:Xmind/Proce

    2022年7月21日
    13
  • 深入浅出:hadoop分布式文件存储系统(HDFS)

    深入浅出:hadoop分布式文件存储系统(HDFS)分布式文件存储系统如上图所示,HDFS也是按照Master和Slave的结构。分NameNode、SecondaryNameNode、DataNode这几个角色。NameNode:是Master节点,是大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;SecondaryNameNode:是一个小弟,分担大哥namenode的一部分工作量;是Na…

    2022年5月10日
    46
  • python中delay__python delay函数「建议收藏」

    python中delay__python delay函数「建议收藏」Python中的sleep函数本人是Python菜鸟一枚,今天用python时,发现如果按照下图所示来写程序在我的Python环境(Win7+Python2.7.9)下测试没问题,是等待5秒后再输出m。你的问题可能是被标准输出流的缓冲区缓冲了,给stdout加一个flush就可以了:fromtimeimportsleepfromsysimportstdoutprint…

    2022年6月2日
    46
  • navicat 15永久激活工具破解方法

    navicat 15永久激活工具破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    116
  • mysql授予用户新建数据库的权限[通俗易懂]

    mysql授予用户新建数据库的权限

    2022年2月14日
    43
  • C#正则表达式匹配任意字符[通俗易懂]

    C#正则表达式匹配任意字符[通俗易懂]不得不说正则很强大,尤其在字符串搜索上匹配任意字符,包括汉字,换行符: [\s\S]*.

    2022年7月15日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号