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
Ejemplo n.º 3
0
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())