python 矩阵乘法梯度下降_python – Scipy – 如何进一步优化随机梯度下降的稀疏矩阵码...

我正在使用Scipy的稀疏矩阵实现推荐系统的随机梯度下降算法.

这是第一个基本实现的样子:

N = self.model.shape[0] #no of users

M = self.model.shape[1] #no of items

self.p = np.random.rand(N, K)

self.q = np.random.rand(M, K)

rows,cols = self.model.nonzero()

for step in xrange(steps):

for u, i in zip(rows,cols):

e=self.model-np.dot(self.p,self.q.T) #calculate error for gradient

p_temp = learning_rate * ( e[u,i] * self.q[i,:] - regularization * self.p[u,:])

self.q[i,:]+= learning_rate * ( e[u,i] * self.p[u,:] - regularization * self.q[i,:])

self.p[u,:] += p_temp

不幸的是,我的代码仍然很慢,即使是一个小的4×5评级矩阵.我在想这可能是由于循环的稀疏矩阵.我尝试使用花哨的索引来表达q和p的变化但是因为我仍然是scipy和numpy的新手,我无法想出更好的方法来做到这一点.

你有没有关于如何避免明确地迭代稀疏矩阵的行和列的指针?

你可能感兴趣的:(python,矩阵乘法梯度下降)