我创建了一个返回两个值的函数,但是每执行一次,我只会得到第一个值。有什么问题吗???
import numpy as np
from sklearn.linear_model import Lasso
def lasso_weighted(X,s,lam):
n_samples, n_features = X.shape
alpha = lam*2*np.sqrt(n_samples)
g = lambda w: np.sqrt(np.abs(w))
gprime = lambda w: 1. / (2. * np.sqrt(np.abs(w)) + np.finfo(float).eps)
p_obj = lambda w: 1. / (2 * n_samples) * np.sum((s - np.dot(X, w)) ** 2) \
+ alpha * np.sum(g(w))
weights = np.ones(n_features)
# n_lasso_iterations = 5
counter=1
frpr=0
objpr=10**6
t=10**-2
#for k in range(n_lasso_iterations):
while True:
print counter
X_w = X / weights[np.newaxis, :]
clf = Lasso(alpha=alpha, fit_intercept=False)
clf.fit(X_w, s)
fr = clf.coef_ / weights
weights = gprime(fr)
print p_obj(fr) # should go down
# if max(abs(fr-frpr))<t:
if objpr<p_obj(fr):
break
counter=counter+1
frpr=fr
objpr=p_obj(fr)
return objpr,frpr
所以,如果我调用我的程序
import lassoweight as ls
a,b=ls.lasso_weighted(X,S,v)
我只收到一个错误,无法解包太多值。如果我运行
ls.lasso_weighted(X,S,v)
然后作为输出,我只会得到return的第一个参数。如果我在退货时更改订单,我会选择另一个,但是我永远都不会两者都接受。这是我完全看不见的愚蠢吗?
谢谢
最佳答案
好了,今天我再次打开了Canopy(昨天我也做了同样的事情),它可以正确返回2个变量。...可能是错误或卡住了,我不知道发生了什么...