Exemple #1
0
def test_conjugate_l1norm():
    '''
    this test verifies that numerically computing the conjugate
    is essentially the same as using the smooth_conjugate
    of the atom
    '''

    q = rr.identity_quadratic(1.2,0,0,0)
    l1 = rr.l1norm(4, lagrange=0.3)
    pen2 = copy(l1)
    pen2.set_quadratic(q)

    v1 = rr.smooth_conjugate(l1, q)
    v2 = rr.conjugate(l1, q, tol=1.e-12, min_its=100)
    v3 = rr.conjugate(pen2, None, tol=1.e-12, min_its=100)
    w = np.random.standard_normal(4)

    u11, u12 = v1.smooth_objective(w)
    u21, u22 = v2.smooth_objective(w)
    u31, u32 = v3.smooth_objective(w)
    np.testing.assert_approx_equal(u11, u21)
    np.testing.assert_allclose(u12, u22, rtol=1.0e-05)
    np.testing.assert_approx_equal(u11, u31)
    np.testing.assert_allclose(u12, u32, rtol=1.0e-05)

    v2.smooth_objective(w, mode='func')
    v2.smooth_objective(w, mode='grad')
    nt.assert_raises(ValueError, v2.smooth_objective, w, 'blah')
Exemple #2
0
def test_conjugate_sqerror():
    """
    This verifies the conjugate class can compute the conjugate
    of a quadratic function.
    """

    ridge_coef = 0.4

    X = np.random.standard_normal((10,4))
    Y = np.random.standard_normal(10)
    l = rr.squared_error(X, Y)

    q = rr.identity_quadratic(ridge_coef,0,0,0)
    atom_conj = rr.conjugate(l, q, tol=1.e-12, min_its=100)
    w = np.random.standard_normal(4)
    u11, u12 = atom_conj.smooth_objective(w)

    # check that objective is half of squared error
    np.testing.assert_allclose(l.smooth_objective(w, mode='func'), 0.5 * np.linalg.norm(Y - np.dot(X, w))**2)
    np.testing.assert_allclose(atom_conj.atom.smooth_objective(w, mode='func'), 0.5 * np.linalg.norm(Y - np.dot(X, w))**2)

    XTX = np.dot(X.T, X) 
    XTXi = np.linalg.pinv(XTX)

    quadratic_term = XTX + ridge_coef * np.identity(4)
    linear_term = np.dot(X.T, Y) + w
    b = u22 = np.linalg.solve(quadratic_term, linear_term)
    u21 = (w*u12).sum() - l.smooth_objective(u12, mode='func') - q.objective(u12, mode='func')
    np.testing.assert_allclose(u12, u22, rtol=1.0e-05)
    np.testing.assert_approx_equal(u11, u21)
Exemple #3
0
def test_conjugate_sqerror():

    X = np.random.standard_normal((10,4))
    Y = np.random.standard_normal(10)
    l = rr.quadratic.affine(X,-Y, coef=0.5)
    v = rr.conjugate(l, rr.identity_quadratic(0.3,None,None,0), tol=1.e-12)
    w=np.random.standard_normal(4)
    u11, u12 = v.smooth_objective(w)

    XTX = np.dot(X.T, X) 
    b = u22 = np.linalg.solve(XTX + 0.3 * np.identity(4), np.dot(X.T, Y) + w)
    u21 = - np.dot(b.T, np.dot(XTX + 0.3 * np.identity(4), b)) / 2. + (w*b).sum()  + (np.dot(X.T, Y) * b).sum() - np.linalg.norm(Y)**2/2.
    np.testing.assert_approx_equal(u11, u21)
    np.testing.assert_allclose(u12, u22, rtol=1.0e-05)
def test_conjugate_l1norm():
    '''
    this test verifies that numerically computing the conjugate
    is essentially the same as using the smooth_conjugate
    of the atom
    '''


    l1 = rr.l1norm(4, lagrange=0.3)
    v1=rr.smooth_conjugate(l1, rr.identity_quadratic(0.3,None,None,0))
    v2 = rr.conjugate(l1, rr.identity_quadratic(0.3,None,None,0), tol=1.e-12)
    w=np.random.standard_normal(4)

    u11, u12 = v1.smooth_objective(w)
    u21, u22 = v2.smooth_objective(w)
    np.testing.assert_approx_equal(u11, u21)
    np.testing.assert_allclose(u12, u22, rtol=1.0e-05)
def test_conjugate_sqerror():
    """
    This verifies the conjugate class can compute the conjugate
    of a quadratic function.
    """
    X = np.random.standard_normal((10, 4))
    Y = np.random.standard_normal(10)
    l = rr.quadratic.affine(X, -Y, coef=0.5)
    v = rr.conjugate(l, rr.identity_quadratic(0.3, 0, 0, 0), tol=1.e-12)
    w = np.random.standard_normal(4)
    u11, u12 = v.smooth_objective(w)

    XTX = np.dot(X.T, X)
    b = u22 = np.linalg.solve(XTX + 0.3 * np.identity(4), np.dot(X.T, Y) + w)
    u21 = -np.dot(b.T, np.dot(XTX + 0.3 * np.identity(4), b)) / 2. + (
        w * b).sum() + (np.dot(X.T, Y) * b).sum() - np.linalg.norm(Y)**2 / 2.
    np.testing.assert_approx_equal(u11, u21)
    np.testing.assert_allclose(u12, u22, rtol=1.0e-05)
Exemple #6
0
def test_conjugate_l1norm():
    '''
    this test verifies that numerically computing the conjugate
    is essentially the same as using the smooth_conjugate
    of the atom
    '''

    l1 = rr.l1norm(4, lagrange=0.3)
    v1 = rr.smooth_conjugate(l1, rr.identity_quadratic(0.3, None, None, 0))
    v2 = rr.conjugate(l1,
                      rr.identity_quadratic(0.3, None, None, 0),
                      tol=1.e-12)
    w = np.random.standard_normal(4)

    u11, u12 = v1.smooth_objective(w)
    u21, u22 = v2.smooth_objective(w)
    np.testing.assert_approx_equal(u11, u21)
    np.testing.assert_allclose(u12, u22, rtol=1.0e-05)