我有下面的代码在矩阵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函数也发出内存泄漏警告。我已经坚持了一个星期。