Skip to content

Commit

Permalink
- test whether cloning works, not all work now, WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
niedakh committed May 17, 2016
1 parent 20a398b commit 477efdd
Show file tree
Hide file tree
Showing 9 changed files with 54 additions and 8 deletions.
5 changes: 5 additions & 0 deletions skmultilearn/ensemble/tests/test_fixed.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,10 @@ def test_if_dense_classification_works_on_dense_base_classifier(self):

self.assertClassifierWorksWithSparsity(classifier, 'dense')

def test_if_works_with_cross_validation(self):
classifier = self.get_classifier(self.get_labelpowerset_with_nb())

self.assertClassifierWorksWithCV(classifier)

if __name__ == '__main__':
unittest.main()
5 changes: 5 additions & 0 deletions skmultilearn/ensemble/tests/test_partition.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@ def test_if_dense_classification_works_on_dense_base_classifier(self):
classifier = self.get_classifier(self.get_labelpowerset_with_nb())

self.assertClassifierWorksWithSparsity(classifier, 'dense')

def test_if_works_with_cross_validation(self):
classifier = self.get_classifier(self.get_labelpowerset_with_nb())

self.assertClassifierWorksWithCV(classifier)

if __name__ == '__main__':
unittest.main()
5 changes: 5 additions & 0 deletions skmultilearn/ensemble/tests/test_rakeld.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,11 @@ def test_if_dense_classification_works_on_dense_base_classifier(self):
classifier = RakelD(classifier = self.get_labelpowerset_with_nb(), labelset_size = 3)

self.assertClassifierWorksWithSparsity(classifier, 'dense')

def test_if_works_with_cross_validation(self):
classifier = RakelD(classifier = self.get_labelpowerset_with_nb(), labelset_size = 3)

self.assertClassifierWorksWithCV(classifier)

if __name__ == '__main__':
unittest.main()
5 changes: 5 additions & 0 deletions skmultilearn/ensemble/tests/test_rakelo.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,11 @@ def test_if_dense_classification_works_on_dense_base_classifier(self):
classifier = RakelO(classifier = self.get_labelpowerset_with_nb(), models = 20, labelset_size = 5)

self.assertClassifierWorksWithSparsity(classifier, 'dense')

def test_if_works_with_cross_validation(self):
classifier = RakelO(classifier = self.get_labelpowerset_with_nb(), models = 20, labelset_size = 5)

self.assertClassifierWorksWithCV(classifier)

if __name__ == '__main__':
unittest.main()
2 changes: 2 additions & 0 deletions skmultilearn/ext/tests/test_meka.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ def test_if_meka_classification_works_on_sparse_input(self):
def test_if_meka_classification_works_on_dense_input(self):
self.assertClassifierWorksWithSparsity(self.classifier(), 'dense')

def test_if_works_with_cross_validation(self):
self.assertClassifierWorksWithCV(self.classifier())

if __name__ == '__main__':
unittest.main()
5 changes: 5 additions & 0 deletions skmultilearn/problem_transform/tests/test_br.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,10 @@ def test_if_dense_classification_works_on_dense_base_classifier(self):

self.assertClassifierWorksWithSparsity(classifier, 'dense')

def test_if_works_with_cross_validation(self):
classifier = BinaryRelevance(classifier = GaussianNB(), require_dense = [True, True])

self.assertClassifierWorksWithCV(classifier)

if __name__ == '__main__':
unittest.main()
5 changes: 5 additions & 0 deletions skmultilearn/problem_transform/tests/test_cc.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ def test_if_dense_classification_works_on_dense_base_classifier(self):
classifier = ClassifierChain(classifier = GaussianNB(), require_dense = [True, True])

self.assertClassifierWorksWithSparsity(classifier, 'dense')

def test_if_works_with_cross_validation(self):
classifier = ClassifierChain(classifier = GaussianNB(), require_dense = [True, True])

self.assertClassifierWorksWithCV(classifier)

if __name__ == '__main__':
unittest.main()
17 changes: 11 additions & 6 deletions skmultilearn/problem_transform/tests/test_lp.py
Original file line number Diff line number Diff line change
@@ -1,33 +1,38 @@
import unittest

from skmultilearn.problem_transform.cc import ClassifierChain
from skmultilearn.problem_transform.lp import LabelPowerset
from skmultilearn.tests.classifier_basetest import ClassifierBaseTest
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
from sklearn.datasets import make_multilabel_classification
from sklearn.cross_validation import train_test_split
from sklearn.utils.estimator_checks import check_estimator

class CCTest(ClassifierBaseTest):
class LPTest(ClassifierBaseTest):
def test_if_sparse_classification_works_on_non_dense_base_classifier(self):
classifier = ClassifierChain(classifier = SVC(), require_dense = [False, True])
classifier = LabelPowerset(classifier = SVC(), require_dense = [False, True])

self.assertClassifierWorksWithSparsity(classifier, 'sparse')

def test_if_dense_classification_works_on_non_dense_base_classifier(self):
classifier = ClassifierChain(classifier = SVC(), require_dense = [False, True])
classifier = LabelPowerset(classifier = SVC(), require_dense = [False, True])

self.assertClassifierWorksWithSparsity(classifier, 'dense')

def test_if_sparse_classification_works_on_dense_base_classifier(self):
classifier = ClassifierChain(classifier = GaussianNB(), require_dense = [True, True])
classifier = LabelPowerset(classifier = GaussianNB(), require_dense = [True, True])

self.assertClassifierWorksWithSparsity(classifier, 'sparse')

def test_if_dense_classification_works_on_dense_base_classifier(self):
classifier = ClassifierChain(classifier = GaussianNB(), require_dense = [True, True])
classifier = LabelPowerset(classifier = GaussianNB(), require_dense = [True, True])

self.assertClassifierWorksWithSparsity(classifier, 'dense')

def test_if_works_with_cross_validation(self):
classifier = LabelPowerset(classifier = GaussianNB(), require_dense = [True, True])

self.assertClassifierWorksWithCV(classifier)

if __name__ == '__main__':
unittest.main()
13 changes: 11 additions & 2 deletions skmultilearn/tests/classifier_basetest.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,28 @@
import unittest

from sklearn.datasets import make_multilabel_classification
from sklearn.cross_validation import train_test_split
from sklearn import cross_validation
from sklearn.utils.estimator_checks import check_estimator

class ClassifierBaseTest(unittest.TestCase):
def assertClassifierWorksWithSparsity(self, classifier, sparsity_indicator = 'sparse'):
feed_sparse = sparsity_indicator == 'sparse'
X, y = make_multilabel_classification(sparse = feed_sparse, return_indicator = sparsity_indicator)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.33, random_state=42)
classifier.fit(X_train, y_train)
result = classifier.predict(X_test)

self.assertEqual(result.shape, y_test.shape)

def assertClassifierWorksWithCV(self, classifier):
# all the nice stuff is tested here - whether the classifier is clonable, etc.
X, y = make_multilabel_classification()
n_iterations = 3
cv = cross_validation.ShuffleSplit(X.shape[0], n_iter=n_iterations, test_size=0.3, random_state=0)
scores = cross_validation.cross_val_score(classifier, X, y, cv=cv, scoring='f1_macro')

self.assertEqual(len(scores), n_iterations)



if __name__ == '__main__':
Expand Down

0 comments on commit 477efdd

Please sign in to comment.