tick.prox.
ProxNuclear
(strength: float, n_rows: int = None, range: tuple = None, positive: bool = False)[source]¶Proximal operator of the nuclear norm, aka trace norm
strength : float
Level of penalization
n_rows : int
Number of rows in the matrix on which we apply this penalization. The number of columns is then given by (start - end) / n_rows
range : tuple
of two int
, default=`None`
Range on which the prox is applied. If
None
then the prox is applied on the whole vector
positive : bool
, default=`False`
If True, apply nuclear-norm penalization followed by a truncation to make all entries non-negative
rank_max : int
, default=`None`
Maximum rank to be used in the SVD (not used yet…)
Notes
The coeffs on which we apply this prox must be flattened (using
np.ravel
for instance), and not two-dimensional.
This operator is not usable from a solver with wrapped C++ code.
It is based on scipy.linalg.svd
SVD routine and is not intended
for use on large matrices
__init__
(strength: float, n_rows: int = None, range: tuple = None, positive: bool = False)[source]¶Initialize self. See help(type(self)) for accurate signature.
call
(coeffs, step=1.0, out=None)¶Apply proximal operator on a vector. It computes:
coeffs : numpy.ndarray
, shape=(n_coeffs,)
Input vector on which is applied the proximal operator
step : float
or np.array
, default=1.
The amount of penalization is multiplied by this amount
If
float
, the amount of penalization is multiplied by this amountIf
np.array
, then each coordinate of coeffs (within the given range), receives an amount of penalization multiplied by t (available only for separable prox)
out : numpy.ndarray
, shape=(n_params,), default=None
If not
None
, the output is stored in the givenout
. Otherwise, a new vector is created.
output : numpy.ndarray
, shape=(n_coeffs,)
Same object as out
Notes
step
must have the same size as coeffs
whenever range is
None
, or a size matching the one given by the range
otherwise