def check_ss(a, b): check_cm(a) check_cm(b) a = ComponentModel(a) a.realize_hp() b = ComponentModel(b, hp=a.dump_hp()) dps = [a.sample_data() for _ in range(DPS)] assert_equal(a.dump_ss(), b.dump_ss()) for y in dps: a.add_data(y) b.add_data(y) assert_close(a.dump_ss(), b.dump_ss()) for y in dps: a.remove_data(y) b.remove_data(y) assert_close(a.dump_ss(), b.dump_ss())
def check_exchangeable(name): check_cm(name) cm = ComponentModel(name) cm.realize_hp() values = [cm.sample_data() for _ in range(COUNT)] p1 = permutation(COUNT) p2 = permutation(COUNT) for i in range(COUNT): cm.add_data(values[p1[i]]) prob1 = cm.data_prob() for i in range(COUNT): cm.remove_data(values[p1[i]]) assert_almost_equal(cm.data_prob(), 0.) for i in range(COUNT): cm.add_data(values[p2[i]]) prob2 = cm.data_prob() assert_almost_equal(prob1, prob2)
def check_exchangeable(name): check_cm(name) cm = ComponentModel(name) cm.realize_hp() values = [cm.sample_data() for _ in range(COUNT)] p1 = permutation(COUNT) p2 = permutation(COUNT) for i in range(COUNT): cm.add_data(values[p1[i]]) prob1 = cm.data_prob() for i in range(COUNT): cm.remove_data(values[p1[i]]) assert_almost_equal(cm.data_prob(), 0.) for i in range(COUNT): cm.add_data(values[p2[i]]) prob2 = cm.data_prob() assert_almost_equal(prob1, prob2)
def add_remove_add(name, raw_hps, raw_ss0=None): ''' This tests add_data, remove_data, pred_prob, data_prob ''' DATA_COUNT = 20 for raw_hp in raw_hps: cm = ComponentModel(name, hp=raw_hp, ss=raw_ss0) cm.realize_hp() data = [] score = 0 for _ in range(DATA_COUNT): dp = cm.sample_data() data.append(dp) score += cm.pred_prob(dp) cm.add_data(dp) cm_all = ComponentModel(name, ss=cm.dump_ss()) assert_close( score, cm.data_prob(), err_msg='p(x1,...,xn) != p(x1) p(x2|x1) p(xn|...)') random.shuffle(data) for dp in data: cm.remove_data(dp) cm0 = ComponentModel(name, ss=raw_ss0) assert_close(cm.ss, cm0.ss, err_msg='ss + data - data != ss') random.shuffle(data) for dp in data: cm.add_data(dp) assert_close(cm.ss, cm_all.ss, err_msg='ss - data + data != ss')
def add_remove_add(name, raw_hps, raw_ss0=None): ''' This tests add_data, remove_data, pred_prob, data_prob ''' DATA_COUNT = 20 for raw_hp in raw_hps: cm = ComponentModel(name, hp=raw_hp, ss=raw_ss0) cm.realize_hp() data = [] score = 0 for _ in range(DATA_COUNT): dp = cm.sample_data() data.append(dp) score += cm.pred_prob(dp) cm.add_data(dp) cm_all = ComponentModel(name, ss=cm.dump_ss()) assert_close(score, cm.data_prob(), err_msg='p(x1,...,xn) != p(x1) p(x2|x1) p(xn|...)') random.shuffle(data) for dp in data: cm.remove_data(dp) cm0 = ComponentModel(name, ss=raw_ss0) assert_close(cm.ss, cm0.ss, err_msg='ss + data - data != ss') random.shuffle(data) for dp in data: cm.add_data(dp) assert_close(cm.ss, cm_all.ss, err_msg='ss - data + data != ss')