我创建了一个返回两个值的函数,但每当我执行它时,我只返回第一个值。这有什么不对?
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)
然后作为输出,我只得到返回的第一个参数。如果我在返回时更改顺序,我会接受另一个,但我永远不能同时接受它们......)
这是我看不到的完全愚蠢的东西吗? 感谢
答案 0 :(得分:1)
今天我再次打开Canopy(我昨天也做了同样的事情)它正确地运行返回2个变量....可能是它的bug或它被卡住了我不知道发生了什么......