【发布时间】:2023-10-03 05:49:01
【问题描述】:
我正在尝试学习线性方程 y = x1 + x2 + e,其中 e 是 0 到 0.5 之间的随机误差。 数据定义如下:
X1 = np.random.randint(1, 10000, 5000)
X2 = np.random.randint(1, 10000, 5000)
e = np.array([random.uniform(0, 0.5) for i in range(5000)])
y = X1 + X2 + e
当我实现一个简单的梯度下降来查找参数时,损失和梯度都在爆炸。我哪里错了?梯度下降的代码:
w1, w2, b = 1, 1, 0
n = X1.shape[0]
alpha = 0.01
for i in range(5):
y_pred = w1 * X1 + w2 * X2 + b
L = np.sum(np.square(y - y_pred))/(2 * n)
dL_dw1 = (-1/n) * np.sum((y - y_pred) * X1)
dL_dw2 = (-1/n) * np.sum((y - y_pred) * X2)
dL_db = (-1/n) * np.sum((y - y_pred))
w1 = w1 - alpha * dL_dw1
w2 = w2 - alpha * dL_dw2
b = b - alpha * dL_db
print(L, w1, w2, b)
这个的输出是:
0.042928723015982384 , 13.7023102434034 , 13.670617201430483 , 0.00254938447277222
9291487188.8259 , -7353857.489486973 , -7293941.123714662 , -1261.9252592161051
3.096713445664372e+21 , 4247172241132.3584 , 4209117175658.749 , 728518135.2857293
1.0320897597938595e+33 , -2.4520737800716524e+18 , -2.4298158059267333e+18 , -420579738783719.2
3.4398058610314825e+44 , 1.415615899689713e+24 , 1.402742160404974e+24 , 2.428043942370682e+20
【问题讨论】:
标签: python numpy machine-learning linear-regression