def test_Add_multiple_output(): from EvoDAG.node import Variable gp, args = create_problem_node(nargs=4, seed=0) gp2, _ = create_problem_node(nargs=4, seed=1) ytr = [gp._ytr, gp._ytr] mask = [gp._mask, gp2._mask] vars = [Variable(k, ytr=ytr, mask=mask) for k in range(len(args))] [x.eval(args) for x in vars] add = Add(range(len(vars)), ytr=ytr, mask=mask) assert add.eval(vars) gp, args = create_problem_node(nargs=4, seed=0) vars = [Variable(k, ytr=gp._ytr, mask=gp._mask) for k in range(len(args))] [x.eval(args) for x in vars] add2 = Add(range(len(vars)), ytr=gp._ytr, mask=gp._mask) assert add2.eval(vars) assert add2.hy.SSE(add.hy[0]) == 0 assert add2.hy_test.SSE(add.hy_test[0]) == 0
def test_Add_multiple_output2(): from EvoDAG.node import Variable gp, args = create_problem_node(nargs=4, seed=0) for i in args: i.hy_test = None gp2, _ = create_problem_node(nargs=4, seed=1) ytr = [gp._ytr, gp._ytr] mask = [gp._mask, gp2._mask] vars = [Variable(k, ytr=ytr, mask=mask) for k in range(len(args))] [x.eval(args) for x in vars] add = Add(range(len(vars)), ytr=ytr, mask=mask) assert add.eval(vars) vars = [Variable(k, ytr=gp._ytr, mask=gp._mask) for k in range(len(args))] [x.eval(args) for x in vars] add2 = Add(range(len(vars)), ytr=gp._ytr, mask=gp._mask) assert add2.eval(vars) assert add2.hy.SSE(add.hy[0]) == 0 assert isinstance(add.weight, list) and len(add.weight) == 2 assert isinstance(add2.weight, np.ndarray)
def test_node_add(): gp, args = create_problem_node() n = Add(list(range(len(args))), ytr=gp._ytr, mask=gp._mask) coef = n.compute_weight([x.hy for x in args]) assert n.eval(args) # a = map(lambda (a, b): a.hy * b, zip(args, coef)) a = [a.hy * b for a, b in zip(args, coef)] r = n.cumsum(a) assert n.hy.SSE(r) == 0 assert n.hy_test.SSE(r) == 0
def test_node_tostore(): gp, args = create_problem_node(nargs=4) Add.nargs = 4 n = Add(list(range(len(args))), ytr=gp._ytr, mask=gp._mask) n.position = 10 assert n.eval(args) n1 = n.tostore() assert n1.nargs == n.nargs assert n1.position == n.position assert np.all(n1.weight == n.weight) assert n1.hy is None
def test_BER(): from EvoDAG.node import Add from EvoDAG import RootGP from EvoDAG.utils import BER gp = RootGP(generations=1, popsize=4, multiple_outputs=True) assert gp._classifier gp.X = X y = cl.copy() gp.nclasses(y) gp.y = y m = np.sign(tonparray(gp._mask_ts)).astype(np.bool) v = gp.random_leaf() v1 = gp.random_leaf() v1 = gp.random_leaf() a = Add([0, 1], ytr=gp._ytr, mask=gp._mask) a.eval([v, v1]) hy = SparseArray.argmax(a.hy) b = BER(y[m], tonparray(hy)[m]) gp._bagging_fitness.fitness(a) print(b, a.fitness * 100) assert_almost_equals(b, -a.fitness * 100)
def test_node_pickle(): import pickle import tempfile gp, args = create_problem_node() n = Add(list(range(len(args))), ytr=gp._ytr, mask=gp._mask) n.position = 10 assert n.eval(args) with tempfile.TemporaryFile('w+b') as io: pickle.dump(n, io) io.seek(0) n1 = pickle.load(io) assert n1._mask.SSE(n._mask) == 0
def test_BER(): from EvoDAG.node import Add from EvoDAG import RootGP from EvoDAG.utils import BER gp = RootGP(generations=1, popsize=4) assert gp._classifier gp.X = X y = cl.copy() mask = y == 0 y[mask] = 1 y[~mask] = -1 gp.y = y m = ~ gp._mask.tonparray().astype(np.bool) v = gp.random_leaf() v1 = gp.random_leaf() v1 = gp.random_leaf() a = Add([0, 1], ytr=gp._ytr, mask=gp._mask) a.eval([v, v1]) hy = a.hy.sign() b = BER(y[m], hy.tonparray()[m]) gp.fitness_vs(a) print(b, a.fitness_vs * 100) assert_almost_equals(b, -a.fitness_vs * 100)
def test_node_add(): gp, args = create_problem_node() n = Add(list(range(len(args))), ytr=gp._ytr, mask=gp._mask) D = np.array([tonparray(i.hy) for i in args]).T coef = n.compute_weight([x.hy for x in args]) assert n.eval(args) # a = map(lambda (a, b): a.hy * b, zip(args, coef)) a = [_a.hy * b for _a, b in zip(args, coef)] r = n.cumsum(a) print((D * coef).sum(axis=1)[:4], "*") print(tonparray(n.hy)[:4]) print(tonparray(r)[:4]) print(tonparray(gp._mask)[:4]) assert n.hy.SSE(r) == 0 assert n.hy_test.SSE(r) == 0