def calc_indicator_value(self, index): numData = self.trainData.getNrows() numCoeff = self.grid.getSize() seq = self.grid.getStorage().seq(index) num = 0 denom = 0 tmp = DataVector(numCoeff) self.multEval.multTranspose(self.errors, tmp) num = tmp.__getitem__(seq) num **= 2 alpha = DataVector(numCoeff) col = DataVector(numData) alpha.__setitem__(seq, 1.0) self.multEval.mult(alpha, col) col.sqr() denom = col.sum() if denom == 0: print("Denominator is zero") value = 0 else: value = num / denom return value
def calc_indicator_value(self, index): numData = self.trainData.getNrows() numCoeff = self.grid.getSize() seq = self.grid.getStorage().seq(index) num = 0 denom = 0 tmp = DataVector(numCoeff) self.multEval.multTranspose(self.errors, tmp) num = tmp.__getitem__(seq) num **= 2 alpha = DataVector(numCoeff) col = DataVector(numData) alpha.__setitem__(seq, 1.0) self.multEval.mult(alpha, col) col.sqr() denom = col.sum() if denom == 0: print "Denominator is zero" value = 0 else: value = num/denom return value
def general_test(self, d, l, bb, xs): test_desc = "dim=%d, level=%d, len(x)=%s" % (d, l, len(xs)) print(test_desc) self.grid = Grid.createLinearGrid(d) self.grid_gen = self.grid.getGenerator() self.grid_gen.regular(l) alpha = DataVector( [self.get_random_alpha() for i in range(self.grid.getSize())]) bb_ = BoundingBox(d) for d_k in range(d): dimbb = BoundingBox1D() dimbb.leftBoundary = bb[d_k][0] dimbb.rightBoundary = bb[d_k][1] bb_.setBoundary(d_k, dimbb) # Calculate the expected value without the bounding box expected_normal = [ self.calc_exp_value_normal(x, d, bb, alpha) for x in xs ] #expected_transposed = [self.calc_exp_value_transposed(x, d, bb, alpha) for x in xs] # Now set the bounding box self.grid.getStorage().setBoundingBox(bb_) dm = DataMatrix(len(xs), d) for k, x in enumerate(xs): dv = DataVector(x) dm.setRow(k, dv) multEval = createOperationMultipleEval(self.grid, dm) actual_normal = DataVector(len(xs)) #actual_transposed = DataVector(len(xs)) multEval.mult(alpha, actual_normal) #multEval.mult(alpha, actual_transposed) actual_normal_list = [] for k in range(len(xs)): actual_normal_list.append(actual_normal.__getitem__(k)) #actual_transposed_list = [] #for k in xrange(len(xs)): # actual_transposed_list.append(actual_transposed.__getitem__(k)) self.assertAlmostEqual(actual_normal_list, expected_normal) #self.assertAlmostEqual(actual_tranposed_list, expected_tranposed) del self.grid
def general_test(self, d, l, bb, xs): test_desc = "dim=%d, level=%d, len(x)=%s" % (d, l, len(xs)) print test_desc self.grid = Grid.createLinearGrid(d) self.grid_gen = self.grid.createGridGenerator() self.grid_gen.regular(l) alpha = DataVector([self.get_random_alpha() for i in xrange(self.grid.getSize())]) bb_ = BoundingBox(d) for d_k in xrange(d): dimbb = DimensionBoundary() dimbb.leftBoundary = bb[d_k][0] dimbb.rightBoundary = bb[d_k][1] bb_.setBoundary(d_k, dimbb) # Calculate the expected value without the bounding box expected_normal = [self.calc_exp_value_normal(x, d, bb, alpha) for x in xs] #expected_transposed = [self.calc_exp_value_transposed(x, d, bb, alpha) for x in xs] # Now set the bounding box self.grid.getStorage().setBoundingBox(bb_) dm = DataMatrix(len(xs), d) for k, x in enumerate(xs): dv = DataVector(x) dm.setRow(k, dv) multEval = createOperationMultipleEval(self.grid, dm) actual_normal = DataVector(len(xs)) #actual_transposed = DataVector(len(xs)) multEval.mult(alpha, actual_normal) #multEval.mult(alpha, actual_transposed) actual_normal_list = [] for k in xrange(len(xs)): actual_normal_list.append(actual_normal.__getitem__(k)) #actual_transposed_list = [] #for k in xrange(len(xs)): # actual_transposed_list.append(actual_transposed.__getitem__(k)) self.assertAlmostEqual(actual_normal_list, expected_normal) #self.assertAlmostEqual(actual_tranposed_list, expected_tranposed) del self.grid
def naive_calc_single(self, index): numData = self.trainData.getNrows() numCoeff = self.grid.getSize() seq = self.grid.getStorage().seq(index) num = 0 denom = 0 tmp = DataVector(numCoeff) self.multEval.multTranspose(self.errors, tmp) num = tmp.__getitem__(seq) num **= 2 alpha = DataVector(numCoeff) alpha.setAll(0.0) alpha.__setitem__(seq, 1.0) col = DataVector(numData) self.multEval.mult(alpha, col) print col col.sqr() denom = col.sum() print num print denom if denom == 0: print "Denominator is zero" value = 0 else: value = num / denom return value
class TestWeightedRefinementOperator(unittest.TestCase): def setUp(self): # # Grid # DIM = 2 LEVEL = 2 self.grid = Grid.createLinearGrid(DIM) self.grid_gen = self.grid.getGenerator() self.grid_gen.regular(LEVEL) # # trainData, classes, errors # xs = [] DELTA = 0.05 DELTA_RECI = int(1 / DELTA) for i in range(DELTA_RECI): for j in range(DELTA_RECI): xs.append([DELTA * i, DELTA * j]) random.seed(1208813) ys = [random.randint(-10, 10) for i in range(DELTA_RECI**2)] # print xs # print ys self.trainData = DataMatrix(xs) self.classes = DataVector(ys) self.alpha = DataVector([3, 6, 7, 9, -1]) self.errors = DataVector(DELTA_RECI**2) coord = DataVector(DIM) opEval = createOperationEval(self.grid) for i in range(self.trainData.getNrows()): self.trainData.getRow(i, coord) self.errors.__setitem__( i, self.classes[i] - opEval.eval(self.alpha, coord)) #print "Errors:" #print self.errors # # Functor # self.functor = WeightedErrorRefinementFunctor(self.alpha, self.grid) self.functor.setTrainDataset(self.trainData) self.functor.setClasses(self.classes) self.functor.setErrors(self.errors) def test_1(self): storage = self.grid.getStorage() coord = DataVector(storage.getDimension()) num_coeff = self.alpha.__len__() values = [ self.functor.__call__(storage, i) for i in range(storage.getSize()) ] expect = [] opEval = createOperationEval(self.grid) for i in range(num_coeff): # print i val = 0 single = DataVector(num_coeff) single.__setitem__(i, self.alpha.__getitem__(i)) for j in range(self.trainData.getNrows()): self.trainData.getRow(j, coord) val += abs( opEval.eval(single, coord) * (self.errors.__getitem__(j)**2)) expect.append(val) # print values # print expect # print [ values[i]/expect[i] for i in xrange(values.__len__())] self.assertEqual(values, expect)
class TestPersistentRefinementOperator(unittest.TestCase): def setUp(self): # # Grid # self.grid = Grid.createLinearGrid(DIM) self.grid_gen = self.grid.createGridGenerator() self.grid_gen.regular(LEVEL) # # trainData, classes, errors # xs = [] DELTA = 0.05 DELTA_RECI = int(1 / DELTA) for i in xrange(DELTA_RECI): for j in xrange(DELTA_RECI): xs.append([DELTA * i, DELTA * j]) random.seed(1208813) ys = [random.randint(-10, 10) for i in xrange(DELTA_RECI**2)] # print xs # print ys self.trainData = DataMatrix(xs) self.classes = DataVector(ys) self.alpha = DataVector([3, 6, 7, 9, -1]) self.errors = DataVector(DELTA_RECI**2) coord = DataVector(DIM) for i in xrange(self.trainData.getNrows()): self.trainData.getRow(i, coord) self.errors.__setitem__( i, self.classes[i] - self.grid.eval(self.alpha, coord)) # # Functor # self.functor = PersistentErrorRefinementFunctor(self.alpha, self.grid) self.functor.setTrainDataset(self.trainData) self.functor.setClasses(self.classes) self.functor.setErrors(self.errors) self.accum = DataVector(self.alpha.__len__()) self.accum.setAll(0.0) def test_1(self): storage = self.grid.getStorage() coord = DataVector(storage.dim()) num_coeff = self.alpha.__len__() # # First part # values = [ self.functor.__call__(storage, i) for i in xrange(storage.size()) ] expect = [] for j in xrange(num_coeff): row = DataVector(DIM) tmp_alpha = DataVector(self.alpha.__len__()) tmp_alpha.setAll(0.0) tmp_alpha.__setitem__(j, 1.0) current = 0 for i in xrange(self.trainData.getNrows()): self.trainData.getRow(i, row) current += (self.errors.__getitem__(i) * self.grid.eval(tmp_alpha, row))**2 self.accum.__setitem__( j, self.accum.__getitem__(j) * (1 - BETA) + BETA * current * abs(self.alpha.__getitem__(j))) expect.append(self.accum.__getitem__(j)) self.assertEqual(values, expect) # # Second part # values = [ self.functor.__call__(storage, i) for i in xrange(storage.size()) ] expect = [] for j in xrange(num_coeff): row = DataVector(DIM) tmp_alpha = DataVector(self.alpha.__len__()) tmp_alpha.setAll(0.0) tmp_alpha.__setitem__(j, 1.0) current = 0 for i in xrange(self.trainData.getNrows()): self.trainData.getRow(i, row) current += (self.errors.__getitem__(i) * self.grid.eval(tmp_alpha, row))**2 self.accum.__setitem__( j, self.accum.__getitem__(j) * (1 - BETA) + BETA * current * abs(self.alpha.__getitem__(j))) expect.append(self.accum.__getitem__(j)) self.assertEqual(values, expect)
class TestWeightedRefinementOperator(unittest.TestCase): def setUp(self): # # Grid # DIM = 2 LEVEL = 2 self.grid = Grid.createLinearGrid(DIM) self.grid_gen = self.grid.createGridGenerator() self.grid_gen.regular(LEVEL) # # trainData, classes, errors # xs = [] DELTA = 0.05 DELTA_RECI = int(1/DELTA) for i in xrange(DELTA_RECI): for j in xrange(DELTA_RECI): xs.append([DELTA*i, DELTA*j]) random.seed(1208813) ys = [ random.randint(-10, 10) for i in xrange(DELTA_RECI**2)] # print xs # print ys self.trainData = DataMatrix(xs) self.classes = DataVector(ys) self.alpha = DataVector([3, 6, 7, 9, -1]) self.errors = DataVector(DELTA_RECI**2) coord = DataVector(DIM) for i in xrange(self.trainData.getNrows()): self.trainData.getRow(i, coord) self.errors.__setitem__ (i, self.classes[i] - self.grid.eval(self.alpha, coord)) #print "Errors:" #print self.errors # # Functor # self.functor = WeightedErrorRefinementFunctor(self.alpha, self.grid) self.functor.setTrainDataset(self.trainData) self.functor.setClasses(self.classes) self.functor.setErrors(self.errors) def test_1(self): storage = self.grid.getStorage() coord = DataVector(storage.dim()) num_coeff = self.alpha.__len__() values = [self.functor.__call__(storage,i) for i in xrange(storage.size())] expect = [] for i in xrange(num_coeff): # print i val = 0 single = DataVector(num_coeff) single.__setitem__(i, self.alpha.__getitem__(i)) for j in xrange(self.trainData.getNrows()): self.trainData.getRow(j, coord) val += abs( self.grid.eval(single, coord) * (self.errors.__getitem__(j)**2) ) expect.append(val) # print values # print expect # print [ values[i]/expect[i] for i in xrange(values.__len__())] self.assertEqual(values, expect)