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 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 defineHyperplane(group,cluster): def getVals(model,dic): ret = {} for key,value in dic.items(): ret[key] = model.getVal(value) return ret dimension = cluster.getDimension() ################## model ######################################### model = Model() model.hideOutput() piVars = {} for f in range(dimension): piVars[f] = model.addVar(vtype="CONTINUOUS", name="pi[%s]" % (f),lb=None) alfaVar = model.addVar(vtype="CONTINUOUS", name="alfa",lb=None) objective = model.addVar(vtype="CONTINUOUS", name="objective",lb=None) model.addCons(quicksum(piVars[f]*piVars[f] for f in range(dimension)) <= objective , "objective_function" ) for sample in cluster.getSamples(): model.addCons(quicksum(piVars[f]*sample.getFeature(f) for f in range(dimension))>= alfaVar + 1, "r1%s" % (sample)) for sample in group.getSamples(): model.addCons(quicksum(piVars[f]*sample.getFeature(f) for f in range(dimension)) <= alfaVar - 1,"f2%s" % (sample)) model.setObjective(objective,sense="minimize") model.optimize() return Hyperplane(getVals(model,piVars), model.getVal(alfaVar))
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_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_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 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_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")