线性回归的常用求解方法之梯度下降法(一):梯度下降法求最小值,看不懂你打我

梯度下降

什么是梯度下降

梯度其实就是斜度,就是一个曲面沿着指定方向的倾斜程度。

梯度下降法的基本思想可以类比为一个下山的过程。

假设这样一个场景:一个人被困在山上,需要从山上下来(i.e. 找到山的最低点,也就是山谷)。那么如何快速的下山?寻找这个位置最陡峭的地方,然后朝着山的高度下降的地方走,对于计算机来说就是没走一段重新寻找坡度最陡峭的地方。
在这里插入图片描述
梯度下降的基本过程就和下山的场景很类似。

首先,我们有一个可微分的函数。这个函数就代表着一座山。

我们的目标就是找到这个函数的最小值,也就是山底。

根据之前的场景假设,最快的下山的方式就是找到当前位置最陡峭的方向,然后沿着此方向向下走,对应到函数中,就是找到给定点的梯度 ,然后朝着梯度相反的方
向,就能让函数值下降的最快!因为梯度的方向就是函数之变化最快的方向。 所
以,我们重复利用这个方法,反复求取梯度,最后就能到达局部的最小值,这就类似于我们下山的过程。而求取梯度就确定了最陡峭的方向,也就是场景中测量方向的手段。
在这里插入图片描述

案例

import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(-6,6,1000)

y = X**4-4*X**3 + 1.2
plt.plot(X,y)

#当x等于几的时候y值最小

在这里插入图片描述

梯度下降:全局范围类,找到坡度最陡的地方

#上一次迭代到x=?
old = 0 
#这一次x=?
new = 6

#迭代率
step = 0.0001

def func(X):
    return 4*X**3 - 12*X**2
while abs(new-old) > step:
    print(new)
    old = new
    new = new - func(old)*step

在这里插入图片描述
结果是:x = 3.027196165589084的时候,y是最小的

def foo(X):
    return  X**4-4*X**3 + 1
foo(3)

在这里插入图片描述

发布了526 篇原创文章 · 获赞 650 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_35456045/article/details/104487885