コード例 #1
0
def test_fused_lasso(n=100, l1=15., ratio=0.1):


    Y = np.random.standard_normal(n)
    Y[int(0.1*n):int(0.3*n)] += 6.
    D1 = (np.identity(n) - np.diag(np.ones(n-1),-1))[1:]
    D2 = np.dot(D1[1:,1:], D1)
    D2 = np.vstack([D1, ratio*np.identity(n)])

    M = np.linalg.eigvalsh(np.dot(D2.T, D2)).max() 
    D1sp = scipy.sparse.csr_matrix(D1)
    Dsp = scipy.sparse.csr_matrix(D2)

    D3 = np.identity(n)
    D3sp =  scipy.sparse.csr_matrix(D3)



    semi = seminorm(l1norm(l1)) #+ seminorm(genl1norm(D1sp,l1))
    p2 = squaredloss((np.eye(n),Y),semi)
    opt2 = regreg.FISTA(p2)
    opt2.debug = True
    obj2 = opt2.fit(tol=1.0e-10, max_its=5000)
    beta2, _ = opt2.output
    print beta2


    p1 = sapprox.gengrad_sparse((D3sp, Y),L=M)
    p1.assign_penalty(l1=l1)


    opt1 = regreg.FISTA(p1)
    #opt1.debug = True
    obj1 = opt1.fit(tol=1.0e-10, max_its=5000, alpha=1.05)
    beta1, _ = opt1.output
    print beta1
    
    print np.allclose(beta1,beta2,rtol=1e-4)

    """
コード例 #2
0
import pylab
import numpy as np
import scipy.sparse

from regreg.algorithms import FISTA
from regreg.smooth import l2normsq
from regreg.atoms import l1norm, maxnorm
from regreg.seminorm import seminorm


sparsity = l1norm(500, l=1.3)
D = (np.identity(500) + np.diag([-1]*499,k=1))[:-1]
D = scipy.sparse.csr_matrix(D)
fused = l1norm(D, l=20)

penalty = seminorm(sparsity,fused)


Y = np.random.standard_normal(500); Y[100:150] += 7; Y[250:300] += 14
loss = l2normsq.shift(-Y, l=0.5)
problem = loss.add_seminorm(penalty)
solver = FISTA(problem)
solver.fit(max_its=100, tol=1e-10)
solution = solver.problem.coefs

import pylab
pylab.scatter(np.arange(Y.shape[0]), Y, c='r')
pylab.plot(solution, color='yellow', linewidth=5)

l1_fused = np.fabs(D * solution).sum()
l1_sparsity = np.fabs(solution).sum()
コード例 #3
0
ファイル: tfocs.py プロジェクト: Xiaoying-Tian/regreg
import scipy.sparse

from regreg.algorithms import FISTA
from regreg.smooth import quadratic
from regreg.atoms import l1norm, maxnorm
from regreg.seminorm import seminorm

D = (np.diag(np.ones(500)) - np.diag(np.ones(499),1))[:-1]
DT = scipy.sparse.csr_matrix(D.T)
D = scipy.sparse.csr_matrix(D)

Y = np.random.standard_normal(500); Y[100:150] += 7; Y[250:300] += 14
loss = quadratic.shift(-Y, l=0.5)
penalty = l1norm(D, l=20)

problem = loss.add_seminorm(seminorm(penalty))
solver = FISTA(problem)
solver.fit(max_its=100, tol=1e-10)
solution = solver.problem.coefs

l1_soln = np.fabs(D * solution).sum()

tfocs_penalty = maxnorm(499, l=l1_soln)
tfocs_loss = quadratic.affine(DT, -Y, l=0.5)
tfocs_loss.coefs = np.zeros(499)
tfocs_problem = tfocs_loss.add_seminorm(tfocs_penalty)
tfocs_solver = FISTA(tfocs_problem)
tfocs_solver.debug = True
tfocs_solver.fit(max_its=1000, tol=1e-10)
tfocs_dual_solution = tfocs_problem.coefs
tfocs_primal_solution = Y - DT * tfocs_dual_solution
コード例 #4
0
ファイル: tfocs.py プロジェクト: sowuy/regreg
from regreg.algorithms import FISTA
from regreg.smooth import l2normsq
from regreg.atoms import l1norm, maxnorm
from regreg.seminorm import seminorm

D = (np.diag(np.ones(500)) - np.diag(np.ones(499), 1))[:-1]
DT = scipy.sparse.csr_matrix(D.T)
D = scipy.sparse.csr_matrix(D)

Y = np.random.standard_normal(500)
Y[100:150] += 7
Y[250:300] += 14
loss = l2normsq.shift(-Y, l=0.5)
penalty = l1norm(D, l=20)

problem = loss.add_seminorm(seminorm(penalty))
solver = FISTA(problem)
solver.fit(max_its=100, tol=1e-10)
solution = solver.problem.coefs

l1_soln = np.fabs(D * solution).sum()

tfocs_penalty = maxnorm(499, l=l1_soln)
tfocs_loss = l2normsq.affine(DT, -Y, l=0.5)
tfocs_loss.coefs = np.zeros(499)
tfocs_problem = tfocs_loss.add_seminorm(tfocs_penalty)
tfocs_solver = FISTA(tfocs_problem)
tfocs_solver.debug = True
tfocs_solver.fit(max_its=1000, tol=1e-10)
tfocs_dual_solution = tfocs_problem.coefs
tfocs_primal_solution = Y - DT * tfocs_dual_solution