随机梯度下降公式实现

随机梯度下降公式实现

请教一下大佬 在做funksvd 中的梯度下降代码中,如何理解这个2 * rij * q[k][j] - b * p[i][k]这个是引入随机的扰动么,感觉这个跟梯度下降公式不符合啊。

 p[i][k] = p[i][k] + a * (2 * rij * q[k][j] - b * p[i][k])

q[k][j] = q[k][j] + a * (2 * rij * p[i][k] - b * q[k][j])

import numpy as np

from math import pow

def rect(R, K, p, q, step=3000, a=0.002, b=0.01):

q = q.T

for t in range(step):

for i in range(len(R)):

for j in range(len(R[i])):

if R[i][j] > 0:

rij = R[i][j] - np.dot(p[i, :], q[:, j])

for k in range(K):

p[i][k] = p[i][k] + a * (2 * rij * q[k][j] - b * p[i][k])

q[k][j] = q[k][j] + a * (2 * rij * p[i][k] - b * q[k][j])

e = 0

for i in range(len(R)):

for j in range(len(R[i])):

if R[i][j] > 0:

e = e + pow(R[i][j] - np.dot(p[i, :], q[:, j]), 2)

for k in range(K):

e = e + (b / 2) * (pow(p[i][k], 2) + pow(q[k][j], 2))

if e < 0.001:

break

return p, q.T

if __name__ == '__main__':

R = [

[5, 5, 3, 0, 5, 5],

[5, 0, 4, 0, 4, 4],

[0, 3, 0, 5, 4, 5],

[5, 4, 3, 3, 5, 5]

]

R = np.array(R)

k = 3

P = np.random.rand(len(R), k)#这个是4行 3列的

Q = np.random.rand(len(R[0]), k)#这个是 6行 3列的

print("zhanggg")

print(Q)

print("fffffffffffffffff")

ep, eq = rect(R, k, P, Q)

print(ep)

Rf = np.dot(ep, eq.T)

print(Rf)

以上是 随机梯度下降公式实现 的全部内容, 来源链接: utcz.com/p/938446.html

回到顶部