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

2016-11-30 11:33:12 +08:00
 datayes2015
前言
梯度下降法( 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 进行测试:


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

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

所以到底是翻译的锅还是原作者用错了单词?
lll9p
2016-11-30 18:17:41 +08:00
@lightening 逻辑回归是从逻辑斯谛回归过来的,省了两个字完全不一样的感觉。
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
2016-11-30 18:25:19 +08:00
@lll9p
@mimzy 好吧,看来是上世纪初 logistic 这个词和对数有点关系,就一直这样叫过来了
jedihy
2016-12-01 10:17:13 +08:00
这不是牛顿法么
xarrow
2016-12-01 15:50:48 +08:00
突然觉得高中数学好有用
bxb100
2016-12-01 16:04:00 +08:00
@mimzy 对数几率回归😂
staticor
2016-12-01 18:42:36 +08:00
@lightening 一般叫 LR 就好了 不必翻译

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/324299

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX