Example #1
0
 def func(crosscat):
     synthesizer = GibbsCrossCat(crosscat, Cd=self.Cd, Ci=self.Ci)
     synthesizer.transition_structure_cpp(N=N,
                                          S=S,
                                          outputs=outputs,
                                          progress=progress)
     return synthesizer.crosscat
 def func_inference(crosscat):
     synthesizer = GibbsCrossCat(crosscat)
     n_step = 1000 if integration else 1
     synthesizer = GibbsCrossCat(crosscat)
     synthesizer.transition_structure_cpp(N=n_step)
     synthesizer.transition_hypers_distributions()
     synthesizer.transition_hypers_row_divide()
     return synthesizer
 def func_inference(crosscat):
     synthesizer = GibbsCrossCat(crosscat)
     n_step = 540 if integration else 1
     for _step in xrange(n_step):
         synthesizer.transition_row_assignments()
         synthesizer.transition_hypers_row_divide()
         synthesizer.transition_hypers_distributions()
         synthesizer.transition_view_assignments()
     return synthesizer
def test_dependencies_no_cpp():
    prng = get_prng(2)
    ensemble = CrossCatEnsemble(outputs=(0, 1),
                                inputs=[],
                                Ci=[(0, 1)],
                                distributions=[('normal', None)] * 2,
                                chains=5,
                                rng=prng)
    ensemble.observe(0, {0: 0, 1: 1})
    synthesizer = GibbsCrossCat(ensemble.cgpms[0], Ci=ensemble.Ci)
    synthesizer.transition_view_assignments()
Example #5
0
 def custom_program(crosscat):
     from cgpm2.transition_crosscat import GibbsCrossCat
     synthesizer = GibbsCrossCat(crosscat)
     synthesizer.transition(N=N,
                            kernels=[
                                'hypers_distributions',
                                'hypers_row_divide',
                                'hypers_column_divide',
                                'row_assignments',
                            ],
                            progress=False)
     return synthesizer.crosscat
def get_crosscat_synthesizer(prng):
    view = FlexibleRowMixture(cgpm_row_divide=CRP([2], [], rng=prng),
                              cgpm_components_base=Product([
                                  Normal([0], [], rng=prng),
                                  Normal([1], [], rng=prng),
                              ],
                                                           rng=prng),
                              rng=prng)
    crosscat = Product(cgpms=[view], rng=prng)
    data = make_bivariate_two_clusters(prng)
    for rowid, row in enumerate(data):
        crosscat.observe(rowid, {0: row[0], 1: row[1]})
    return GibbsCrossCat(crosscat)
def test_crosscat_two_component_nominal__ci_():
    prng = get_prng(10)
    integration = pytest.config.getoption('--integration')
    # Build CGPM with adversarial initialization.
    crosscat = Product([
        FlexibleRowMixture(
            cgpm_row_divide=CRP([-1], [], rng=prng),
            cgpm_components_base=Product([
                Normal([0], [], rng=prng),
            ], rng=prng),
            rng=prng),
        FlexibleRowMixture(
            cgpm_row_divide=CRP([-2], [], rng=prng),
            cgpm_components_base=Product([
                Normal([1], [], rng=prng),
                Categorical([50], [], distargs={'k':4}, rng=prng),
            ], rng=prng),
            rng=prng),
    ], rng=prng,)
    # Fetch data and add a nominal variable.
    data_xy = make_bivariate_two_clusters(prng)
    data_z = np.zeros(len(data_xy))
    data_z[:15] = 0
    data_z[15:30] = 1
    data_z[30:45] = 2
    data_z[45:60] = 3
    data = np.column_stack((data_xy, data_z))
    # Observe.
    for rowid, row in enumerate(data):
        crosscat.observe(rowid, {0: row[0], 1: row[1], 50:row[2]})
    # Run inference.
    synthesizer = GibbsCrossCat(crosscat)
    synthesizer.transition(N=(50 if integration else 1), progress=False)
    synthesizer.transition(N=(100 if integration else 1),
            kernels=['hypers_distributions','hypers_row_divide'],
            progress=False)

    # Assert views are merged into one.
    assert not integration or len(synthesizer.crosscat.cgpms) == 1
    crp_output = synthesizer.crosscat.cgpms[0].cgpm_row_divide.outputs[0]

    # Check joint samples for all nominals.
    samples = synthesizer.crosscat.simulate(None, [crp_output,0,1,50], N=250)
    not integration or check_sampled_data(samples, [0, 7], 3, 110)
    # Check joint samples for nominals [0, 2].
    samples_a = [s for s in samples if s[50] in [0,2]]
    not integration or check_sampled_data(samples_a, [0, 7], 3, 45)
    # Check joint samples for nominals [1, 3].
    samples_b = [s for s in samples if s[50] in [1,3]]
    not integration or check_sampled_data(samples_b, [0, 7], 3, 45)

    # Check conditional samples in correct quadrants.
    means = {0:0, 1:0, 2:7, 3:7}
    for z in [0, 1, 2, 3]:
        samples = synthesizer.crosscat.simulate(None, [0, 1], {50:z}, N=100)
        not integration or check_sampled_data(samples, [means[z]], 3, 90)
 def custom_program(crosscat):
     from cgpm2.transition_crosscat import GibbsCrossCat
     synthesizer = GibbsCrossCat(crosscat)
     synthesizer.transition(N=1, progress=False)
     return synthesizer.crosscat