python实现随机梯度下降法

  • Post category:Python

下面是详细讲解“Python实现随机梯度下降法”的完整攻略。

随机梯度下降法

随机梯度下降法(Stochastic Gradient Descent,SGD)是一种常用的优化算法,用于训练机器学习模型。该算法的核心思想是通过迭代更新模型,使得损失函数最小化。

下面是一个Python实现随机梯度下降法的示例:

import numpy as np

def sgd(X, y, alpha, epochs):
    m, n = X.shape
    theta = np.zeros(n)
    for epoch in range(epochs):
        for i in range(m):
            h = np.dot(X[i], theta)
            error = h - y[i]
            gradient = X[i] * error
            theta = theta - alpha * gradient
    return theta

上述代码中,首先导入了numpy库,用于进行数值计算。

然后,定义了一个sgd函数,该函数接受三个参数X、y和alpha,分别表示特征矩阵、标签和学习率,以及一个参数epochs,表示迭代次数,返回最优参数theta。

接着,初始化变量m和n,分别表示特征矩阵的行数和列数。

然后,初始化变量theta,表示模型参数。

接着,使用两个for循环迭代更新模型参数。

在内层循环中,首先计算预测值h。

然后,计算误差error。

接着,计算梯度gradient。

最后,更新模型参数theta。

最后,返回最优参数theta。

示例

下面是一个使用随机梯度下降法训练线性回归模型的Python示例:

import numpy as np
import matplotlib.pyplot as plt

# 生成数据
np.random.seed(0)
m = 100
X = 2 * np.random.rand(m, 1)
y = 4 + 3 * X + np.random.randn(m, 1)

# 添加偏置项
X_b = np.c_[np.ones((m, 1)), X]

# 使用随机梯度下降法训练模型
theta = sgd(X_b, y.ravel(), 0.1, 1000)

# 绘制数据点和拟合直线
plt.scatter(X, y)
plt.plot(X, X_b.dot(theta), color='red')
plt.show()

上述代码中,首先使用numpy库生成100个随机数据点。

然后,使用numpy库添加偏置项。

接着,调用sgd函数使用随机梯度下法训练模型。

最后,使用matplotlib库绘制数据点和拟合直线。

下面是一个使用随机梯度下降法训练逻辑回归模型的Python示例:

import numpy as np
import matplotlib.pyplot as plt

# 生成数据
np.random.seed(0)
m = 100
X = 2 * np.random.rand(m, 2) - 1
y = (X[:, 0] + X[:, 1] > 0).astype(int)

# 添加偏置项
X_b = np.c_[np.ones((m, 1)), X]

# 使用随机梯度下降法训练模型
theta = sgd(X_b, y, 0.1, 1000)

# 绘制数据点和决策边界
plt.scatter(X[:, 0], X[:, 1], c=y)
x0, x1 = np.meshgrid(
    np.linspace(-1, 1, 100).reshape(-1, 1),
    np.linspace(-1,1, 100).reshape(-1, 1),
)
X_new = np.c_[x0.ravel(), x1.ravel()]
X_new_b = np.c_[np.ones((len(X_new), 1)), X_new]
y_predict = X_new_b.dot(theta)
zz = y_predict.reshape(x0)
plt.contourf(x0, x1, zz, cmap=plt.cm.brg, alpha=0.2)
plt.show()

上述代码中,首先使用numpy库生成100个随机数据点。

然后使用numpy库添加偏置项。

接着,调用sgd函数使用随机梯度下降法训练模型。

最后,使用matplotlib库绘制数据点和决策边界。

总结

随机梯度下降法是一种常用的优化算法,用于训练机器学习模型。Python中可以使用numpy库进行数值计算,使用for循环迭代更新型参数。在实现过程中,需要计算预测值、误差和梯度,然后更新模型参数。最后,使用matplotlib库绘数据点和拟合曲线或决策边界。