梯度下降法python代码
pythonimport 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。收敛条件:添加一个收敛条件,当梯度的大小变得很小时停止迭代。批量梯度下降:对于大规模数据集,可以使用批量梯度下降、随机梯度下降或者小批量梯度下降。正则化:对于过拟合的情况,可以添加正则化项到代价函数中。
pythonimport 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
,以防止算法陷入无限循环。