示例#1
0
def test_pal_base(make_random_dataset):
    """Testing basic functionality of the PAL base class"""
    palinstance = PALBase(make_random_dataset[0], ["model"], 3)
    assert palinstance.number_discarded_points == 0
    assert palinstance.number_pareto_optimal_points == 0
    assert palinstance.number_unclassified_points == 100
    assert palinstance.number_sampled_points == 0
    assert palinstance.number_design_points == 100
    assert palinstance.should_cross_validate()
    assert len(palinstance.discarded_points) == 0
    assert len(palinstance.pareto_optimal_points) == 0
    assert len(palinstance.unclassified_points) == 100

    with pytest.raises(ValueError):
        palinstance.hyperrectangle_sizes  # pylint:disable=pointless-statement

    assert (str(palinstance) == "pyepal at iteration 1. \
        0 Pareto optimal points, \
        0 discarded points, \
        100 unclassified points.")

    assert palinstance._should_optimize_hyperparameters()
    assert not palinstance._has_train_set

    with pytest.raises(ValueError):
        palinstance.sample()

    assert palinstance.y.shape == (100, 3)
    assert not palinstance.uses_fixed_epsilon

    palinstance = PALBase(make_random_dataset[0], ["model"],
                          3,
                          ranges=[1, 1, 1])
    assert palinstance.uses_fixed_epsilon
示例#2
0
def test_sample(make_random_dataset):
    """Test the sampling"""
    X, _ = make_random_dataset  # pylint:disable=invalid-name
    palinstance = PALBase(X, ["model"], 4)

    lows = np.array([
        [0.0, 0.0, 0.0, 0.0],
        [-1.0, -1.0, -1.0, -1.0],
        [-2.0, -2.0, -2.0, -2.0],
        [2.0, 2.0, 2.0, 2.0],
    ])
    highs = np.array([
        [1.0, 1.0, 1.0, 1.0],
        [1.0, 1.0, 1.0, 1.0],
        [1.0, 1.0, 1.0, 1.0],
        [2.0, 2.0, 2.0, 2.0],
    ])

    means = np.array([[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]])
    palinstance._means = means
    pareto_optimal = np.array([False, False, True, True])
    sampled = np.array([[False] * 4, [False] * 4, [False] * 4, [False] * 4])
    unclassified = np.array([True, True, False, False])

    palinstance.rectangle_lows = lows
    palinstance.rectangle_ups = highs
    palinstance.sampled = sampled
    palinstance.pareto_optimal = pareto_optimal
    palinstance.unclassified = unclassified

    sampled_idx = palinstance.sample()
    assert sampled_idx == 2

    pareto_optimal = np.array([False, False, True, True])
    sampled = np.array([[False] * 4, [False] * 4, [False] * 4, [False] * 4])
    unclassified = np.array([True, True, False, False])

    palinstance.sampled = sampled
    palinstance.pareto_optimal = pareto_optimal
    palinstance.unclassified = unclassified

    sampled_idx = palinstance.sample()
    assert sampled_idx == 2

    pareto_optimal = np.array([False, False, True, True])
    sampled = np.array([[False] * 4, [False] * 4, [True] * 4, [False] * 4])
    unclassified = np.array([True, True, False, False])

    palinstance.sampled = sampled
    palinstance.pareto_optimal = pareto_optimal
    palinstance.unclassified = unclassified

    sampled_idx = palinstance.sample()
    assert sampled_idx == 1

    pareto_optimal = np.array([False, False, False, True])
    sampled = np.array([[False] * 4, [False] * 4, [True] * 4, [False] * 4])
    unclassified = np.array([True, True, False, False])

    palinstance.sampled = sampled
    palinstance.pareto_optimal = pareto_optimal
    palinstance.unclassified = unclassified

    sampled_idx = palinstance.sample()
    assert sampled_idx == 1