def test_ridge():
    m_ridge = Var(np.ones(X.shape[1]))
    b_ridge = Var(0)
    earlyStop = 0  #1e-8
    forward = False
    epochs = 300
    lr = 0.001
    m_ridge, b_ridge, loss = regression.iterative_regression(
        X, y, m_ridge, b_ridge, regression.ridge_loss, lr, epochs, earlyStop,
        forward)
    clf_l2 = Ridge().fit(X, y)
    assert m_ridge.val == approx(clf_l2.coef_, abs=1e-3)
    assert b_ridge.val == approx(clf_l2.intercept_, abs=1e-3)
def test_lasso():
    m_lasso = Var(np.ones(X.shape[1]))
    b_lasso = Var(0)
    earlyStop = 0  #1e-8
    forward = True
    epochs = 300
    lr = 0.1
    m_lasso, b_lasso, loss = regression.iterative_regression(
        X, y, m_lasso, b_lasso, regression.lasso_loss, lr, epochs, earlyStop,
        forward)
    clf_l1 = Lasso().fit(X, y)
    assert m_lasso.val == approx(clf_l1.coef_, abs=1e-3)
    assert b_lasso.val == approx(clf_l1.intercept_, abs=1e-3)
def test_polynomial():
    X = np.linspace(-10, 10, 20).reshape(-1, 1)
    y = X.reshape(-1)**2
    X = PolynomialFeatures(2, include_bias=False).fit_transform(X)
    m = Var(np.random.rand(X.shape[1]), seed=1.0)
    b = Var(0)
    earlyStop = 0
    forward = False
    m, b, loss = regression.iterative_regression(X, y, m, b, regression.MSE,
                                                 0.0001, 10000, earlyStop,
                                                 forward)
    predict = np.sum(m.val * X, axis=1) + b.val
    assert predict == approx(y, abs=1e-2)
def test_elastic():
    m_el = Var(np.ones(X.shape[1]))
    b_el = Var(0)
    earlyStop = 0  #1e-8
    forward = False
    epochs = 300
    lr = 0.1
    m_el, b_el, loss = regression.iterative_regression(X, y, m_el, b_el,
                                                       regression.elastic_loss,
                                                       lr, epochs, earlyStop,
                                                       forward)
    clf_el = ElasticNet().fit(X, y)
    assert m_el.val == approx(clf_el.coef_, abs=1e-3)
    assert b_el.val == approx(clf_el.intercept_, abs=1e-3)
def test_store():
    m = Var(np.ones(X.shape[1]))
    b = Var(0)
    earlyStop = 1e-8
    forward = True
    history = {}
    m, b, loss = regression.iterative_regression(X, y, m, b, regression.MSE,
                                                 0.1, 100, earlyStop, forward,
                                                 history)
    clf = LinearRegression().fit(X, y)
    assert m.val == approx(clf.coef_, abs=1e-3)
    assert b.val == approx(clf.intercept_, abs=1e-3)
    assert history['m'][-1] == m.val
    assert history['b'][-1] == b.val
    assert history['loss'][-1] == loss.val