Skip to content

Commit 7b3130a

Browse files
logistic regression: fix tests depending on ovr probabilities
1 parent 9b5494e commit 7b3130a

File tree

4 files changed

+61
-55
lines changed

4 files changed

+61
-55
lines changed

Orange/tests/test_evaluation_scoring.py

Lines changed: 36 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -58,16 +58,12 @@ def setUpClass(cls):
5858
def test_precision_iris(self):
5959
learner = LogisticRegressionLearner(preprocessors=[])
6060
res = TestOnTrainingData()(self.iris, [learner])
61-
self.assertAlmostEqual(self.score(res, average='weighted')[0],
62-
0.96189, 5)
63-
self.assertAlmostEqual(self.score(res, target=1)[0], 0.97826, 5)
64-
self.assertAlmostEqual(self.score(res, target=1, average=None)[0],
65-
0.97826, 5)
66-
self.assertAlmostEqual(self.score(res, target=1, average='weighted')[0],
67-
0.97826, 5)
68-
self.assertAlmostEqual(self.score(res, target=0, average=None)[0], 1, 5)
69-
self.assertAlmostEqual(self.score(res, target=2, average=None)[0],
70-
0.90741, 5)
61+
self.assertGreater(self.score(res, average='weighted')[0], 0.95)
62+
self.assertGreater(self.score(res, target=1)[0], 0.95)
63+
self.assertGreater(self.score(res, target=1, average=None)[0], 0.95)
64+
self.assertGreater(self.score(res, target=1, average='weighted')[0], 0.95)
65+
self.assertGreater(self.score(res, target=0, average=None)[0], 0.99)
66+
self.assertGreater(self.score(res, target=2, average=None)[0], 0.94)
7167

7268
def test_precision_multiclass(self):
7369
results = Results(
@@ -117,15 +113,12 @@ def setUpClass(cls):
117113
def test_recall_iris(self):
118114
learner = LogisticRegressionLearner(preprocessors=[])
119115
res = TestOnTrainingData()(self.iris, [learner])
120-
self.assertAlmostEqual(self.score(res, average='weighted')[0], 0.96, 5)
121-
self.assertAlmostEqual(self.score(res, target=1)[0], 0.9, 5)
122-
self.assertAlmostEqual(self.score(res, target=1, average=None)[0],
123-
0.9, 5)
124-
self.assertAlmostEqual(self.score(res, target=1, average='weighted')[0],
125-
0.9, 5)
126-
self.assertAlmostEqual(self.score(res, target=0, average=None)[0], 1, 5)
127-
self.assertAlmostEqual(self.score(res, target=2, average=None)[0],
128-
0.98, 5)
116+
self.assertGreater(self.score(res, average='weighted')[0], 0.96)
117+
self.assertGreater(self.score(res, target=1)[0], 0.9)
118+
self.assertGreater(self.score(res, target=1, average=None)[0], 0.9)
119+
self.assertGreater(self.score(res, target=1, average='weighted')[0], 0.9)
120+
self.assertGreater(self.score(res, target=0, average=None)[0], 0.99)
121+
self.assertGreater(self.score(res, target=2, average=None)[0], 0.97)
129122

130123
def test_recall_multiclass(self):
131124
results = Results(
@@ -175,16 +168,12 @@ def setUpClass(cls):
175168
def test_recall_iris(self):
176169
learner = LogisticRegressionLearner(preprocessors=[])
177170
res = TestOnTrainingData()(self.iris, [learner])
178-
self.assertAlmostEqual(self.score(res, average='weighted')[0],
179-
0.959935, 5)
180-
self.assertAlmostEqual(self.score(res, target=1)[0], 0.9375, 5)
181-
self.assertAlmostEqual(self.score(res, target=1, average=None)[0],
182-
0.9375, 5)
183-
self.assertAlmostEqual(self.score(res, target=1, average='weighted')[0],
184-
0.9375, 5)
185-
self.assertAlmostEqual(self.score(res, target=0, average=None)[0], 1, 5)
186-
self.assertAlmostEqual(self.score(res, target=2, average=None)[0],
187-
0.942307, 5)
171+
self.assertGreater(self.score(res, average='weighted')[0], 0.95)
172+
self.assertGreater(self.score(res, target=1)[0], 0.95)
173+
self.assertGreater(self.score(res, target=1, average=None)[0], 0.95)
174+
self.assertGreater(self.score(res, target=1, average='weighted')[0], 0.95)
175+
self.assertGreater(self.score(res, target=0, average=None)[0], 0.99)
176+
self.assertGreater(self.score(res, target=2, average=None)[0], 0.95)
188177

189178
def test_F1_multiclass(self):
190179
results = Results(
@@ -377,16 +366,24 @@ def setUpClass(cls):
377366
def test_specificity_iris(self):
378367
learner = LogisticRegressionLearner(preprocessors=[])
379368
res = TestOnTrainingData()(self.iris, [learner])
380-
self.assertAlmostEqual(self.score(res, average='weighted')[0],
381-
(1 + 0.99 + 0.95) / 3, 5)
382-
self.assertAlmostEqual(self.score(res, target=1)[0], 99 / (99 + 1), 5)
383-
self.assertAlmostEqual(self.score(res, target=1, average=None)[0],
384-
99 / (99 + 1), 5)
385-
self.assertAlmostEqual(self.score(res, target=1, average='weighted')[0],
386-
99 / (99 + 1), 5)
387-
self.assertAlmostEqual(self.score(res, target=0, average=None)[0], 1, 5)
388-
self.assertAlmostEqual(self.score(res, target=2, average=None)[0],
389-
95 / (95 + 5), 5)
369+
self.assertGreaterEqual(
370+
self.score(res, average='weighted')[0], (1 + 0.99 + 0.95) / 3
371+
)
372+
self.assertGreaterEqual(
373+
self.score(res, target=1)[0], 99 / (99 + 1)
374+
)
375+
self.assertGreaterEqual(
376+
self.score(res, target=1, average=None)[0], 99 / (99 + 1)
377+
)
378+
self.assertGreaterEqual(
379+
self.score(res, target=1, average='weighted')[0], 99 / (99 + 1)
380+
)
381+
self.assertGreaterEqual(
382+
self.score(res, target=0, average=None)[0], 1
383+
)
384+
self.assertGreaterEqual(
385+
self.score(res, target=2, average=None)[0], 95 / (95 + 5)
386+
)
390387

391388
def test_precision_multiclass(self):
392389
results = Results(

Orange/tests/test_logistic_regression.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def test_probability(self):
6666
def test_learner_scorer(self):
6767
learner = LogisticRegressionLearner()
6868
scores = learner.score_data(self.heart_disease)
69-
self.assertEqual('major vessels colored',
69+
self.assertEqual('chest pain',
7070
self.heart_disease.domain.attributes[np.argmax(scores)].name)
7171
self.assertEqual(scores.shape, (1, len(self.heart_disease.domain.attributes)))
7272

@@ -89,13 +89,13 @@ def test_learner_scorer_multiclass(self):
8989
attr = self.zoo.domain.attributes
9090
learner = LogisticRegressionLearner()
9191
scores = learner.score_data(self.zoo)
92-
self.assertEqual('aquatic', attr[np.argmax(scores[0])].name) # amphibian
92+
self.assertEqual('legs', attr[np.argmax(scores[0])].name) # amphibian
9393
self.assertEqual('feathers', attr[np.argmax(scores[1])].name) # bird
9494
self.assertEqual('fins', attr[np.argmax(scores[2])].name) # fish
9595
self.assertEqual('legs', attr[np.argmax(scores[3])].name) # insect
9696
self.assertEqual('backbone', attr[np.argmax(scores[4])].name) # invertebrate
9797
self.assertEqual('milk', attr[np.argmax(scores[5])].name) # mammal
98-
self.assertEqual('hair', attr[np.argmax(scores[6])].name) # reptile
98+
self.assertEqual('aquatic', attr[np.argmax(scores[6])].name) # reptile
9999
self.assertEqual(scores.shape,
100100
(len(self.zoo.domain.class_var.values), len(attr)))
101101

Orange/widgets/evaluate/tests/test_owtestandscore.py

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -381,26 +381,33 @@ def test_scores_log_reg_bad2(self):
381381
table_test = Table.from_list(
382382
self.scores_domain,
383383
list(zip(*(self.scores_table_values + [list("yynn")]))))
384-
self.assertTupleEqual(self._test_scores(
385-
table_train, table_test, LogisticRegressionLearner(),
386-
OWTestAndScore.TestOnTest, None),
387-
(0, 0, 0, 0, 0))
384+
385+
lr = LogisticRegressionLearner()
386+
np.testing.assert_almost_equal(
387+
self._test_scores(
388+
table_train, table_test, lr, OWTestAndScore.TestOnTest, None
389+
),
390+
(0, 0.25, 0.2, 0.1666666, 0.25),
391+
)
388392

389393
def test_scores_log_reg_advanced(self):
390394
table_train = Table.from_list(
391-
self.scores_domain, list(zip(
392-
[1, 1, 1.23, 23.8, 5.], [1., 2., 3., 4., 3.], "yyynn"))
395+
self.scores_domain,
396+
list(zip([1, 1, 1.23, 23.8, 5.], [1., 2., 3., 4., 3.], "yyynn"))
393397
)
394398
table_test = Table.from_list(
395-
self.scores_domain, list(zip(
396-
[1, 1, 1.23, 23.8, 5.], [1., 2., 3., 4., 3.], "yynnn"))
399+
self.scores_domain,
400+
list(zip([1, 1, 1.23, 23.8, 5.], [1., 2., 3., 4., 3.], "yynnn"))
397401
)
398402

403+
lr = LogisticRegressionLearner()
404+
np.testing.assert_
399405
np.testing.assert_almost_equal(
400-
self._test_scores(table_train, table_test,
401-
LogisticRegressionLearner(),
402-
OWTestAndScore.TestOnTest, None),
403-
(2 / 3, 0.8, 0.8, 13 / 15, 0.8))
406+
self._test_scores(
407+
table_train, table_test, lr, OWTestAndScore.TestOnTest, None
408+
),
409+
(1, 0.8, 0.8, 13 / 15, 0.8)
410+
)
404411

405412
def test_scores_cross_validation(self):
406413
"""

Orange/widgets/visualize/tests/test_ownomogram.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,9 @@ def test_nomogram_nb_multiclass(self):
9797
def test_nomogram_lr_multiclass(self):
9898
"""Check probabilities for logistic regression classifier for various
9999
values of classes and radio buttons for multiclass data"""
100-
cls = LogisticRegressionLearner()(self.lenses)
100+
cls = LogisticRegressionLearner(
101+
multi_class="ovr", solver="liblinear"
102+
)(self.lenses)
101103
self._test_helper(cls, [9, 45, 52])
102104

103105
def test_nomogram_with_instance_nb(self):

0 commit comments

Comments
 (0)