p_temp = learning_rate * np.dot(e, self.q)
self.q *= 1 - regularization
self.q += learning_rate * np.dot(e.T, self.p)
self.p *= 1 - regularization
self.p += p_temp
Scipy - как дополнительно оптимизировать код разреженной матрицы для стохастического градиентного спуска