机器学习篇(2)——梯度下降求解法

  • 获取最优化算法的一种方法,是解决无约束优化问题,用递归来逼近最小偏差的模型。
    关于梯度的概念大家可参见以前的文章:
    从方向导数到梯度
  • 梯度下降法迭代公式为:


    image.png

x为需要求解的 值,s为梯度负方向,α为步长又叫学习率
缺点:靠近极小值的时候收敛速度比较慢;可能会”之字形”的下降;不太适合处理比较复杂的非线性函数问题。

  • 实例:
    用梯度下降的迭代算法,来逼近函数y=x**2的最值
    代码如下:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

def f(x):
    return x**2
def h(x):
    return 2*x
X=[]
Y=[]

x=2
step=0.8
f_change=f(x)
f_current=f(x)
X.append(x)
Y.append(f_current)
while f_change>np.e**-10:
    x=x-step*h(x)
    tmp=f(x)
    f_change=np.abs(f_current-tmp)
    f_current=tmp
    X.append(x)
    Y.append(f_current)
print(X)
print(Y)
print(x,f_current)
fig = plt.figure()
a=np.arange(-2.15,2.15,0.05)
b=a**2
plt.plot(a,b)
plt.plot(X,Y,"ro--")
plt.show()

运行结果如下:


image.png
  • 假如目标函数有未知参数的情况,步骤如下:


    image.png
  • 如何选择梯度下降的步长和初始值
    不同的步长得表现:


    image.png

    image.png
  • 学习率的选择:学习率过大,表示每次迭代更新的时候变化比较大,有可能会跳过 最优解;学习率过小,表示每次迭代更新的时候变化比较小,就会导致迭代速度过 慢,很长时间都不能结
  • 算法初始参数值的选择:初始值不同,最终获得的最小值也有可能不同,因为梯度 下降法求解的是局部最优解,所以一般情况下,选择多次不同初始值运行算法,并 最终返回损失函数最小情况下的结果值
  var ihubo = {
    nickName  : "草依山",
    site : "http://jser.me"
  }

步骤与作用:写出一个带有参数函数,将这个函数与目标属性做损失函数,然后用提低下降的方法的出求出损失最小时参数的值,从而得到用于预测的模型。

你可能感兴趣的:(机器学习篇(2)——梯度下降求解法)