sporco.admm.rpca

Classes for ADMM algorithms for Robust PCA optimisation

Classes

RobustPCA(*args, **kwargs)

ADMM algorithm for Robust PCA problem [12] [11].


Class Descriptions

class sporco.admm.rpca.RobustPCA(*args, **kwargs)[source]

Bases: ADMM

ADMM algorithm for Robust PCA problem [12] [11].

Solve the optimisation problem

\[\mathrm{argmin}_{X, Y} \; \| X \|_* + \lambda \| Y \|_1 \quad \text{such that} \quad X + Y = S \;\;.\]

This problem is unusual in that it is already in ADMM form without the need for any variable splitting.

After termination of the solve method, attribute itstat is a list of tuples representing statistics of each iteration. The fields of the named tuple IterationStats are:

Iter : Iteration number

ObjFun : Objective function value

NrmNuc : Value of nuclear norm term \(\| X \|_*\)

NrmL1 : Value of \(\ell_1\) norm term \(\| Y \|_1\)

Cnstr : Constraint violation \(\| X + Y - S\|_2\)

PrimalRsdl : Norm of primal residual

DualRsdl : Norm of dual residual

EpsPrimal : Primal residual stopping tolerance \(\epsilon_{\mathrm{pri}}\)

EpsDual : Dual residual stopping tolerance \(\epsilon_{\mathrm{dua}}\)

Rho : Penalty parameter

Time : Cumulative run time

Parameters:
Sarray_like

Signal vector or matrix

lmbdafloat

Regularisation parameter

optRobustPCA.Options object

Algorithm options

class Options(opt=None)[source]

Bases: Options

RobustPCA algorithm options

Options include all of those defined in sporco.admm.admm.ADMM.Options, together with an additional option:

fEvalX : Flag indicating whether the \(f\) component of the objective function should be evaluated using variable X (True) or Y (False) as its argument.

gEvalY : Flag indicating whether the \(g\) component of the objective function should be evaluated using variable Y (True) or X (False) as its argument.

Parameters:
optdict or None, optional (default None)

RobustPCA algorithm options

defaults = {'AbsStopTol': 0.0, 'AutoRho': {'AutoScaling': True, 'Enabled': True, 'Period': 1, 'RsdlRatio': 1.2, 'RsdlTarget': None, 'Scaling': 1000.0, 'StdResiduals': False}, 'Callback': None, 'DataType': None, 'FastSolve': False, 'IterTimer': 'solve', 'MaxMainIter': 1000, 'RelStopTol': 0.001, 'RelaxParam': 1.8, 'StatusHeader': True, 'U0': None, 'Verbose': False, 'Y0': None, 'fEvalX': True, 'gEvalY': True, 'rho': None}

Default content and allowed dict keys

itstat_fields_objfn = ('ObjFun', 'NrmNuc', 'NrmL1', 'Cnstr')

Fields in IterationStats associated with the objective function; see eval_objfn

hdrtxt_objfn = ('Fnc', 'NrmNuc', 'Nrmℓ1', 'Cnstr')

Display column headers associated with the objective function; see eval_objfn

hdrval_objfun = {'Cnstr': 'Cnstr', 'Fnc': 'ObjFun', 'NrmNuc': 'NrmNuc', 'Nrmℓ1': 'NrmL1'}

Dictionary mapping display column headers in hdrtxt_objfn to IterationStats entries

uinit(ushape)[source]

Return initialiser for working variable U

solve()[source]

Start (or re-start) optimisation.

xstep()[source]

Minimise Augmented Lagrangian with respect to \(\mathbf{x}\).

ystep()[source]

Minimise Augmented Lagrangian with respect to \(\mathbf{y}\).

obfn_fvar()[source]

Variable to be evaluated in computing regularisation term, depending on ‘fEvalX’ option value.

obfn_gvar()[source]

Variable to be evaluated in computing regularisation term, depending on ‘gEvalY’ option value.

eval_objfn()[source]

Compute components of objective function as well as total contribution to objective function.

cnst_A(X)[source]

Compute \(A \mathbf{x}\) component of ADMM problem constraint. In this case \(A \mathbf{x} = \mathbf{x}\).

cnst_AT(X)[source]

Compute \(A^T \mathbf{x}\) where \(A \mathbf{x}\) is a component of ADMM problem constraint. In this case \(A^T \mathbf{x} = \mathbf{x}\).

cnst_B(Y)[source]

Compute \(B \mathbf{y}\) component of ADMM problem constraint. In this case \(B \mathbf{y} = -\mathbf{y}\).

cnst_c()[source]

Compute constant component \(\mathbf{c}\) of ADMM problem constraint. In this case \(\mathbf{c} = \mathbf{s}\).