def test_prediction(self):
     print """Test basic classification"""
     classifier = NaiveBayes()
     classifier.train(self.training_set)
     predictions = [classifier.classify_instance(x) for x in self.training_set]
     self.assertEqual(predictions[0], 'cat')
     self.assertEqual(predictions[1], 'dog')
     self.assertEqual(predictions[2], 'cat')
     self.assertEqual(predictions[3], 'dog')
     self.assertEqual(predictions[4], 'dog')
count_x_y[woof_index, dog_index] == (2+1)

count_y = classifier.count_y_table
count_y[cat_index] == 3
count_y[dog_index] == 2

"""Test probability tables
Regardless of what kind of smoothing you do, the signs have to be right
"""

classifier.train(training_set)

p_x_given_y = classifier.p_x_given_y_table
p_x_given_y[meow_index, cat_index] > p_x_given_y[meow_index, dog_index]
p_x_given_y[bark_index, cat_index] < p_x_given_y[bark_index, dog_index]

p_y = classifier.p_y_table
p_y[cat_index] > p_y[dog_index]

"""Test smoothing
Zero counts must not result in zero proability
"""
p_x_given_y[bark_index, cat_index] != 0
p_x_given_y[purr_index, dog_index] != 0

"""Test basic classification"""
predictions = [classifier.classify_instance(x) for x in training_set]
predictions == ['cat', 'cat', 'cat', 'dog', 'dog']