Exemple #1
0
def test_categorical_forest_manual_inputs_errors():
    state = State(
        T, cctypes=CCTYPES, distargs=DISTARGS, rng=gu.gen_rng(1))
    state.transition(N=1, progress=False)
    cat_id = CCTYPES.index('categorical')

    # Put 1201 into the first view.
    view_idx = min(state.views)
    state.incorporate_dim(
        T[:,CCTYPES.index('categorical')], outputs=[1201],
        cctype='categorical', distargs=DISTARGS[cat_id], v=view_idx)

    # Updating cctype with completely invalid input should raise.
    with pytest.raises(Exception):
        distargs = DISTARGS[cat_id].copy()
        distargs['inputs'] = [10000]
        state.update_cctype(1201, 'random_forest', distargs=distargs)

    # Updating cctype with input dimensions outside the view should raise.
    cols_in_view = state.views[view_idx].dims.keys()
    cols_out_view = [c for c in state.outputs if c not in cols_in_view]
    assert len(cols_in_view) > 0 and len(cols_out_view) > 0
    with pytest.raises(Exception):
        distargs = DISTARGS[cat_id].copy()
        distargs['inputs'] = cols_out_view
        state.update_cctype(1201, 'random_forest', distargs=distargs)

    # Updating cctype with no input dimensions should raise.
    with pytest.raises(Exception):
        distargs = DISTARGS[cat_id].copy()
        distargs['inputs'] = []
        state.update_cctype(1201, 'random_forest', distargs=distargs)
Exemple #2
0
def test_categorical_forest():
    state = State(
        T, cctypes=CCTYPES, distargs=DISTARGS, rng=gu.gen_rng(1))
    state.transition(N=1, progress=False)
    cat_id = CCTYPES.index('categorical')

    # If cat_id is singleton migrate first.
    if len(state.view_for(cat_id).dims) == 1:
        distargs = DISTARGS[cat_id].copy()
        state.unincorporate_dim(cat_id)
        state.incorporate_dim(
            T[:,cat_id], outputs=[cat_id], cctype='categorical',
            distargs=distargs, v=0)
    state.update_cctype(cat_id, 'random_forest', distargs=distargs)

    bernoulli_id = CCTYPES.index('bernoulli')
    state.incorporate_dim(
        T[:,bernoulli_id], outputs=[191], cctype='bernoulli',
        v=state.Zv(cat_id))
    state.update_cctype(191, 'random_forest', distargs={'k':2})

    # Run valid transitions.
    state.transition(
        N=2, kernels=['rows','column_params','column_hypers'],
        views=[state.Zv(cat_id)], progress=False)

    # Running column transition should raise.
    with pytest.raises(ValueError):
        state.transition(N=1, kernels=['columns'], progress=False)

    # Updating cctype in singleton View should raise.
    distargs = DISTARGS[cat_id].copy()
    state.incorporate_dim(
        T[:,CCTYPES.index('categorical')], outputs=[98],
        cctype='categorical', distargs=distargs, v=max(state.views)+1)
    with pytest.raises(Exception):
        state.update_cctype(98, 'random_forest', distargs=distargs)
Exemple #3
0
def test_incorporate_state():
    state = State(
        T[:,:2], cctypes=CCTYPES[:2], distargs=DISTARGS[:2], rng=gu.gen_rng(0))
    state.transition(N=5)

    target = state.views.keys()[0]

    # Incorporate a new dim into view[0].
    state.incorporate_dim(
        T[:,2], outputs=[2], cctype=CCTYPES[2], distargs=DISTARGS[2], v=target)
    assert state.Zv(2) == target
    state.transition(N=1)

    # Incorporate a new dim into view[0] with a non-contiguous output.
    state.incorporate_dim(
        T[:,2], outputs=[10], cctype=CCTYPES[2], distargs=DISTARGS[2], v=target)
    assert state.Zv(10) == target
    state.transition(N=1)

    # Some crash testing queries.
    state.logpdf(-1, {10:1}, constraints={0:2, 1:1})
    state.simulate(-1, [10], constraints={0:2})

    # Incorporating with a duplicated output should raise.
    with pytest.raises(ValueError):
        state.incorporate_dim(
            T[:,2], outputs=[10], cctype=CCTYPES[2], distargs=DISTARGS[2],
            v=target)

    # Multivariate incorporate should raise.
    with pytest.raises(ValueError):
        state.incorporate_dim(
            T[:,2], outputs=[10, 2], cctype=CCTYPES[2],
            distargs=DISTARGS[2], v=target)

    # Missing output should raise.
    with pytest.raises(ValueError):
        state.incorporate_dim(
            T[:,2], outputs=[], cctype=CCTYPES[2],
            distargs=DISTARGS[2], v=target)

    # Wrong number of rows should raise.
    with pytest.raises(ValueError):
        state.incorporate_dim(
            T[:,2][:-1], outputs=[11], cctype=CCTYPES[2],
            distargs=DISTARGS[2], v=target)

    # Inputs should raise.
    with pytest.raises(ValueError):
        state.incorporate_dim(
            T[:,2], outputs=[11], inputs=[2], cctype=CCTYPES[2],
            distargs=DISTARGS[2], v=target)

    # Incorporate dim into a newly created singleton view.
    target = max(state.views)+1
    state.incorporate_dim(
        T[:,3], outputs=[3], cctype=CCTYPES[3],
        distargs=DISTARGS[3], v=target)
    assert state.Zv(3) == target
    state.transition(N=1)

    # Incorporate dim without specifying a view.
    state.incorporate_dim(T[:,4], outputs=[4],
        cctype=CCTYPES[4], distargs=DISTARGS[4])
    state.transition(N=1)

    # Unincorporate first dim.
    previous = state.n_cols()
    state.unincorporate_dim(0)
    assert state.n_cols() == previous-1
    state.transition(N=1)

    # Reincorporate dim without specifying a view.
    state.incorporate_dim(
        T[:,0], outputs=[0], cctype=CCTYPES[0], distargs=DISTARGS[0])
    state.transition(N=1)

    # Incorporate dim into singleton view, remove it, assert destroyed.
    target = max(state.views)+1
    state.incorporate_dim(
        T[:,5], outputs=[5], cctype=CCTYPES[5], distargs=DISTARGS[5],
        v=target)
    previous = len(state.views)
    state.unincorporate_dim(5)
    assert len(state.views) == previous-1
    state.transition(N=1)

    # Reincorporate dim into a singleton view.
    target = max(state.views)+1
    state.incorporate_dim(T[:,5], outputs=[5], cctype=CCTYPES[5],
        distargs=DISTARGS[5], v=target)
    state.transition(N=1)

    # Incorporate the rest of the dims in the default way.
    for i in xrange(6, len(CCTYPES)):
        state.incorporate_dim(
            T[:,i], outputs=[max(state.outputs)+1],
            cctype=CCTYPES[i], distargs=DISTARGS[i])
    state.transition(N=1)

    # Unincorporating non-existent dim should raise.
    with pytest.raises(ValueError):
        state.unincorporate_dim(9999)

    # Unincorporate all the dims, except the last one.
    for o in state.outputs[:-1]:
        state.unincorporate_dim(o)
    assert state.n_cols() == 1
    state.transition(N=1)

    # Unincorporating last dim should raise.
    with pytest.raises(ValueError):
        state.unincorporate_dim(state.outputs[0])