L1正则化最小二乘法

时间:2017-08-05 07:24:49

标签: python least-squares

我试图用L1正则化最小二乘法求解下面的套索优化函数。我正在为我的项目使用python。

α'* = arg min (||y’–B’α’||_2^2 + λ||α’||_1)

此处α'*是一个向量。 B’=(m+p)*py’=(m+p)*1α‘=p*1

的维度

我无法解决这个等式。请任何人解释eqnL1正则化最小二乘法中解决此方程的方法。

1 个答案:

答案 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)))