L1 正则化最小二乘法
L1 Regularized least square
我正在尝试通过 L1 正则化最小二乘法求解以下套索优化函数。我正在为我的项目使用 python。
α'* = arg min (||y’–B’α’||_2^2 + λ||α’||_1)
这里α'*
是一个向量。 B’=(m+p)*p
、y’=(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)))
我正在尝试通过 L1 正则化最小二乘法求解以下套索优化函数。我正在为我的项目使用 python。
α'* = arg min (||y’–B’α’||_2^2 + λ||α’||_1)
这里α'*
是一个向量。 B’=(m+p)*p
、y’=(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)))