コード例 #1
0
ファイル: test_logistic.py プロジェクト: wjurayj/ergo
def test_ppf_cdf_round_trip():
    mixture = LogisticMixture.from_samples(
        np.array([0.5, 0.4, 0.8, 0.8, 0.9, 0.95, 0.15, 0.1]),
        {"num_components": 3})
    x = 0.65
    prob = mixture.cdf(x)
    assert mixture.ppf(prob) == pytest.approx(x, rel=1e-3)
コード例 #2
0
ファイル: test_logistic.py プロジェクト: ghabs/ergo
def test_fit_mixture_small():
    mixture = LogisticMixture.from_samples(np.array([0.1, 0.2, 0.8, 0.9]),
                                           num_components=2)
    for prob in mixture.probs:
        assert prob == pytest.approx(0.5, 0.1)
    locs = sorted([component.loc for component in mixture.components])
    assert locs[0] == pytest.approx(0.15, abs=0.1)
    assert locs[1] == pytest.approx(0.85, abs=0.1)
コード例 #3
0
ファイル: test_logistic.py プロジェクト: wjurayj/ergo
def test_fit_samples(logistic_mixture):
    data = np.array([logistic_mixture.sample() for _ in range(0, 1000)])
    fitted_mixture = LogisticMixture.from_samples(data, {"num_components": 2})
    true_locs = sorted([c.loc for c in logistic_mixture.components])
    true_scales = sorted([c.s for c in logistic_mixture.components])
    fitted_locs = sorted([c.loc for c in fitted_mixture.components])
    fitted_scales = sorted([c.s for c in fitted_mixture.components])
    for (true_loc, fitted_loc) in zip(true_locs, fitted_locs):
        assert fitted_loc == pytest.approx(float(true_loc), rel=0.2)
    for (true_scale, fitted_scale) in zip(true_scales, fitted_scales):
        assert fitted_scale == pytest.approx(float(true_scale), rel=0.2)
コード例 #4
0
ファイル: test_logistic.py プロジェクト: ghabs/ergo
def test_fit_mixture_large():
    data1 = onp.random.logistic(loc=0.7, scale=0.1, size=1000)
    data2 = onp.random.logistic(loc=0.4, scale=0.2, size=1000)
    data = onp.concatenate([data1, data2])
    mixture = LogisticMixture.from_samples(data, num_components=2)
    locs = sorted([component.loc for component in mixture.components])
    scales = sorted([component.scale for component in mixture.components])
    assert locs[0] == pytest.approx(0.4, abs=0.2)
    assert locs[1] == pytest.approx(0.7, abs=0.2)
    assert scales[0] == pytest.approx(0.1, abs=0.2)
    assert scales[1] == pytest.approx(0.2, abs=0.2)
コード例 #5
0
ファイル: test_logistic.py プロジェクト: wjurayj/ergo
def test_fit_mixture_small(fixed_params):
    xscale = Scale(0, 1)
    mixture = LogisticMixture.from_samples(
        data=np.array([0.1, 0.2, 0.8, 0.9]),
        fixed_params=fixed_params,
        scale=xscale,
    )
    for prob in mixture.probs:
        assert prob == pytest.approx(0.5, 0.1)
    locs = sorted(
        [component.base_dist.loc for component in mixture.components])
    assert locs[0] == pytest.approx(0.15, abs=0.1)
    assert locs[1] == pytest.approx(0.85, abs=0.1)
コード例 #6
0
ファイル: test_logistic.py プロジェクト: wjurayj/ergo
def test_fit_mixture_large(fixed_params):
    xscale = Scale(-2, 3)
    data1 = onp.random.logistic(loc=0.7, scale=0.1, size=1000)
    data2 = onp.random.logistic(loc=0.4, scale=0.2, size=1000)
    data = onp.concatenate([data1, data2])
    mixture = LogisticMixture.from_samples(
        data=data,
        fixed_params=fixed_params,
        scale=xscale,
    )
    # FIXME: What's going on below with scales?
    components = sorted([(component.base_dist.loc, component.base_dist.s)
                         for component in mixture.components])
    assert components[0][0] == pytest.approx(xscale.normalize_point(0.4),
                                             abs=0.2)
    assert components[1][0] == pytest.approx(xscale.normalize_point(0.7),
                                             abs=0.2)
    assert components[0][1] == pytest.approx(0.2, abs=0.2)
    assert components[1][1] == pytest.approx(0.1, abs=0.2)