美文网首页
梯度下降法

梯度下降法

作者: Jlan | 来源:发表于2017-04-22 00:23 被阅读14次

问题:寻找到N个点距离和最小的点

思路:

深度截图20170422001700.png
import numpy as np
from matplotlib import pyplot as plt
# p到points的距离和
def f(p, points) :
    return np.sum(np.sum((p - points) ** 2, axis=1) ** 0.5)
#  距离和函数在p点的梯度
def fgrad(p, points):
    dx = np.sum((p[0] - points[:, 0]) / np.sum((p - points) ** 2, axis=1) ** 0.5)
    dy = np.sum((p[1] - points[:, 1]) / np.sum((p - points) ** 2, axis=1) ** 0.5)
    return np.array([dx, dy])
# points = np.random.rand(20, 2) # 随机或者自定义几个点,寻找距离这些点之和最小值的点
points = np.array([
            [0,0],
            [0,2],
            [2,0],
            [2,2]
    ]) # 定义一个正方形
x = np.random.rand(2) # x为随机初始点
step = 0.2
xhistory = x #用来存储历史值
for k in range(100):
    l = f(x, points)
    xk = x - step * fgrad(x, points)
    lk = f(xk, points)
    if l - lk > 1e-8:
        x = xk
        xhistory = np.vstack((xhistory, x))
    elif l - lk <0:
        #步子太大,超过极值后调整步伐大小
        step *= 0.5
    else:
        break

print(xhistory)
[[ 0.17005619  0.77382012]
 [ 0.45001009  0.81002093]
 [ 0.61803208  0.85141979]
 [ 0.7298659   0.88861665]
 [ 0.80752889  0.91829   ]
 [ 0.86240553  0.94071626]
 [ 0.90147962  0.95722978]
 [ 0.9294022   0.96923281]
 [ 0.94939105  0.97790027]
 [ 0.96371305  0.98413816]
 [ 0.97397936  0.98861982]
 [ 0.98134014  0.99183687]
 [ 0.98661833  0.99414511]
 [ 0.99040338  0.99580088]
 [ 0.99311776  0.99698848]
 [ 0.99506437  0.99784024]
 [ 0.99646039  0.9984511 ]
 [ 0.99746154  0.99888919]
 [ 0.99817953  0.99920337]
 [ 0.99869444  0.99942869]
 [ 0.99906371  0.99959028]
 [ 0.99932853  0.99970617]
 [ 0.99951845  0.99978928]
 [ 0.99965465  0.99984888]
 [ 0.99975233  0.99989162]
 [ 0.99982238  0.99992228]
 [ 0.99987262  0.99994426]]
# print(points[:, 0])
plt.plot(points[:, 0], points[:, 1], 'bo')
plt.plot(xhistory[:, 0], xhistory[:, 1], 'ro')
plt.plot(xhistory[:, 0], xhistory[:, 1], 'k-')
plt.title(u'迭代次数 = %d, 距离和 = %.3f, 极值点 = (%.3f, %.3f), 最后步长 = %f' % (k, l, x[0], x[1], step))
plt.show()
output_7_0.png

相关文章

  • 2020-08-19--梯度下降法01

    梯度下降法简介 多元线性回归中的梯度下降法 随机梯度下降法 梯度下降法 的调试 1.梯度下降法简介 不是一个机器学...

  • 梯度下降法

    梯度下降法 本文主要是为了讲解 梯度下降法 的原理和实践,至于什么是梯度下降法,他能做什么,相信百度一下你就都知道...

  • 学习笔记:两种梯度下降法的思考

    在看梯度下降法的时候最初还真没看明白两种梯度下降法的区别,于是昨天散步的时候认真的思考了一下。 两种梯度下降法分别...

  • 最速梯度下降

    梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解。一般情况下,其解不保证是全局最优解,梯度下降法的...

  • 神经网络优化2

    梯度下降 梯度下降法 批梯度下降法(Batch Gradient Descent,BGD)是最常用的梯度下降形式,...

  • 2019-03-17神经网络——optimizer

    神经网络优化算法,通常有三种:小批量梯度下降法,随机梯度下降法和批量梯度下降法。 小批量梯度下降法 适用于训练数据...

  • 2019-11-01第二课二周优化算法

    指数加权平均: 动量梯度下降法: RMSprop:和动量梯度下降法相似 adam优化算法:将动量梯度下降法和RMS...

  • 机器学习系列(十六)——随机梯度下降Stochastic Gra

    随机梯度下降法Stochastic Gradient Descent 在之前的梯度下降法解决线性回归问题中,梯度向...

  • 全梯度下降算法从零实现,基于Numpy

    批量梯度下降法BGD Github 批量梯度下降法(Batch Gradient Descent,简称BGD)是梯...

  • 机器学习学习笔记(六)梯度下降法

    基础 (1)梯度下降法本身不是一个机器学习算法 (2)梯度下降法是一种基于搜索的最优化方法 (3)梯度下降法的作用...

网友评论

      本文标题:梯度下降法

      本文链接:https://www.haomeiwen.com/subject/hzbjzttx.html