示例#1
0
 def test_prox_binarsity_range(self):
     """...Test ProxBinarsity deals with range correctly
     """
     np.random.seed(2093)
     coeffs = np.random.randn(10)
     # put a very high strength that will push the penalized coefficients
     # to zero
     l_binarsity = 1e2
     blocks_start = [1]
     blocks_length = [3]
     prox_range = (3, 7)
     prox = ProxBinarsity(strength=l_binarsity, blocks_start=blocks_start,
                          blocks_length=blocks_length, range=prox_range)
     start_penalized_coeff = prox_range[0] + blocks_start[0]
     end_penalized_coeff = prox_range[0] + blocks_start[0] + blocks_length[0]
     self.assertTrue(all(prox.call(coeffs)
                         [start_penalized_coeff:end_penalized_coeff] == 0))
示例#2
0
    def test_ProxBinarsity(self):
        """...Test of ProxBinarsity
        """
        coeffs = self.coeffs.copy()
        l_binarsity = 0.5
        t = 1.7
        out = np.array([0., 0., 0., -0.72681389, -0.72681389, 0.4845426,
                        0.4845426, 0.4845426, 0., 0.])
        blocks_start = [0, 3, 8]
        blocks_length = [3, 5, 2]
        prox = ProxBinarsity(strength=l_binarsity, blocks_start=blocks_start,
                             blocks_length=blocks_length)

        val = 0
        for j, d_j in enumerate(blocks_length):
            start = blocks_start[j]
            val += np.abs(coeffs[start + 1:start + d_j]
                          - coeffs[start:start + d_j - 1]).sum()
        val *= l_binarsity

        self.assertAlmostEqual(prox.value(coeffs), val, delta=1e-15)
        assert_almost_equal(prox.call(coeffs, step=t), out, decimal=7)