返回

从零开始机器学习:用 Python 实现梯度下降法!

人工智能

引言

机器学习正在迅速改变着我们与世界互动的方式。从个性化推荐到自动驾驶汽车,机器学习算法已经渗透到我们生活的方方面面。梯度下降法是机器学习中最基本但最重要的优化算法之一。它被广泛用于解决各种优化问题,包括线性回归、多变量回归和深度学习模型的训练。

从下山说起

想象一下你正在爬山,爬到山顶后已经傍晚了。太阳就要下山了,你需要尽快下山去吃晚饭。最快的下山方法是什么?当然是缩成一团,然后从最陡峭的方向直接滚下去。

梯度下降法

梯度下降法是一种类似的方法,用于找到函数的最小值或最大值。它通过沿着函数的负梯度(最陡峭的下降方向)迭代地更新参数来工作。每一步都会使函数值减少一点,直到达到最小值。

Python 实现

在 Python 中实现梯度下降法非常简单。以下是实现线性回归的梯度下降法的步骤:

  1. 定义损失函数: 线性回归的损失函数是均方误差(MSE)。
  2. 计算梯度: 梯度是损失函数相对于模型参数的偏导数。
  3. 更新参数: 使用梯度和学习率更新模型参数。
  4. 迭代: 重复步骤 2 和 3 直到损失函数收敛。

示例代码

import numpy as np

def gradient_descent(X, y, learning_rate=0.01, num_iters=1000):
    """
    使用梯度下降法训练线性回归模型。

    参数:
        X:特征矩阵
        y:目标变量
        learning_rate:学习率
        num_iters:迭代次数
    """

    # 初始化模型参数
    w = np.zeros(X.shape[1])
    b = 0

    # 迭代更新参数
    for i in range(num_iters):
        # 计算预测值
        y_pred = np.dot(X, w) + b

        # 计算梯度
        grad_w = -2 * np.dot(X.T, (y_pred - y)) / X.shape[0]
        grad_b = -2 * np.sum(y_pred - y) / X.shape[0]

        # 更新参数
        w -= learning_rate * grad_w
        b -= learning_rate * grad_b

    return w, b

多变量回归和深度学习

梯度下降法也可以用于解决多变量回归和深度学习模型的训练等更复杂的问题。在这些情况下,损失函数和梯度计算变得更加复杂,但基本原理仍然相同。

总结

梯度下降法是一种强大的优化算法,是机器学习和深度学习的基础。通过了解其背后的原理和 Python 实现,你可以为探索机器学习的浩瀚世界奠定坚实的基础。