У меня есть приведенный ниже код для запуска метода наименьших квадратов в каждой строке матрицы U.
import numpy as np
from numpy.linalg import norm,lstsq
from sklearn.externals.joblib import Parallel,delayed
k = 25
max_iter = 50
lmbda = 1e-3
R = np.random.randint(0,2,(1500,2500))
W = np.sign(R,dtype=np.int8)
rows, columns = R.shape
random = np.random.RandomState(seed=4)
U = np.zeros((rows,k),dtype=np.float32)
V = random.rand(columns,k).astype(np.float32)
D = random.rand(columns,k).astype(np.float32)
S = random.rand(columns,columns).astype(np.float32)
S = (S + S.T)/2
Ir = np.eye(k,dtype=np.int8)
for i in xrange(1,max_iter+1):
U = Parallel(n_jobs=5)(delayed(lstsq)(np.dot(V.T,np.dot(np.diag(Wu),V))+lmbda*Ir, np.dot(R[u],np.dot(np.diag(Wu),V)),rcond=None) for u,Wu in enumerate(W))
U = np.vstack([u[0] for u in U])
V = Parallel(n_jobs=5)(delayed(lstsq)(np.dot(U.T,np.dot(np.diag(Wv),U))+np.dot(D.T,D), np.dot(S[v],D)+np.dot(R.T[v],np.dot(np.diag(Wv),U)),rcond=None) for v,Wv in enumerate(W.T))
V = np.vstack([v[0] for v in V])
Но каким бы ни было значение n_jobs, которое я установил, я получаю ошибку ниже
local / lib / python2.7 / site-packages / sklearn / externals / joblib / externals / loky / process_executor.py: 700: UserWarning: работник остановился, когда некоторые задания были переданы исполнителю.Это может быть вызвано слишком коротким рабочим таймаутом или утечкой памяти.«Тайм-аут или утечка памяти». UserWarning
Кажется, точная ошибка вызвана тем, что функция vstack пытается выполнить до завершения параллельной операции.Но для больших n_jobs (= 15) даже функция lstsq также давала предупреждение об утечке памяти.Я застрял с этим в течение недели.