1
1
import numpy as np
2
2
import scipy.sparse as sp
3
3
4
- from sklearn.utils.testing import assert_array_equal, assert_raises_regex
4
+ from re import escape
5
+
6
+ from sklearn.utils.testing import assert_array_equal
5
7
from sklearn.utils.testing import assert_equal
6
8
from sklearn.utils.testing import assert_almost_equal
7
9
from sklearn.utils.testing import assert_true
10
12
from sklearn.utils.testing import assert_warns
11
13
from sklearn.utils.testing import assert_greater
12
14
from sklearn.utils.testing import assert_raise_message
15
+ from sklearn.utils.testing import assert_raises_regexp
13
16
from sklearn.multiclass import OneVsRestClassifier
14
17
from sklearn.multiclass import OneVsOneClassifier
15
18
from sklearn.multiclass import OutputCodeClassifier
@@ -118,9 +121,9 @@ def test_ovr_partial_fit_exceptions():
118
121
# A new class value which was not in the first call of partial_fit
119
122
# It should raise ValueError
120
123
y1 = [5] + y[7:-1]
121
- assert_raises_regex (ValueError, "Mini-batch contains \[.+\] while classes"
122
- " must be subset of \[.+\]",
123
- ovr.partial_fit, X=X[7:], y=y1)
124
+ assert_raises_regexp (ValueError, "Mini-batch contains \[.+\] while classes"
125
+ " must be subset of \[.+\]",
126
+ ovr.partial_fit, X=X[7:], y=y1)
124
127
125
128
126
129
def test_ovr_ovo_regressor():
@@ -493,7 +496,8 @@ def test_ovo_fit_predict():
493
496
494
497
495
498
def test_ovo_partial_fit_predict():
496
- X, y = shuffle(iris.data, iris.target)
499
+ temp = datasets.load_iris()
500
+ X, y = temp.data, temp.target
497
501
ovo1 = OneVsOneClassifier(MultinomialNB())
498
502
ovo1.partial_fit(X[:100], y[:100], np.unique(y))
499
503
ovo1.partial_fit(X[100:], y[100:])
@@ -506,17 +510,36 @@ def test_ovo_partial_fit_predict():
506
510
assert_greater(np.mean(y == pred1), 0.65)
507
511
assert_almost_equal(pred1, pred2)
508
512
509
- # Test when mini-batches don't have all target classes
513
+ # Test when mini-batches have binary target classes
510
514
ovo1 = OneVsOneClassifier(MultinomialNB())
511
- ovo1.partial_fit(iris.data [:60], iris.target [:60], np.unique(iris.target ))
512
- ovo1.partial_fit(iris.data [60:], iris.target [60:])
513
- pred1 = ovo1.predict(iris.data )
515
+
6D47
ovo1.partial_fit(X [:60], y [:60], np.unique(y ))
516
+ ovo1.partial_fit(X [60:], y [60:])
517
+ pred1 = ovo1.predict(X )
514
518
ovo2 = OneVsOneClassifier(MultinomialNB())
515
- pred2 = ovo2.fit(iris.data, iris.target ).predict(iris.data )
519
+ pred2 = ovo2.fit(X, y ).predict(X )
516
520
517
521
assert_almost_equal(pred1, pred2)
518
- assert_equal(len(ovo1.estimators_), len(np.unique(iris.target)))
519
- assert_greater(np.mean(iris.target == pred1), 0.65)
522
+ assert_equal(len(ovo1.estimators_), len(np.unique(y)))
523
+ assert_greater(np.mean(y == pred1), 0.65)
524
+
525
+ ovo = OneVsOneClassifier(MultinomialNB())
526
+ X = np.random.rand(14, 2)
527
+ y = [1, 1, 2, 3, 3, 0, 0, 4, 4, 4, 4, 4, 2, 2]
528
+ ovo.partial_fit(X[:7], y[:7], [0, 1, 2, 3, 4])
529
+ ovo.partial_fit(X[7:], y[7:])
530
+ pred = ovo.predict(X)
531
+ ovo2 = OneVsOneClassifier(MultinomialNB())
532
+ pred2 = ovo2.fit(X, y).predict(X)
533
+ assert_almost_equal(pred, pred2)
534
+
535
+ # raises error when mini-batch does not have classes from all_classes
536
+ ovo = OneVsOneClassifier(MultinomialNB())
537
+ error_y = [0, 1, 2, 3, 4, 5, 2]
538
+ message_re = escape("Mini-batch contains {0} while "
539
+ "it must be subset of {1}".format(np.unique(error_y),
540
+ np.unique(y)))
541
+ assert_raises_regexp(ValueError, message_re, ovo.partial_fit, X[:7],
542
+ error_y, np.unique(y))
520
543
521
544
# test partial_fit only exists if estimator has it:
522
545
ovr = OneVsOneClassifier(SVC())
0 commit comments