def test_probs(self): data = Table('iris')[30:130] fitters = [majority.MajorityFitter(), majority.MajorityFitter()] results = testing.TestOnTrainingData(k=10)(data, fitters) self.assertEqual(results.predicted.shape, (2, len(data))) np.testing.assert_equal(results.predicted, np.ones((2, 100))) probs = results.probabilities self.assertTrue((probs[:, :, 0] < probs[:, :, 2]).all()) self.assertTrue((probs[:, :, 2] < probs[:, :, 1]).all())
def test_miss_majority(self): x = np.zeros((50, 3)) y = x[:, -1] x[49] = 1 data = Table(x, y) res = testing.CrossValidation(data, [majority.MajorityFitter()]) np.testing.assert_equal(res.predicted[0][:49], 0) x[49] = 0 res = testing.CrossValidation(data, [majority.MajorityFitter()]) np.testing.assert_equal(res.predicted[0][:49], 0)
def test_missing(self): iris = data.Table('iris') learn = majority_.MajorityFitter() for e in iris[:len(iris) // 2:2]: e.set_class("?") clf = learn(iris) y = clf(iris) self.assertTrue((y == 2).all()) iris = data.Table('iris') learn = majority_.MajorityFitter() for e in iris: e.set_class("?") clf = learn(iris) y = clf(iris) self.assertTrue((y == 0).all())
def test_store_models(self): nrows, ncols = 1000, 10 t = random_data(nrows, ncols) fitters = [naive_bayes.BayesLearner(), majority.MajorityFitter()] cv = testing.CrossValidation(k=5) res = cv(t, fitters) self.assertIsNone(res.models) cv = testing.CrossValidation(k=5, store_models=True) res = cv(t, fitters) self.assertEqual(len(res.models), 5) for models in res.models: self.assertEqual(len(models), 2) self.assertIsInstance(models[0], naive_bayes.BayesClassifier) self.assertIsInstance(models[1], majority.ConstantClassifier) cv = testing.CrossValidation(k=5) res = cv(t, fitters) self.assertIsNone(res.models) res = testing.CrossValidation(t, fitters, k=5, store_models=True) self.assertEqual(len(res.models), 5) for models in res.models: self.assertEqual(len(models), 2) self.assertIsInstance(models[0], naive_bayes.BayesClassifier) self.assertIsInstance(models[1], majority.ConstantClassifier)
def test_store_models(self): nrows, ncols = 50, 10 t = random_data(nrows, ncols) fitters = [naive_bayes.BayesLearner(), majority.MajorityFitter()] cv = testing.TestOnTrainingData() res = cv(t, fitters) self.assertIsNone(res.models) cv = testing.TestOnTrainingData(store_models=True) res = cv(t, fitters) self.assertEqual(len(res.models), 1) for models in res.models: self.assertEqual(len(models), 2) self.assertIsInstance(models[0], naive_bayes.BayesClassifier) self.assertIsInstance(models[1], majority.ConstantClassifier) cv = testing.TestOnTrainingData() res = cv(t, fitters) self.assertIsNone(res.models) res = testing.TestOnTrainingData(t, fitters, store_models=True) self.assertEqual(len(res.models), 1) for models in res.models: self.assertEqual(len(models), 2) self.assertIsInstance(models[0], naive_bayes.BayesClassifier) self.assertIsInstance(models[1], majority.ConstantClassifier)
def test_miss_majority(self): x = np.zeros((50, 3)) y = x[:, -1] x[49] = 1 data = Table(x, y) res = testing.TestOnTrainingData(data, [majority.MajorityFitter()]) np.testing.assert_equal(res.predicted[0][:49], 0) x[49] = 0 res = testing.TestOnTrainingData(data, [majority.MajorityFitter()]) np.testing.assert_equal(res.predicted[0][:49], 0) x[25:] = 1 y = x[:, -1] data = Table(x, y) res = testing.TestOnTrainingData(data, [majority.MajorityFitter()]) np.testing.assert_equal(res.predicted[0], res.predicted[0][0])
def test_miss_majority(self): x = np.zeros((50, 3)) y = x[:, -1] x[49] = 1 data = Table(x, y) res = testing.LeaveOneOut(data, [majority.MajorityFitter()]) np.testing.assert_equal(res.predicted[0][:49], 0) x[49] = 0 res = testing.LeaveOneOut(data, [majority.MajorityFitter()]) np.testing.assert_equal(res.predicted[0][:49], 0) x[25:] = 1 y = x[:, -1] data = Table(x, y) res = testing.LeaveOneOut(data, [majority.MajorityFitter()]) np.testing.assert_equal(res.predicted[0], 1 - data.Y[res.row_indices].flatten())
def test_majority(self): nrows = 1000 ncols = 10 x = np.random.random_integers(1, 3, (nrows, ncols)) y = np.random.random_integers(1, 3, (nrows, 1)) // 2 y[0] = 4 t = data.Table(x, y) learn = majority_.MajorityFitter() clf = learn(t) x2 = np.random.random_integers(1, 3, (nrows, ncols)) y2 = clf(x2) self.assertTrue((y2 == 1).all())
def test_weights(self): nrows = 100 ncols = 10 x = np.random.random_integers(1, 3, (nrows, ncols)) y = np.random.random_integers(1, 5, (nrows, 1)) heavy = 3 w = (y == heavy) * 123 + 1 t = data.Table(x, y, W=w) learn = majority_.MajorityFitter() clf = learn(t) x2 = np.random.random_integers(1, 3, (nrows, ncols)) y2 = clf(x2) self.assertTrue((y2 == heavy).all())
def test_continuous(self): autompg = data.Table('auto-mpg') learn = majority_.MajorityFitter() self.assertRaises(ValueError, learn, autompg)
def test_empty(self): iris = data.Table('iris') learn = majority_.MajorityFitter() clf = learn(iris[:0]) y = clf(iris[0], clf.Probs) self.assertTrue(np.allclose(y, y.sum() / y.size))