def test_classify_twoSquarePoliedrom(self): d = 2 k = 2 t0 = "blue" t1 = "red" sample_blue1 = Sample((8.0, 8.0)) sample_blue2 = Sample((2.0, 2.0)) sample_red = Sample((5.0, 5.0)) h1 = Hyperplane({0: 1, 1: 0}, 4) h2 = Hyperplane({0: -1, 1: 0}, 0) h3 = Hyperplane({0: 0, 1: 1}, 4) h4 = Hyperplane({0: 1, 1: -1}, 0) h5 = Hyperplane({0: 1, 1: 0}, 10) h6 = Hyperplane({0: -1, 1: 0}, -6) h7 = Hyperplane({0: 0, 1: 1}, 10) h8 = Hyperplane({0: 0, 1: -1}, -6) classifier = Classifier([], [], t0, t1, d, k) classifier.regions = [ Region([h1, h2, h3, h4], d), Region([h5, h6, h7, h8], d) ] self.assertEquals(t1, classifier.classify(sample_blue1), "la muestra debe ser azul") self.assertEquals(t1, classifier.classify(sample_blue2), "la muestra debe ser azul") self.assertEquals(t0, classifier.classify(sample_red), "la muestra debe ser roja")
def test_isRedundat_onlyOneHyperplane_3d(self): d = 3 h = Hyperplane([1.0, 1.0, 0.0], 5) r = Region([h], d) resul = h.isRedundant(r) self.assertFalse(resul, "no puede ser redundante si no hay otro hiperplanos") pass
def createRegions(groups, clusters): regions = set([]) for grp in groups.getGroups(): hiperplanes = [] for clstr in clusters.getClusters(): hiperplanes.append(defineHyperplane(grp, clstr)) regions.add(Region(hiperplanes, clusters.getDimension())) return map(lambda rgn: eliminateRedundant(rgn), regions)
def test_isRedundant_thereIsNotRedundant_3d(self): d = 3 h1 = Hyperplane([1.0, 1.0, 0.0], 5.5) h2 = Hyperplane([2.0, 1.0, 0.0], 6.0) h3 = Hyperplane([3.0, 1.0, 0.0], 7.0) r = Region([h1, h2, h3], d) self.assertFalse(h1.isRedundant(r), "el hiperplano x + y = 5.5 no es redundante") self.assertFalse(h2.isRedundant(r), "el hiperplano 2x + y = 6 no es redundante") self.assertFalse(h3.isRedundant(r), "el hiperplano 3x + y = 7 no es redundante")
def test_classify_twoPolytope(self): d = 2 k = 2 t0 = "blue" t1 = "red" sample_blue1 = Sample((-10.0, -5.0)) sample_blue2 = Sample((40.0, 20.0)) sample_red = Sample((5.0, 5.0)) h1 = Hyperplane({0: 1, 1: 2}, 5) h2 = Hyperplane({0: 1, 1: 0.5}, 5) h3 = Hyperplane({0: -1, 1: -2}, -30) h4 = Hyperplane({0: -1, 1: -0.5}, -30) classifier = Classifier([], [], t0, t1, d, k) classifier.regions = [Region([h1, h2], d), Region([h3, h4], d)] self.assertEquals(t1, classifier.classify(sample_blue1), "la muestra debe ser azul") self.assertEquals(t1, classifier.classify(sample_blue2), "la muestra debe ser azul") self.assertEquals(t0, classifier.classify(sample_red), "la muestra debe ser roja")
def test_Classify_trivial(self): d = 2 k = 1 t0 = "blue" t1 = "red" sample_blue = Sample((2.0, 0.0)) sample_red = Sample((6.0, 0.0)) hyperplane = Hyperplane({0: 4, 1: 0}, 16) classifier = Classifier([], [], t0, t1, d, k) classifier.regions = [Region([hyperplane], d)] self.assertEquals(t1, classifier.classify(sample_blue), "la muestra debe ser azul") self.assertEquals(t0, classifier.classify(sample_red), "la muestra debe ser roja")
def test_classify_Polytope(self): d = 2 k = 2 t0 = "blue" t1 = "red" sample_blue = Sample((-5.0, -5.0)) sample_red = Sample((5.0, 5.0)) h1 = Hyperplane({0: 1, 1: 2}, 5) h2 = Hyperplane({0: 1, 1: 0.5}, 5) classifier = Classifier([], [], t0, t1, d, k) classifier.regions = [Region([h1, h2], d)] self.assertEquals(t1, classifier.classify(sample_blue), "la muestra debe ser azul") self.assertEquals(t0, classifier.classify(sample_red), "la muestra debe ser roja")
def test_isRedundat_thereIsRedundant_3d(self): d = 3 h1 = Hyperplane([1.0, 1.0, 0.0], 5.5) h2 = Hyperplane([1.0, 1.0, 0.0], 6.0) h3 = Hyperplane([1.0, 1.0, 0.0], 7.0) r = Region([h1, h2, h3], d) self.assertFalse(h1.isRedundant(r), "el hiperplano x + y = 5.5 no es redundante") self.assertTrue( h2.isRedundant(r), "el hiperplano x + y = 6 es redundante por el hiperplano x 'y = 5.5" ) self.assertTrue( h3.isRedundant(r), "el hiperplano x + y = 7 es redundante por el hiperplano x 'y = 5.5" ) pass
def test_Classify_squarePolyedrom(self): d = 2 k = 1 t0 = "blue" t1 = "red" sample_blue = Sample((2.0, 2.0)) sample_red = Sample((6.0, 0.0)) h1 = Hyperplane({0: 1, 1: 0}, 4) h2 = Hyperplane({0: -1, 1: 0}, 0) h3 = Hyperplane({0: 0, 1: 1}, 4) h4 = Hyperplane({0: 1, 1: -1}, 0) classifier = Classifier([], [], t0, t1, d, k) classifier.regions = [Region([h1, h2, h3, h4], d)] self.assertEquals(t1, classifier.classify(sample_blue), "la muestra debe ser azul") self.assertEquals(t0, classifier.classify(sample_red), "la muestra debe ser roja")
def test_Classify_irregularPolyhedron(self): d = 2 k = 1 t0 = "blue" t1 = "red" sample_blue = Sample((0.0, 0.0)) sample_red = Sample((20.0, 20.0)) h1 = Hyperplane({0: 1, 1: 1}, 10) h2 = Hyperplane({0: -10, 1: -1}, 10) h3 = Hyperplane({0: 4, 1: -1}, 50) h4 = Hyperplane({0: 1, 1: -1}, 10) classifier = Classifier([], [], t0, t1, d, k) classifier.regions = [Region([h1, h2, h3, h4], d)] self.assertEquals(t1, classifier.classify(sample_blue), "la muestra debe ser azul") self.assertEquals(t0, classifier.classify(sample_red), "la muestra debe ser roja")
def eliminateRedundant(region): return Region(filter(lambda hypr: hypr.isRedundant(region) == False, region.getHyperplanes()),region.getDimension())