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