Skip to content

Commit 785019b

Browse files
committed
Finalized doc of Log1 and added test
1 parent 56f32f0 commit 785019b

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

pyproximal/proximal/Log.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,21 +100,22 @@ def prox(self, x, tau):
100100
out *= np.sign(x)
101101
return out
102102

103+
103104
class Log1(ProxOperator):
104-
r"""Logarithmic penalty.
105+
r"""Logarithmic penalty 2.
105106
106107
The logarithmic penalty (Log) is defined as
107108
108109
.. math::
109110
110-
\mathrm{Log}_{\sigma,\delta}(\mathbf{x}) = \sum_i \log(|x_i| + \delta)
111+
\mathrm{Log}_{\sigma,\delta}(\mathbf{x}) = \sigma \sum_i \log(|x_i| + \delta)
111112
112113
where :math:`{\sigma>0}`, :math:`{\gamma>0}`.
113114
114115
Parameters
115116
----------
116117
sigma : :obj:`float`
117-
Regularization parameter.
118+
Multiplicative coefficient of Log norm.
118119
delta : :obj:`float`, optional
119120
Regularization parameter. Default is 1e-10.
120121
@@ -129,9 +130,9 @@ class Log1(ProxOperator):
129130
130131
\prox_{\tau \sigma log}(\mathbf{x}) =
131132
\begin{cases}
132-
0.5 (x_i - \delta + \sqrt{(x_i+\delta)^2-2\tau \sigma}), & x_i - g_i < -x_0 \\
133-
0, & -x_0 \leq x_i - g_i x_0 \\
134-
0.5 (x_i + \delta - \sqrt{(x_i-\delta)^2-2\tau \sigma}), & x_i - g_i > x_0\\
133+
0.5 (x_i + \delta - \sqrt{(x_i-\delta)^2-2\tau \sigma}), & x_i < -x_0 \\
134+
0, & -x_0 \leq x_i \leq x_0 \\
135+
0.5 (x_i - \delta + \sqrt{(x_i+\delta)^2-2\tau \sigma}), & x_i > x_0\\
135136
\end{cases}
136137
137138
where :math:`x_0=\sqrt{2 \tau \sigma} - \delta`.

pytests/test_concave_penalties.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import numpy as np
44

55
from pyproximal.utils import moreau
6-
from pyproximal.proximal import ETP, Geman, Log, SCAD, QuadraticEnvelopeCard
6+
from pyproximal.proximal import ETP, Geman, Log, Log1, SCAD, QuadraticEnvelopeCard
77

88
par1 = {'nx': 10, 'sigma': 1., 'a': 2.1, 'gamma': 0.5, 'mu': 0.5, 'dtype': 'float32'} # even float32
99
par2 = {'nx': 11, 'sigma': 2., 'a': 3.7, 'gamma': 5.0, 'mu': 1.5, 'dtype': 'float64'} # odd float64
@@ -49,6 +49,19 @@ def test_Log(par):
4949
assert moreau(log, x, tau)
5050

5151

52+
@pytest.mark.parametrize("par", [(par1), (par2)])
53+
def test_Log1(par):
54+
"""Log1 penalty and proximal/dual proximal
55+
"""
56+
np.random.seed(10)
57+
log = Log1(sigma=par['sigma'])
58+
59+
# Check proximal operator
60+
tau = 2.
61+
x = np.random.normal(0., 10.0, par['nx']).astype(par['dtype'])
62+
assert moreau(log, x, tau)
63+
64+
5265
@pytest.mark.parametrize("par", [(par1), (par2)])
5366
def test_ETP(par):
5467
"""Exponential-type penalty and proximal/dual proximal

0 commit comments

Comments
 (0)