python+numpy+matplotalib实现梯度下降法

  • Post category:Python

以下是关于“Python+Numpy+Matplotlib实现梯度下降法”的完整攻略。

背景

梯度下降法是一种常用的优化算法,用于求解函数的最小值。在机器学习中,梯度下降法常用于求解模型的参数。本攻略将详细介绍如何使用 Python、Numpy 和 Matplotlib 实现梯度下降法。

实现梯度下降法的步骤

以下是实现梯度下降法的步骤:

  1. 定义损失函数
  2. 初始化参数
  3. 计算梯度
  4. 更新参数
  5. 重复步骤 3 和 4 直到收敛

实现示例1:使用梯度下降法求解一元线性回归

以下是使用梯度下降法求解一元线性回归的示例代码:

import numpy as np
import matplotlib.pyplot as plt

# 生成数据
x = np.linspace(0, 10, 100)
y = 2 * x + 1 + np.random.randn(100)

# 定义损失函数
def loss_function(theta, x, y):
    m = len(y)
    h = x.dot(theta)
    J = 1 / (2 * m) * np.sum((h - y) ** 2)
    return J

# 初始化参数
theta = np.zeros(2)
alpha =0.01
iterations = 1000
m = len(y)

# 梯度下降
J_history = np.zeros(iterations)
for i in range(iterations):
    h = x.dot(theta)
    theta = theta - alpha / m * (x.T.dot(h - y))
    J_history[i] = loss_function(theta, x, y)

# 绘制结果
plt.plot(range(iterations), J_history)
plt.xlabel('Iterations')
plt.ylabel('Cost')
plt.show()

print('theta:', theta)

在上面的示例代码中,我们首先使用 numpy.linspace 函数生成了一组数据 xy,其中 yx 的线性函数加上一些随机噪声。然后,我们定义了损失函数 loss_function,该函数算线性回归的均方误差。接着,我们初始化了参数 theta、学习率 alpha 和迭代次数 iterations。最后,我们使用梯度下降法更新参数 theta,并绘制了损失函数的变化曲线。

实现示例2:使用梯度下降法求解多元线性回归

以下是使用梯度下降法求解多元线性回归的示例代码:

import numpy as np
import matplotlib.pyplot as plt

# 生成数据
x1 = np.random.randn(100)
x2 = np.random.randn(100)
y = 2 * x1 + 3 * x2 + 1 + np.random.randn(100)

# 定义损失函数
def loss_function(theta, x, y):
    m = len(y)
    h = x.dot(theta)
    J = 1 / (2 * m) * np.sum((h - y) ** 2)
    return J

# 初始化参数
theta = np(3)
alpha = 0.01
iterations = 1000
m = len(y)

# 梯度下降
J_history = np.zeros(iterations)
for i in range(iterations):
    h = x.dot(theta)
    theta = theta - alpha / m * (x.T.dot(h - y))
    J_history[i] = loss_function(theta, x, y)

# 绘制结果
plt.plot(range(iterations), J_history)
plt.xlabel('Iterations')
plt.ylabel('Cost')
plt.show()

print('theta:', theta)

在上面的示例代码中,我们首先使用 numpy.random.randn 函数生成了一组数据 x1x2y,其中 yx1x2 的线性函数加上一些随机噪声。然后,我们定义了损失函数 loss_function,该函数计算多元线性回归的均方误差。接着,我们初始化了参数 theta、学习率 alpha 和迭代次数 iterations。最后,我们使用梯度下降法更新参数 theta,并绘制了损失函数的变化曲线。

结论

综上所述,“Python+Numpy+Matplotlib实现梯度下降法”的整个攻略详细介绍了如何使用 Python、Numpy 和 Matplotlib 实现梯度下降法,并提供了两个示例。在实际应用中,可以根据使用梯度下降法求解模型的参数。