Python实现梯度下降算法


前言

梯度下降法作为机器学习中较常使用的优化算法,有以下三种不同形式

  • BGD(Batch Gradient Descent):批量梯度下降
  • MBGD(Mini-batch Gradient Descent):小批量梯度下降
  • SGD(Stochastic Gradient Descent):随机梯度下降

批量梯度下降(Batch Gradient Descent,BGD)

代码:
import numpy as np
from matplotlib import pylab as plt


def BGD(x, y, alpha):
    theta = 0
    while True:
        hypothesis = np.dot(x, theta)
        loss = hypothesis - y
        gradient = np.dot(x.transpose(), loss) / len(x)
        theta = theta - alpha * gradient
        if abs(gradient) < 0.0001:
            break
    return theta


# 假设出数据
x = np.array([0.2, 0.3, 0.5, 0.68, 0.8, 1.0, 1.15, 1.3, 1.7, 1.8, 1.5, 1.75, 1.7, 2.0])
y = np.array([0.7, 0.4, 1.0, 0.9, 1.4, 1.1, 1.25, 1.9, 2.2, 2.5, 1.7, 2.0, 2.6, 2.8])

# 学习率
alpha = 0.04

# 批量梯度下降
weight = BGD(x, y, alpha)
print(weight)

# 绘制所有数据点
plt.plot(x, y, 'ro')

# 绘制拟合出来的直线
plt.plot(x, x*weight)

# 显示
plt.show()


效果

在这里插入图片描述


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

觉皇嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值