随机梯度下降法的思想
每次更新权值不再利用整个数据集,而是随机选择其中1个样本。随机梯度下降法使用的是近似梯度,走的缓慢,相比于梯度下降法,不是那么容易陷入到局部最优中
python实现
import numpy as np
import random
x1 = np.array([2104, 1600, 2400, 1416, 3000])
x2 = np.array([3, 3, 3, 2, 4])
t = np.array([400, 330, 369, 232, 540])
theta0 = 10
theta1 = 10
theta2 = 10
alpha = 0.0000001
e = 1e-5
d0 = 1
d1 = 1
d2 = 1
while d0 >= e or d1 >= e or d2 >= e:
i = random.randint(0, 4)
d0 = theta0 + x1[i] * theta1 + x2[i] * theta2 - t[i]
d1 = d0 * x1[i]
d2 = d0 * x2[i]
i = i + 1
theta0 = theta0 - alpha * d0
theta1 = theta1 - alpha * d1
theta2 = theta2 - alpha * d2
# while d0 >= e or d1 >= e or d2 >= e:
# i = 0
# for i in range(5):
# d0 = theta0 + x1[i] * theta1 + x2[i] * theta2 - t[i]
# d1 = d0 * x1[i]
# d2 = d0 * x2[i]
# i = i + 1
# theta0 = theta0 - alpha * d0
# theta1 = theta1 - alpha * d1
# theta2 = theta2 - alpha * d2
print(d0, d1, d2)