"""
批量梯度下降
目前统一的停止策略都是执行n次停止
场景:一元线性回归参数求解
"""
import numpy as np
# 定义随机种子,使每次随机的数据都和第一次随机时的数据一致
np.random.seed(1)
# 构造数据集
X = 2 * np.random.rand(100, 1)
Y = 4 + 3 * X + np.random.randn(100, 1) # 构造正态分布的误差项
# 拉链函数
X = np.c_[np.ones((100, 1)), X] # y = wx + b (x1,x0)
# 初始化梯度下降相关参数
learning_rate = 0.001 # 学习率,控制梯度下降速度
n_iterations = 10000 # 迭代次数
m = 100 # 手动定义样本集长度
theta = np.random.randn(2, 1) # 初始化theta(最终的目标)
if __name__ == "__main__":
for _ in range(n_iterations):
# 求梯度
gradients = 1/m * X.T.dot(X.dot(theta) - Y)
# 更新theta
theta -= learning_rate * gradients
# 计算出批量梯度下降的theta
print(theta)
[[4.06251918]
[2.9927268 ]]