36 lines
1.4 KiB
Python
36 lines
1.4 KiB
Python
import unittest
|
|
|
|
import numpy as np
|
|
from sklearn.linear_model import LogisticRegression
|
|
|
|
from quapy.classification.calibration import NBVSCalibration, BCTSCalibration, TSCalibration, VSCalibration
|
|
from quapy.tests._synthetic import make_labelled_collection
|
|
|
|
|
|
class TestCalibration(unittest.TestCase):
|
|
|
|
data = make_labelled_collection(n_samples=200, n_features=10, n_classes=3, random_state=23)
|
|
|
|
def test_calibration_methods_fit_predict_proba(self):
|
|
X, y = self.data.Xy
|
|
for calib_cls in [NBVSCalibration, BCTSCalibration, TSCalibration, VSCalibration]:
|
|
model = calib_cls(LogisticRegression(max_iter=2000), val_split=5)
|
|
model.fit(X, y)
|
|
posteriors = model.predict_proba(X)
|
|
self.assertEqual(posteriors.shape, (len(y), self.data.n_classes))
|
|
np.testing.assert_allclose(posteriors.sum(axis=1), 1.0, rtol=1e-5,
|
|
err_msg=f'{calib_cls.__name__} posteriors do not sum to 1')
|
|
predictions = model.predict(X)
|
|
self.assertEqual(len(predictions), len(y))
|
|
|
|
def test_calibration_with_float_val_split(self):
|
|
X, y = self.data.Xy
|
|
model = BCTSCalibration(LogisticRegression(max_iter=2000), val_split=0.3)
|
|
model.fit(X, y)
|
|
posteriors = model.predict_proba(X)
|
|
self.assertEqual(posteriors.shape, (len(y), self.data.n_classes))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|