L1 正则化最小二乘法

L1 Regularized least square

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

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

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

的维度

我解不出这个方程。请任何人在 L1 正则化最小二乘法中解释 eqn 和求解此方程的方法。

这是一个典型的问题,可以用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)))