learn=0.1
# y=x**2-4*x+7
x=10
for epoch in range(20):
gradient=2*x-4
x-=learn*gradient
print(x)
如找出y函数的最小值点,重点是关于x的更新,这里应该是x=x-learn*gradien,但是如果翻看别人的梯度下降的实现,写的都是x+=啥,如下这个,其它地方也是基本x+=,咋确定到底x+=啥,还是x-=啥呢
user_vector += np.multiply(learning_rate, (loss * item_vector - alpha * user_vector)) # user_vector 不断更新(根据梯度下降公式)
item_vector += np.multiply(learning_rate, (loss * user_vector - alpha * item_vector)) # item_vector 不断更新(根据梯度下降公式)
以下是新加的代码块
# (u*i-rating)**2-1/2*REG*(u*u+i*i)
for epoch in range(EPOCHS): # 迭代一万次
for uid, iid, real_rating in dataset.itertuples(index=False):
u_vector = user_matrix[uid]
i_vector = item_matrix[iid]
error = np.float32(real_rating - np.dot(u_vector, i_vector)) # 真实值和预测值的偏差
# 更新梯度
u_vector += ALPHA * (error * i_vector - REG * u_vector) # 注意这是一个numpy对象
i_vector += ALPHA * (error * u_vector - REG * i_vector) # 这也是一个Numpy对象
user_matrix[uid] = u_vector
item_matrix[iid] = i_vector