我试图用L1正则化最小二乘法求解下面的套索优化函数。我正在为我的项目使用python。
α'* = arg min (||y’–B’α’||_2^2 + λ||α’||_1)
此处α'*
是一个向量。 B’=(m+p)*p
,y’=(m+p)*1
,α‘=p*1
我无法解决这个等式。请任何人解释eqn
和L1
正则化最小二乘法中解决此方程的方法。
答案 0 :(得分:0)
这是一个可以通过ODL解决的典型问题:
import odl
import numpy as np
m = 2
p = 100
lam = 0.00001
# Define B
B = odl.MatrixOperator(np.random.rand(p, m + p))
alpha_true = np.random.rand(m + p)
y = B(alpha_true)
# Define functionals
l2dist = odl.solvers.L2NormSquared(B.range) * (B - y)
l1 = lam * odl.solvers.L1Norm(B.domain)
func = l2dist + l1
# Initial point
alpha = B.domain.zero()
# Solve using steepest descent
odl.solvers.steepest_descent(func, alpha,
line_search=0.0003, maxiter=10000,
callback=lambda x: print(func(x)))
如果您想要更快的解决方案,您应该研究近端方法(也可在ODL中使用)。一个这样的例子是FISTA方法:
import odl
import numpy as np
m = 2
p = 100
lam = 0.00001
# Define B
B = odl.MatrixOperator(np.random.rand(p, m + p))
alpha_true = np.random.rand(m + p)
y = B(alpha_true)
# Define functionals
l2dist = odl.solvers.L2NormSquared(B.range) * (B - y)
l1 = lam * odl.solvers.L1Norm(B.domain)
func = l2dist + l1
# Use FISTA
alpha = B.domain.zero()
odl.solvers.accelerated_proximal_gradient(alpha, l1, l2dist,
gamma=0.0001, niter=1000,
callback=lambda x: print(func(x)))