梯度下降法python代码

梯度下降法是一种优化算法,用于找到函数的最小值。

python
import numpy as np def gradient_descent(x, y, learning_rate=0.01, epochs=1000): # 初始化参数 m = len(y) theta = np.zeros((2, 1)) # 参数初始化为0 x = np.column_stack((np.ones((m, 1)), x)) # 在特征矩阵中添加一列全为1的列 # 梯度下降迭代 for epoch in range(epochs): # 计算预测值 y_pred = np.dot(x, theta) # 计算误差 error = y_pred - y # 计算梯度 gradient = np.dot(x.T, error) / m # 更新参数 theta = theta - learning_rate * gradient # 计算损失函数 cost = np.sum(error**2) / (2 * m) if epoch % 100 == 0: print(f'Epoch {epoch}, Cost: {cost}') return theta # 示例数据 x = np.array([1, 2, 3, 4, 5]) y = np.array([2, 4, 5, 4, 5]) # 调用梯度下降函数 theta = gradient_descent(x, y) print('最优参数 theta:', theta)

在这个例子中,我们使用简单的线性回归问题来演示梯度下降法。 gradient_descent 函数接受输入特征 x 和对应的目标值 y,并通过迭代来更新参数 theta 以最小化损失函数。你可以根据你的问题和数据修改这个代码。

当使用梯度下降法时,有一些关键的超参数需要调整,以确保算法能够有效地收敛。这些超参数包括学习率 (learning_rate) 和迭代次数 (epochs)。你可能需要根据实际情况进行调整,以获得最佳性能。

另外,这个例子是基于简单的一元线性回归问题,如果你的问题是多变量的线性回归,你需要相应地修改特征矩阵和参数的维度。

特征缩放: 如果特征的尺度相差很大,可能需要进行特征缩放,以确保梯度下降算法更快地收敛。

正则化: 如果数据集较小,可以考虑添加正则化项来防止过拟合。

收敛判据: 可以添加一个收敛判据,当损失变化很小时停止迭代,以提高效率。

批量梯度下降 vs 随机梯度下降 vs 小批量梯度下降: 这个例子使用的是批量梯度下降,你可以根据数据集大小选择不同的梯度下降变体。

其他优化算法: 除了梯度下降,还有其他优化算法如 Adam、RMSProp 等,可以考虑使用这些算法。