def test_predict(self): """...Test PoissonRegression predict """ X_train, y_train, _, _ = self.get_train_data(n_samples=200, n_features=12) learner = PoissonRegression(random_state=32789, tol=1e-9) learner.fit(X_train, y_train) X_test, y_test, _, _ = self.get_train_data(n_samples=5, n_features=12) y_pred = np.array([1., 5., 0., 5., 6.]) np.testing.assert_array_almost_equal(learner.predict(X_test), y_pred)
def test_loglik(self): """...Test PoissonRegression loglik function """ X_train, y_train, _, _ = self.get_train_data(n_samples=200, n_features=12) learner = PoissonRegression(random_state=32789, tol=1e-9) learner.fit(X_train, y_train) X_test, y_test, _, _ = self.get_train_data(n_samples=5, n_features=12) np.testing.assert_array_almost_equal(learner.loglik(X_test, y_test), 1.8254, decimal=4)
def test_decision_function(self): """...Test PoissonRegression decision function """ X_train, y_train, _, _ = self.get_train_data(n_samples=200, n_features=12) learner = PoissonRegression(random_state=32789, tol=1e-9) learner.fit(X_train, y_train) X_test, y_test, _, _ = self.get_train_data(n_samples=5, n_features=12) y_pred = np.array([1.1448, 5.2194, 0.2624, 4.5525, 6.4168]) np.testing.assert_array_almost_equal(learner.decision_function(X_test), y_pred, decimal=4)
def test_PoissonRegression_fit(self): """...Test PoissonRegression fit with default parameters """ n_samples = 2000 n_features = 20 for fit_intercept in [False, True]: X, y, weights0, intercept0 = self.get_train_data( n_samples=n_samples, n_features=n_features, fit_intercept=fit_intercept) learner = PoissonRegression(C=1e3, verbose=False, fit_intercept=fit_intercept, solver='bfgs') learner.fit(X, y) err = np.linalg.norm(learner.weights - weights0) / n_features self.assertLess(err, 1e-2) if fit_intercept: self.assertLess(np.abs(learner.intercept - intercept0), 1e-1)
def test_PoissonRegression_run(self): """...Test PoissonRegression runs with different solvers and penalties """ n_samples = 200 n_features = 10 for fit_intercept in [False, True]: X, y, weights0, intercept0 = self.get_train_data( n_samples=n_samples, n_features=n_features, fit_intercept=fit_intercept) for solver, penalty in product(PoissonRegression._solvers, PoissonRegression._penalties): if solver == 'bfgs' and (penalty not in ['zero', 'l2']): continue if penalty == 'binarsity': learner = PoissonRegression(verbose=False, fit_intercept=fit_intercept, solver=solver, penalty=penalty, max_iter=1, step=1e-5, blocks_start=[0], blocks_length=[1]) else: learner = PoissonRegression(verbose=False, fit_intercept=fit_intercept, solver=solver, penalty=penalty, max_iter=1, step=1e-5) learner.fit(X, y) self.assertTrue(np.isfinite(learner.weights).all()) if fit_intercept: self.assertTrue(np.isfinite(learner.intercept))