【发布时间】:2015-03-05 17:33:55
【问题描述】:
我创建了一个返回两个值的函数,但每当我执行它时,我只得到第一个值。有什么问题???
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之前打印出objpr和frpr,您会得到什么?lasso_weighted()究竟返回了什么值? -
我得到了正确的值,例如 objpr 是 91.100 附近的值,而表 [66,1]
-
而lasso_weighted返回的值是第一个参数的正确值
-
只需返回一个包含这两个值的元组,然后在需要时分配它们或继续使用该元组...
-
是的,这可能是一个我会尝试的解决方案,但为什么会发生这种情况?