机器学习之梯度下降

翻译|Gradient Descent in Python

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use(['ggplot'])

当你初次涉足机器学习时,你学习的第一个基本算法就是 梯度下降 (Gradient Descent), 可以说梯度下降法是机器学习算法的支柱。 在这篇文章中,我尝试使用 python解释梯度下降法的基本原理。一旦掌握了梯度下降法,很多问题就会变得容易理解,并且利于理解不同的算法。

如果你想尝试自己实现梯度下降法, 你需要加载基本的 python packages —— numpy and matplotlib

首先, 我们将创建包含着噪声的线性数据

# 随机创建一些噪声
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
array([[1.33025881],
       [0.09309373],
       [0.49532139],
       [1.60476696],
       [0.58710846],
       [1.56722395],
       [0.59914427],
       [1.51932972],
       [1.13519401],
       [1.48989254]])

接下来通过 matplotlib 可视化数据

# 可视化数据
plt.plot(X, y, 'b.')
plt.xlabel("$x$", fontsize=18)
plt.ylabel("$y$", rotation=0, fontsize=18)
plt.axis([0, 2, 0, 15])

显然, yy 与 xx 具有良好的线性关系,这个数据非常简单,只有一个自变量 xx.

我们可以将其表示为简单的线性关系:

y=b+mx

并求出 b , m。

这种被称为解方程的分析方法并没有什么不妥,但机器学习是涉及矩阵计算的,因此我们使用矩阵法(向量法)进行分析。

我们将 y 替换成 J(θ), b 替换成 θ0, m 替换成 θ1。
得到如下表达式:

J(θ)=θ0+θ1x

注意: 本例中 θ0=4, θ1=3

求解 θ0和 θ1的分析方法,代码如下:

X_b = np.c_[np.ones((100, 1)), X] # 为X添加了一个偏置单位,对于X中的每个向量都是1
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
theta_best
array([[4.0728819 ],
       [3.05958308]])

不难发现这个值接近真实的 θ0,θ1,由于我在数据中引入了噪声,所以存在误差。

X_new = np.array([[0], [2]])
X_new_b = np.c_[np.ones((2, 1)), X
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值