大家晚上好。我不能理解函数的输出Spams.lassoWeighted酒店. 如果你在他们的页面上运行这个例子 http://spams-devel.gforge.inria.fr/doc-python/html/doc_spams005.html#sec16:
import spams
import numpy as np
np.random.seed(0)
print "test lasso weighted"
##############################################
# Decomposition of a large number of signals
##############################################
# data generation
X = np.asfortranarray(np.random.normal(size=(64,10000)))
X = np.asfortranarray(X / np.tile(np.sqrt((X*X).sum(axis=0)),(X.shape[0],1)),dtype= myfloat)
D = np.asfortranarray(np.random.normal(size=(64,256)))
D = np.asfortranarray(D / np.tile(np.sqrt((D*D).sum(axis=0)),(D.shape[0],1)),dtype= myfloat)
param = { 'L' : 20,
'lambda1' : 0.15, 'numThreads' : 8, 'mode' : spams.PENALTY}
W = np.asfortranarray(np.random.random(size = (D.shape[1],X.shape[1])),dtype= myfloat)
tic = time.time()
alpha = spams.lassoWeighted(X,D,W,**param)
tac = time.time()
t = tac - tic
print "%f signals processed per second\n" %(float(X.shape[1]) / t)
得到一个64x1矩阵作为输出,它只包含一个非零元素。这对于每种情况都是一样的,每次它只给每个信号一个非零元素。我不明白为什么解在| | x−Dα| | 2+λ| | diag(w)α| | 1。将是一个只有一个非零元素??你知道吗
输出矩阵
alpha
必须有10000列,因为X是64x10000,而字典是64x256(因为Da=X)。所以alpha
应该是256x10000。查看Inria Spams文档,LassoWeighted的输出是:参数
lambda1
决定了非零的数目,因为它与l1正则化器相乘。它们的实现还有参数L
,这是每个稀疏向量的最大非零数。你知道吗所以如果我运行以下命令:
我得到:
所以10000个稀疏近似,实际上是256x1向量,每个都有20个非零。你知道吗
如果我们将
params
改为(最多5个非零):输出:
如果您想要更密集的稀疏近似(alpha列),您可以将
L
放大或将其全部去掉:输出:
相关问题 更多 >
编程相关推荐