def solveSingle(self,inputDF,outputDict,rho,beta_target):
I,J,V,Y=[],[],[],[]
fd = {} # mapping feature names to consecutive integers, starting with 0
for i,(id, x) in enumerate(inputDF.items()):
l = outputDict.get(id)
for k,v in x.items():
I.append(i)
J.append(k)
V.append(v)
upd(fd,k)
Y.append(l)
J = map(lambda k: fd[k], J)
X = sparse.coo_matrix((V,(I,J)),shape=(I[-1]+1,len(fd)))
fd_reverse = [k for k,v in sorted(fd.items(), key = lambda t: t[1])]
# y_new = y - X . beta_target
# converting a proximal least square problem to a ridge regression
ZmUl = np.array([beta_target.get(k,0) for k in fd_reverse])
y_new = np.array(Y) - X * ZmUl
ridge = Ridge(alpha = rho , fit_intercept=False)
ret = ridge.fit(X,y_new)
#ret = self.lr.fit(X,y_new)
# ordered list of feature names according to their integer ids in fd
#raise ValueError('fd_reverse = %s \n X = %s \n J = %s \n I = %s \n V = %s \n Y = %s \n y_new = %s \n ret.coef_ = %s \n ZmUl = %s \n'\
# %(str(fd_reverse), str(X), str(J), str(I), str(V), str(Y), str(y_new), str(ret.coef_), str(ZmUl)))
return dict(zip(fd_reverse, (ret.coef_ + ZmUl).tolist()))
评论列表
文章目录