Skip to content
Snippets Groups Projects
Commit 29cd171a authored by André Anjos's avatar André Anjos :speech_balloon:
Browse files

Merge branch 'fix-floating-point-cmp' into 'master'

Fix precision test to be a bit softer on floating-point comparisons

See merge request !10
parents ef7bb2ed 11dbc99e
No related branches found
No related tags found
1 merge request!10Fix precision test to be a bit softer on floating-point comparisons
Pipeline #35974 passed
...@@ -34,6 +34,10 @@ HEART_DATA = F('heart.svmdata') #13 inputs ...@@ -34,6 +34,10 @@ HEART_DATA = F('heart.svmdata') #13 inputs
HEART_MACHINE = F('heart.svmmodel') #supports probabilities HEART_MACHINE = F('heart.svmmodel') #supports probabilities
HEART_EXPECTED = F('heart.out') #expected probabilities HEART_EXPECTED = F('heart.out') #expected probabilities
def _check_abs_diff(a, b, maxval):
assert numpy.all(abs(a - b) < maxval), "Maximum " \
"difference exceeded limit (%g): %g" % (maxval, abs(a - b).max())
def test_initialization(): def test_initialization():
# tests and examplifies some initialization parameters # tests and examplifies some initialization parameters
...@@ -116,10 +120,10 @@ def test_training(): ...@@ -116,10 +120,10 @@ def test_training():
previous = Machine(TEST_MACHINE_NO_PROBS) previous = Machine(TEST_MACHINE_NO_PROBS)
nose.tools.eq_(machine.machine_type, previous.machine_type) nose.tools.eq_(machine.machine_type, previous.machine_type)
nose.tools.eq_(machine.kernel_type, previous.kernel_type) nose.tools.eq_(machine.kernel_type, previous.kernel_type)
nose.tools.eq_(machine.gamma, previous.gamma) assert numpy.isclose(machine.gamma, previous.gamma)
nose.tools.eq_(machine.shape, previous.shape) nose.tools.eq_(machine.shape, previous.shape)
assert numpy.all(abs(machine.input_subtract - previous.input_subtract) < 1e-8) _check_abs_diff(machine.input_subtract, previous.input_subtract, 1e-8)
assert numpy.all(abs(machine.input_divide - previous.input_divide) < 1e-8) _check_abs_diff(machine.input_divide, previous.input_divide, 1e-8)
curr_label = machine.predict_class(data) curr_label = machine.predict_class(data)
prev_label = previous.predict_class(data) prev_label = previous.predict_class(data)
...@@ -131,7 +135,7 @@ def test_training(): ...@@ -131,7 +135,7 @@ def test_training():
curr_scores = numpy.array(curr_scores) curr_scores = numpy.array(curr_scores)
prev_scores = numpy.array(prev_scores) prev_scores = numpy.array(prev_scores)
assert numpy.all(abs(curr_scores - prev_scores) < 1e-8) _check_abs_diff(curr_scores, prev_scores, 5e-7)
def test_training_with_probability(): def test_training_with_probability():
...@@ -150,10 +154,10 @@ def test_training_with_probability(): ...@@ -150,10 +154,10 @@ def test_training_with_probability():
previous = Machine(HEART_MACHINE) previous = Machine(HEART_MACHINE)
nose.tools.eq_(machine.machine_type, previous.machine_type) nose.tools.eq_(machine.machine_type, previous.machine_type)
nose.tools.eq_(machine.kernel_type, previous.kernel_type) nose.tools.eq_(machine.kernel_type, previous.kernel_type)
nose.tools.eq_(machine.gamma, previous.gamma) assert numpy.isclose(machine.gamma, previous.gamma)
nose.tools.eq_(machine.shape, previous.shape) nose.tools.eq_(machine.shape, previous.shape)
assert numpy.all(abs(machine.input_subtract - previous.input_subtract) < 1e-8) _check_abs_diff(machine.input_subtract, previous.input_subtract, 1e-8)
assert numpy.all(abs(machine.input_divide - previous.input_divide) < 1e-8) _check_abs_diff(machine.input_divide, previous.input_divide, 1e-8)
# check labels # check labels
curr_label = machine.predict_class(data) curr_label = machine.predict_class(data)
...@@ -167,7 +171,7 @@ def test_training_with_probability(): ...@@ -167,7 +171,7 @@ def test_training_with_probability():
curr_scores = numpy.array(curr_scores) curr_scores = numpy.array(curr_scores)
prev_scores = numpy.array(prev_scores) prev_scores = numpy.array(prev_scores)
assert numpy.all(abs(curr_scores - prev_scores) < 1e-8) _check_abs_diff(curr_scores, prev_scores, 5e-7)
# check probabilities -- probA and probB do not get the exact same values # check probabilities -- probA and probB do not get the exact same values
# as when using libsvm's svm-train.c. The reason may lie in the order in # as when using libsvm's svm-train.c. The reason may lie in the order in
...@@ -176,7 +180,7 @@ def test_training_with_probability(): ...@@ -176,7 +180,7 @@ def test_training_with_probability():
prev_labels, prev_scores = previous.predict_class_and_probabilities(data) prev_labels, prev_scores = previous.predict_class_and_probabilities(data)
curr_scores = numpy.array(curr_scores) curr_scores = numpy.array(curr_scores)
prev_scores = numpy.array(prev_scores) prev_scores = numpy.array(prev_scores)
#assert numpy.all(abs(curr_scores-prev_scores) < 1e-8) #_check_abs_diff(curr_scores, prev_scores, 1e-8)
def test_training_one_class(): def test_training_one_class():
...@@ -198,10 +202,10 @@ def test_training_one_class(): ...@@ -198,10 +202,10 @@ def test_training_one_class():
previous = Machine(TEST_MACHINE_ONE_CLASS) previous = Machine(TEST_MACHINE_ONE_CLASS)
nose.tools.eq_(machine.machine_type, previous.machine_type) nose.tools.eq_(machine.machine_type, previous.machine_type)
nose.tools.eq_(machine.kernel_type, previous.kernel_type) nose.tools.eq_(machine.kernel_type, previous.kernel_type)
nose.tools.eq_(machine.gamma, previous.gamma) assert numpy.isclose(machine.gamma, previous.gamma)
nose.tools.eq_(machine.shape, previous.shape) nose.tools.eq_(machine.shape, previous.shape)
assert numpy.all(abs(machine.input_subtract - previous.input_subtract) < 1e-8) _check_abs_diff(machine.input_subtract, previous.input_subtract, 1e-8)
assert numpy.all(abs(machine.input_divide - previous.input_divide) < 1e-8) _check_abs_diff(machine.input_divide, previous.input_divide, 1e-8)
curr_label = machine.predict_class(data) curr_label = machine.predict_class(data)
prev_label = previous.predict_class(data) prev_label = previous.predict_class(data)
...@@ -213,8 +217,7 @@ def test_training_one_class(): ...@@ -213,8 +217,7 @@ def test_training_one_class():
curr_scores = numpy.array(curr_scores) curr_scores = numpy.array(curr_scores)
prev_scores = numpy.array(prev_scores) prev_scores = numpy.array(prev_scores)
assert numpy.all(abs(curr_scores - prev_scores) < 1e-8) _check_abs_diff(curr_scores, prev_scores, 5e-5)
def test_successive_training(): def test_successive_training():
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment