我想通過L1正則化最小二乘法解決以下拉索優化功能。我爲我的項目使用python。L1正則化最小二乘法
α'* = arg min (||y’–B’α’||_2^2 + λ||α’||_1)
這裏α'*
是一個載體。尺寸B’=(m+p)*p
,y’=(m+p)*1
,α‘=p*1
我無法解決這個方程。請任何人解釋eqn
和解決這個公式的方法L1
正則化最小二乘法。
我想通過L1正則化最小二乘法解決以下拉索優化功能。我爲我的項目使用python。L1正則化最小二乘法
α'* = arg min (||y’–B’α’||_2^2 + λ||α’||_1)
這裏α'*
是一個載體。尺寸B’=(m+p)*p
,y’=(m+p)*1
,α‘=p*1
我無法解決這個方程。請任何人解釋eqn
和解決這個公式的方法L1
正則化最小二乘法。
這是可以與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)))
是詢問編程實現的問題還是您在尋找數學解釋? –
我要求實施。我正在編寫一個程序,用於使用局部性約束備用表示方法來輸入給定數據集中的缺失值。作爲這種方法的一部分,我需要通過求解上面的公式來找到係數向量。但我無法得到如何解決上述公式。 – dinesh12
您可以嘗試使用sympy:http://www.scipy-lectures.org/advanced/sympy.html 雖然我不知道它可以處理 –