def test_beta(self): rs = np.random.RandomState(42) rng01 = utils.RandomUniform(0, 1, random_state=rs) x = np.array([[0.0], [0.0], [0.0], [0.0], [0.0], [0.15601864], [0.37454012], [0.59865848], [0.73199394], [0.95071431]]) x2 = beta.random((10, 1), density=0.5, rng=rng01, sort=True, normalise=False) assert(np.linalg.norm(x - x2) < utils.TOLERANCE) rs = np.random.RandomState(1337) rng11 = utils.RandomUniform(-1, 1, random_state=rs) x = np.array([[0.0], [-0.24365074], [0.02503597], [-0.0553771], [-0.3239276], [-0.46459304], [0.64803846], [-0.30201006], [0.0], [-0.32403887]]) x2 = beta.random((10, 1), density=0.75, rng=rng11, sort=False, normalise=True) assert(np.linalg.norm(x - x2) < utils.TOLERANCE) assert(abs(np.linalg.norm(x2) - 1) < utils.TOLERANCE)
def test_functions(self): rs = np.random.RandomState(1337) rng01 = utils.RandomUniform(0, 1, random_state=rs) rng11 = utils.RandomUniform(-1, 1, random_state=rs) cnst0 = utils.ConstantValue(0, random_state=rs) x = beta.random((10, 1), density=0.75, rng=rng11, sort=False, normalise=False) # L1 grad = np.array([[0.57911668], [-1.0], [1.0], [-1.0], [-1.0], [-1.0], [1.0], [-1.0], [0.58823715], [-1.0]]) assert(np.linalg.norm(0.1 * grad - functions.L1(0.1, rng=rng11).grad(x)) < utils.TOLERANCE) grad = np.array([[0.0], [-0.7159978], [0.0735713], [-0.1627325], [-0.9519013], [-1.0], [1.0], [-0.8874939], [0.0], [-0.9522283]]) assert(np.linalg.norm(0.1 * grad - functions.SmoothedL1(0.1, mu=5e-1).grad(x)) < utils.TOLERANCE) grad = np.array([[0.0], [-1.0], [1.0], [-1.0], [-1.0], [-1.0], [1.0], [-1.0], [0.0], [-1.0]]) assert(np.linalg.norm(0.25 * grad - functions.SmoothedL1(0.25, mu=5e-8).grad(x)) < utils.TOLERANCE) x = beta.random((10, 1), density=0.5, rng=rng11, sort=False, normalise=False) # L2 grad = np.array([[0.0], [-0.31136769], [-0.18828614], [0.58389796], [0.0], [0.0], [-0.70064494], [0.0], [0.0], [0.18909872]]) assert(np.linalg.norm(0.1 * grad - functions.L2(0.1, rng=rng01).grad(x)) < utils.TOLERANCE) assert(abs(np.linalg.norm(functions.L2(0.5, rng=rng01).grad(x)) < 0.5) < utils.TOLERANCE) assert(abs(np.linalg.norm(functions.L2(1.0, rng=rng01).grad(x)) < 1.0) < utils.TOLERANCE) assert(abs(np.linalg.norm(functions.L2(1.5, rng=rng01).grad(x)) < 1.5) < utils.TOLERANCE) # L2 Squared assert(np.linalg.norm(0.5 * x - functions.L2Squared(0.5).grad(x)) < utils.TOLERANCE) # Total Variation x = beta.random((10, 10), density=0.5, rng=rng11, sort=True, normalise=False) # Generate the linear operator for total variation. A = functions.TotalVariation.A_from_shape((10, 10)) A_ = np.array([[-1.0, 1.0, 0.0], [0.0, -1.0, 1.0], [0.0, 0.0, -1.0]]) assert(np.linalg.norm(A[0].todense()[:3, :3] - A_) < utils.TOLERANCE) A_ = np.array([[0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0], [-1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0,-1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0]]) assert(np.linalg.norm(A[1].todense()[:10, 5:15] - A_) < utils.TOLERANCE) grad = np.array([[-1.37690875], [-0.50249731], [-1.13463951], [-0.92581747], [-1.12545778], [-0.72495808], [-1.09539063], [-1.12191557], [-1.14278035], [-0.38378842], [-0.54044045], [0.1998922], [0.10727523], [0.42029647], [-0.12845922], [-0.09340557], [0.0055352], [0.0456007], [0.8779322], [1.40188876], [-0.57962065], [0.35934782], [-0.42347626], [0.29359706], [2.07205284], [0.65534416], [1.01918068], [-0.45464203], [0.38998718], [-0.19745865], [-0.62748016], [0.63761495], [-0.68385703], [1.89910956], [-0.28092104], [-0.17162572], [0.48321381], [0.79706197], [0.61187108], [-1.42531316], [0.7902697], [0.60837155], [1.20533504], [0.09427085], [-0.70922127], [0.09077005], [0.14231686], [-0.32261771], [-1.0636391], [0.3522861], [0.46381846], [-0.32764258], [-0.9267115], [0.68692098], [-0.28524282], [-1.65222339], [0.3472565], [-0.82272974], [0.60190561], [0.43221722], [0.92882439], [0.21409408], [-0.29173676], [0.43373039], [-0.52463849], [1.59982977], [-1.20161831], [-1.40845266], [0.34302998], [0.90820945], [0.79001083], [0.06567102], [-0.31555666], [-1.34826493], [-1.31252716], [-1.1824102], [-0.31668549], [-0.1015793], [-0.19644832], [0.97835737], [-1.23182642], [-0.63448914], [-1.29006382], [-0.00488059], [-0.34004922], [0.4112866], [-0.36592392], [0.06443214], [-1.17634974], [0.58974244], [-0.55508336], [1.0], [0.99971041], [0.99956841], [0.86125816], [0.99525803], [0.96641958], [0.99990113], [0.80759139], [2.0]]) assert(np.linalg.norm(functions.TotalVariation(0.1, A, rng=rng01).grad(x) - 0.1 * grad) < utils.TOLERANCE) tvgrad = functions.TotalVariation(0.1, A, rng=cnst0).grad(x) tvmugrad = functions.SmoothedTotalVariation(0.1, A, mu=5e-8).grad(x) assert(np.linalg.norm(tvgrad - tvmugrad) < utils.TOLERANCE) # Group Lasso x = beta.random((10, 1), density=0.5, rng=rng11, sort=False, normalise=False) # Create linear operator. A = functions.GroupLasso.A_from_groups(10, [range(5), range(5, 10)]) glgrad = functions.GroupLasso(1.0, A, rng=rng11).grad(x) assert(abs(np.linalg.norm(glgrad[:5]) - 1.0) < utils.TOLERANCE) assert(abs(np.linalg.norm(glgrad[5:]) - 1.0) < utils.TOLERANCE) glmugrad = functions.SmoothedGroupLasso(1.0, A, mu=5e-8).grad(x) assert(np.linalg.norm(glgrad - glmugrad) < utils.TOLERANCE)
def test_functions(self): rs = np.random.RandomState(1337) rng01 = utils.RandomUniform(0, 1, random_state=rs) rng11 = utils.RandomUniform(-1, 1, random_state=rs) cnst0 = utils.ConstantValue(0, random_state=rs) x = beta.random((10, 1), density=0.75, rng=rng11, sort=False, normalise=False) # L1 grad = np.array([[0.57911668], [-1.0], [1.0], [-1.0], [-1.0], [-1.0], [1.0], [-1.0], [0.58823715], [-1.0]]) assert ( np.linalg.norm(0.1 * grad - functions.L1(0.1, rng=rng11).grad(x)) < utils.TOLERANCE) grad = np.array([[0.0], [-0.7159978], [0.0735713], [-0.1627325], [-0.9519013], [-1.0], [1.0], [-0.8874939], [0.0], [-0.9522283]]) assert (np.linalg.norm(0.1 * grad - functions.SmoothedL1(0.1, mu=5e-1).grad(x)) < utils.TOLERANCE) grad = np.array([[0.0], [-1.0], [1.0], [-1.0], [-1.0], [-1.0], [1.0], [-1.0], [0.0], [-1.0]]) assert (np.linalg.norm(0.25 * grad - functions.SmoothedL1(0.25, mu=5e-8).grad(x)) < utils.TOLERANCE) x = beta.random((10, 1), density=0.5, rng=rng11, sort=False, normalise=False) # L2 grad = np.array([[0.0], [-0.31136769], [-0.18828614], [0.58389796], [0.0], [0.0], [-0.70064494], [0.0], [0.0], [0.18909872]]) assert ( np.linalg.norm(0.1 * grad - functions.L2(0.1, rng=rng01).grad(x)) < utils.TOLERANCE) assert ( abs(np.linalg.norm(functions.L2(0.5, rng=rng01).grad(x)) < 0.5) < utils.TOLERANCE) assert ( abs(np.linalg.norm(functions.L2(1.0, rng=rng01).grad(x)) < 1.0) < utils.TOLERANCE) assert ( abs(np.linalg.norm(functions.L2(1.5, rng=rng01).grad(x)) < 1.5) < utils.TOLERANCE) # L2 Squared assert (np.linalg.norm(0.5 * x - functions.L2Squared(0.5).grad(x)) < utils.TOLERANCE) # Total Variation x = beta.random((10, 10), density=0.5, rng=rng11, sort=True, normalise=False) # Generate the linear operator for total variation. A = functions.TotalVariation.A_from_shape((10, 10)) A_ = np.array([[-1.0, 1.0, 0.0], [0.0, -1.0, 1.0], [0.0, 0.0, -1.0]]) assert (np.linalg.norm(A[0].todense()[:3, :3] - A_) < utils.TOLERANCE) A_ = np.array([[0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0], [-1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0]]) assert (np.linalg.norm(A[1].todense()[:10, 5:15] - A_) < utils.TOLERANCE) grad = np.array( [[-1.37690875], [-0.50249731], [-1.13463951], [-0.92581747], [-1.12545778], [-0.72495808], [-1.09539063], [-1.12191557], [-1.14278035], [-0.38378842], [-0.54044045], [0.1998922], [0.10727523], [0.42029647], [-0.12845922], [-0.09340557], [0.0055352], [0.0456007], [0.8779322], [1.40188876], [-0.57962065], [0.35934782], [-0.42347626], [0.29359706], [2.07205284], [0.65534416], [1.01918068], [-0.45464203], [0.38998718], [-0.19745865], [-0.62748016], [0.63761495], [-0.68385703], [1.89910956], [-0.28092104], [-0.17162572], [0.48321381], [0.79706197], [0.61187108], [-1.42531316], [0.7902697], [0.60837155], [1.20533504], [0.09427085], [-0.70922127], [0.09077005], [0.14231686], [-0.32261771], [-1.0636391], [0.3522861], [0.46381846], [-0.32764258], [-0.9267115], [0.68692098], [-0.28524282], [-1.65222339], [0.3472565], [-0.82272974], [0.60190561], [0.43221722], [0.92882439], [0.21409408], [-0.29173676], [0.43373039], [-0.52463849], [1.59982977], [-1.20161831], [-1.40845266], [0.34302998], [0.90820945], [0.79001083], [0.06567102], [-0.31555666], [-1.34826493], [-1.31252716], [-1.1824102], [-0.31668549], [-0.1015793], [-0.19644832], [0.97835737], [-1.23182642], [-0.63448914], [-1.29006382], [-0.00488059], [-0.34004922], [0.4112866], [-0.36592392], [0.06443214], [-1.17634974], [0.58974244], [-0.55508336], [1.0], [0.99971041], [0.99956841], [0.86125816], [0.99525803], [0.96641958], [0.99990113], [0.80759139], [2.0]]) assert (np.linalg.norm( functions.TotalVariation(0.1, A, rng=rng01).grad(x) - 0.1 * grad) < utils.TOLERANCE) tvgrad = functions.TotalVariation(0.1, A, rng=cnst0).grad(x) tvmugrad = functions.SmoothedTotalVariation(0.1, A, mu=5e-8).grad(x) assert (np.linalg.norm(tvgrad - tvmugrad) < utils.TOLERANCE) # Group Lasso x = beta.random((10, 1), density=0.5, rng=rng11, sort=False, normalise=False) # Create linear operator. A = functions.GroupLasso.A_from_groups(10, [range(5), range(5, 10)]) glgrad = functions.GroupLasso(1.0, A, rng=rng11).grad(x) assert (abs(np.linalg.norm(glgrad[:5]) - 1.0) < utils.TOLERANCE) assert (abs(np.linalg.norm(glgrad[5:]) - 1.0) < utils.TOLERANCE) glmugrad = functions.SmoothedGroupLasso(1.0, A, mu=5e-8).grad(x) assert (np.linalg.norm(glgrad - glmugrad) < utils.TOLERANCE)