V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
datayes2015
V2EX  ›  推广

[Python 机器学习] 梯度下降法(一)

  •  
  •   datayes2015 · 2016-11-30 11:33:12 +08:00 · 5159 次点击
    这是一个创建于 2949 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前言
    梯度下降法( Gradient Descent )是机器学习中最常用的优化方法之一,常用来求解目标函数的极值。
    其基本原理非常简单:沿着目标函数梯度下降的方向搜索极小值(也可以沿着梯度上升的方向搜索极大值)。
    假设需要求解目标函数是 func(x) = x * x 的极小值,由于 func 是一个凸函数,因此它唯一的极小值同时也是它的最小值,其一阶导函数 为 dfunc(x) = 2 * x 。

    import numpy as np
    import matplotlib.pyplot as plt

    # 目标函数:y=x^2
    def func(x):
    return np.square(x)

    # 目标函数一阶导数:dy/dx=2*x
    def dfunc(x):
    return 2 * x

    梯度下降法函数:
    实盘回测代码请移步: https://uqer.io/community/share/58204a27228e5ba8f85715a8

    假设起始搜索点为-5 ,迭代周期为 5 ,学习率为 0.3 :
    实盘回测代码请移步: https://uqer.io/community/share/58204a27228e5ba8f85715a8



    从运行结果来看,当学习率为 0.3 的时候,迭代 5 个周期似乎便能得到较理想的效果。

    学习率对梯度下降法的影响
    设置学习率分别为 0.1 、 0.3 与 0.9 进行测试:


    从下图输出结果可以看出两点,在迭代周期不变的情况下:

    学习率较小时,收敛到正确结果的速度较慢。
    学习率较大时,容易在搜索过程中发生震荡。
    学习率大小对梯度下降法的搜索过程起着非常大的影响!
    18 条回复    2016-12-01 18:42:36 +08:00
    airqj
        1
    airqj  
       2016-11-30 11:55:16 +08:00 via Android   ❤️ 1
    mark
    bazingaterry
        2
    bazingaterry  
       2016-11-30 13:15:47 +08:00
    刚好在人工智能的课上学到了这个,用逻辑回归做分类的时候用到了。
    datayes2015
        3
    datayes2015  
    OP
       2016-11-30 13:47:17 +08:00
    @bazingaterry 嗯嗯,很实用的一个方法:)
    raysonx
        4
    raysonx  
       2016-11-30 13:59:30 +08:00   ❤️ 3
    现在的广告都在一本正经地普及小学知识
    mhqschen
        5
    mhqschen  
       2016-11-30 14:05:27 +08:00
    这个广告打得刚刚的。。。
    billgreen1
        6
    billgreen1  
       2016-11-30 16:57:38 +08:00 via iPhone
    建议看看 numpy 的实现,那叫一个漂亮
    hikkikuma1991
        7
    hikkikuma1991  
       2016-11-30 16:58:10 +08:00
    @raysonx 严重同意
    hosiet
        8
    hosiet  
       2016-11-30 17:10:55 +08:00 via Android
    这大概不是小学知识,但大学里相关专业肯定会学这东西,真的有必要科普?=_=
    lightening
        9
    lightening  
       2016-11-30 17:27:39 +08:00
    @bazingaterry 是对数回归……
    mimzy
        10
    mimzy  
       2016-11-30 17:32:51 +08:00
    @lightening 逻辑回归( logistic regression )是其中的一种译法 你俩都没说错
    lightening
        11
    lightening  
       2016-11-30 18:03:01 +08:00
    @mimzy
    我发现了,简直坑爹。“逻辑的”英文是 logical, "对数的“ 英文是 logarithmical 。 logistic 其实是“物流”的意思。

    所以到底是翻译的锅还是原作者用错了单词?
    lll9p
        12
    lll9p  
       2016-11-30 18:17:41 +08:00
    @lightening 逻辑回归是从逻辑斯谛回归过来的,省了两个字完全不一样的感觉。
    mimzy
        13
    mimzy  
       2016-11-30 18:18:42 +08:00
    @lightening 这名字确实很让人困惑 查了一下有这么个解释 http://stats.stackexchange.com/questions/111035/what-does-the-name-logistic-regression-mean 最近看到的书基本都翻译成「逻辑回归」了 有的干脆直接就叫「 logistic 回归」
    lightening
        14
    lightening  
       2016-11-30 18:25:19 +08:00
    @lll9p
    @mimzy 好吧,看来是上世纪初 logistic 这个词和对数有点关系,就一直这样叫过来了
    jedihy
        15
    jedihy  
       2016-12-01 10:17:13 +08:00
    这不是牛顿法么
    xarrow
        16
    xarrow  
       2016-12-01 15:50:48 +08:00
    突然觉得高中数学好有用
    bxb100
        17
    bxb100  
       2016-12-01 16:04:00 +08:00 via Android
    @mimzy 对数几率回归😂
    staticor
        18
    staticor  
       2016-12-01 18:42:36 +08:00
    @lightening 一般叫 LR 就好了 不必翻译
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2986 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:09 · PVG 19:09 · LAX 03:09 · JFK 06:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.