梯度下降法python代码

python
import numpy as np # 定义目标函数:这里使用简单的二次函数作为示例 def cost_function(theta): return theta**2 + 5 # 定义目标函数的导数 def derivative_cost_function(theta): return 2 * theta # 梯度下降函数 def gradient_descent(learning_rate, initial_theta, iterations): theta = initial_theta for _ in range(iterations): gradient = derivative_cost_function(theta) theta = theta - learning_rate * gradient return theta if __name__ == "__main__": learning_rate = 0.1 # 学习率 initial_theta = 3 # 初始参数 iterations = 100 # 迭代次数 theta = gradient_descent(learning_rate, initial_theta, iterations) print("优化后的参数 theta:", theta) print("最小化的代价函数值:", cost_function(theta))

这是一个非常基本的梯度下降实现。在实际应用中,您可能需要更复杂的优化策略,例如动态调整学习率、使用更复杂的损失函数等。此外,还要注意梯度下降法可能会受困于局部最小值,因此可能需要采用其他技术来避免这种情况,比如随机梯度下降、批量梯度下降等。

动态学习率调整:使用自适应的学习率,比如 AdaGrad、RMSProp 或 Adam。收敛条件:添加一个收敛条件,当梯度的大小变得很小时停止迭代。批量梯度下降:对于大规模数据集,可以使用批量梯度下降、随机梯度下降或者小批量梯度下降。正则化:对于过拟合的情况,可以添加正则化项到代价函数中。

python
import numpy as np # 定义目标函数:这里使用简单的二次函数作为示例 def cost_function(theta): return theta**2 + 5 # 定义目标函数的导数 def derivative_cost_function(theta): return 2 * theta # 梯度下降函数 def gradient_descent(learning_rate, initial_theta, iterations, tolerance): theta = initial_theta for _ in range(iterations): gradient = derivative_cost_function(theta) if np.linalg.norm(gradient) < tolerance: break theta = theta - learning_rate * gradient return theta if __name__ == "__main__": learning_rate = 0.1 # 学习率 initial_theta = 3 # 初始参数 iterations = 1000 # 最大迭代次数 tolerance = 1e-6 # 收敛条件 theta = gradient_descent(learning_rate, initial_theta, iterations, tolerance) print("优化后的参数 theta:", theta) print("最小化的代价函数值:", cost_function(theta))

在这个版本中,我们添加了一个收敛条件 tolerance,当梯度的范数小于该值时停止迭代。此外,我们增加了最大迭代次数 iterations,以防止算法陷入无限循环。