Ceci est un problème typique qui peut résoudre avec 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)))
Si vous voulez une solution plus rapide, vous devriez regarder dans les méthodes proximales (également disponible en EOD). Un tel exemple est la méthode 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)))
Est question demandant la mise en œuvre de la programmation ou recherchez-vous une explication mathématique? –
Je demande la mise en œuvre. J'écris un programme pour imputer des valeurs manquantes dans un ensemble de données donné en utilisant la méthode de représentation de réserve limitée par Localité. Dans le cadre de cette méthode, j'ai besoin de trouver le vecteur de coefficient en résolvant l'équation ci-dessus. Mais je ne pouvais pas obtenir comment résoudre l'Eqn ci-dessus. – dinesh12
Vous pouvez essayer d'utiliser sympy: http://www.scipy-lectures.org/advanced/sympy.html Bien que je ne suis pas sûr de la complexité qu'il peut gérer –