%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
from cvxpy import *
n = 100
nonzeros = 5
obs = 30
x_true = np.zeros(n)
x_true[:nonzeros] = np.random.rand(nonzeros)+1
np.random.shuffle(x_true)
A = np.random.randn(obs,n)
b = A.dot(x_true) + np.random.rand(obs)*.1
plt.stem(x_true)
<Container object of 3 artists>
x = Variable(n)
obj = sum_squares(A*x - b)
Problem(Minimize(obj)).solve()
x = np.array(x.value).flatten()
fig = plt.figure()
ax = fig.add_subplot(111)
ax.stem(x)
fig.savefig('ls_recovery.pdf')
x = Variable(n)
obj = sum_squares(A*x - b) + 1.5*norm(x,1)
Problem(Minimize(obj)).solve()
x = np.array(x.value).flatten()
fig = plt.figure()
ax = fig.add_subplot(111)
ax.stem(x)
fig.savefig('lasso_recovery.pdf')
fig = plt.figure()
ax = fig.add_subplot(111)
ax.stem(x_true)
fig.savefig('x_true.pdf')