def test_dimensions(self): x = Table('iris')[:20].X xt = Table('iris')[:20].X.T mah = MahalanobisDistance(x) mah(x[0], x[1]) mah = MahalanobisDistance(xt) mah(xt[0], xt[1])
def test_correctness(self): mah = MahalanobisDistance(self.x) d = scipy.spatial.distance.pdist(self.x, 'mahalanobis') d = scipy.spatial.distance.squareform(d) for i in range(self.n): for j in range(self.n): self.assertAlmostEqual(d[i][j], mah(self.x[i], self.x[j]), delta=1e-5)
def test_distance_combo(self): """Check distances when the metric changes""" self.assertEqual(self.widget.metrics_combo.count(), len(METRICS)) self.send_signal("Data", self.iris) for i, metric in enumerate(METRICS): if isinstance(metric, MahalanobisDistance): metric = MahalanobisDistance(self.iris) self.widget.metrics_combo.activated.emit(i) self.widget.metrics_combo.setCurrentIndex(i) self.send_signal("Data", self.iris) np.testing.assert_array_equal(metric(self.iris), self.get_output("Distances"))
def test_attributes(self): metric = MahalanobisDistance(self.x) self.assertEqual(metric(self.x[0], self.x[1]).shape, (1, 1)) self.assertEqual(metric(self.x).shape, (self.n, self.n)) self.assertEqual(metric(self.x[0:3], self.x[5:7]).shape, (3, 2)) self.assertEqual(metric(self.x1, self.x2).shape, (1, 1)) metric(self.x, impute=True) metric(self.x[:-1, :]) self.assertRaises(ValueError, metric, self.x[:, :-1]) self.assertRaises(ValueError, metric, self.x1[:-1], self.x2) self.assertRaises(ValueError, metric, self.x1, self.x2[:-1]) self.assertRaises(ValueError, metric, self.x.T)
def test_knn_distance(self): icp = InductiveClassifier(KNNDistance(Euclidean), self.train, self.calibrate) pred = icp(self.test.x, 0.1) self.assertEqual(pred, ['Iris-setosa']) icp = InductiveClassifier(KNNDistance(Cosine, 5), self.train, self.calibrate) pred = icp(self.test.x, 0.1) self.assertEqual(pred, ['Iris-setosa']) from Orange.distance import Mahalanobis icp = InductiveClassifier(KNNDistance(Mahalanobis, 5), self.train, self.calibrate) pred = icp(self.test.x, 0.1) self.assertEqual(pred, ['Iris-setosa']) from Orange.distance import MahalanobisDistance Mah = MahalanobisDistance(self.train) icp = InductiveClassifier(KNNDistance(Mah, 5), self.train, self.calibrate) pred = icp(self.test.x, 0.1) self.assertEqual(pred, ['Iris-setosa'])
def test_iris(self): tab = Table('iris') metric = MahalanobisDistance(tab) self.assertEqual(metric(tab).shape, (150, 150)) self.assertEqual(metric(tab[0], tab[1]).shape, (1, 1))