--- a +++ b/tests/test_models.py @@ -0,0 +1,61 @@ +import pickle +import numpy as np + +from numpy.testing import assert_array_almost_equal, assert_array_equal +import pytest + +from oddt.scoring.models import classifiers, regressors + + +@pytest.mark.filterwarnings('ignore:Stochastic Optimizer') +@pytest.mark.parametrize('cls', + [classifiers.svm(probability=True), + classifiers.neuralnetwork(random_state=42)]) +def test_classifiers(cls): + # toy data + X = np.concatenate((np.zeros((5, 2)), np.ones((5, 2)))) + Y = np.concatenate((np.ones(5), np.zeros(5))) + + np.random.seed(42) + + cls.fit(X, Y) + + assert_array_equal(cls.predict(X), Y) + assert cls.score(X, Y) == 1.0 + + prob = cls.predict_proba(X) + assert_array_almost_equal(prob, [[0, 1]] * 5 + [[1, 0]] * 5, decimal=1) + log_prob = cls.predict_log_proba(X) + assert_array_almost_equal(np.log(prob), log_prob) + + pickled = pickle.dumps(cls) + reloaded = pickle.loads(pickled) + prob_reloaded = reloaded.predict_proba(X) + assert_array_almost_equal(prob, prob_reloaded) + + +@pytest.mark.parametrize('reg', + [regressors.svm(C=10), + regressors.randomforest(random_state=42), + regressors.neuralnetwork(solver='lbfgs', + random_state=42, + hidden_layer_sizes=(20, 20)), + regressors.mlr()]) +def test_regressors(reg): + X = np.vstack((np.arange(30, 10, -2, dtype='float64'), + np.arange(100, 90, -1, dtype='float64'))).T + + Y = np.arange(10, dtype='float64') + + np.random.seed(42) + + reg.fit(X, Y) + + pred = reg.predict(X) + assert (np.abs(pred.flatten() - Y) < 1).all() + assert reg.score(X, Y) > 0.9 + + pickled = pickle.dumps(reg) + reloaded = pickle.loads(pickled) + pred_reloaded = reloaded.predict(X) + assert_array_almost_equal(pred, pred_reloaded)