Exemple #1
0
def test_strict_log_probability(basic_model):
    basic_model.set_priors([Normal(1, 0.5), Exponential(0.5)])
    x = np.array([1.0, 0.5])
    assert basic_model.strict_log_probability(
        ('item 0', 'item 1'), x) == pytest.approx(-0.1413058, 0.001)
    assert basic_model.strict_log_probability(
        ('item 1', 'item 0'), x) == pytest.approx(-2.026650, 0.001)
Exemple #2
0
def test_inference_with_different_priors(basic_model):
    basic_model.set_priors([Normal(1, 1), Exponential(-0.5)])
    assert basic_model.weights is None
    with pytest.warns(UserWarning):
        basic_model.infer_weights()
    assert all(a - b < 1e-4
               for a, b in zip(basic_model.weights.tolist(), [1, 0]))
Exemple #3
0
def test_probability(basic_model):
    basic_model.set_priors([Normal(1, 0.5), Exponential(0.5)])
    x = np.array([1.0, 0.5])
    assert basic_model.probability(x) == np.exp(basic_model.log_probability(x))
Exemple #4
0
def test_indifferent_log_probability(basic_model):
    basic_model.set_priors([Normal(1, 0.5), Exponential(0.5)])
    x = np.array([1.0, 0.5])
    assert basic_model.indifferent_log_probability(
        ('item 0', 'item 1'), x) == pytest.approx(-0.7188213, 0.001)
Exemple #5
0
import pandas as pd

from pypbl.priors import Normal, Exponential
from pypbl.elicitation import BayesPreference

data = pd.read_csv('data/mtcars.csv')
print(data)

# set index of the data frame to be the item names
data.set_index('model', inplace=True)

p = BayesPreference(data=data)
p.set_priors([
    Exponential(1),  # MPG - high miles per gallon is preferred
    Normal(),  # number of cylinders
    Normal(),  # displacement
    Exponential(2),  # horsepower - high horsepower is preferred
    Normal(),  # real axle ratio
    Normal(),  # weight
    Exponential(-3),  # quarter mile time - high acceleration is preferred
    Normal(),  # engine type
    Normal(),  # transmission type
    Normal(),  # number of gears
    Normal()  # number of carburetors
])

# add some preferences and infer the weights for each parameter
p.add_strict_preference('Pontiac Firebird', 'Fiat 128')
p.add_strict_preference('Mazda RX4', 'Mazda RX4 Wag')
p.add_indifferent_preference('Merc 280', 'Merc 280C')
p.infer_weights(method='mean')
Exemple #6
0
def test_exponential_prior_with_negative_weights():
    prior = Exponential(mu=-0.5)
    assert prior.mu == -0.5
    assert prior(-0.5) > prior(-1)
    assert prior(-0.5) > prior(1)
Exemple #7
0
def test_exponential_prior():
    prior = Exponential(mu=0.5)
    assert prior.mu == 0.5
    assert prior(0.5) > prior(-1)
    assert prior(0.5) > prior(1)
Exemple #8
0
def test_default_exponential_prior():
    prior = Exponential()
    assert prior.mu == 1
    assert prior(0) > prior(-1)
    assert prior(0) > prior(1)
    assert prior(np.array([0])) > prior(np.array([-1]))