Ignore:
Timestamp:
08/08/13 17:21:47 (9 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added a test for SVMLearner and SVMLearnerSparse equivalence.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/testing/unit/tests/test_svm.py

    r11612 r11651  
    152152def to_sparse(data): 
    153153    domain = Orange.data.Domain([], data.domain.class_var) 
    154     domain.add_metas(dict([(Orange.core.newmetaid(), v) for v in data.domain.attributes])) 
     154    domain.add_metas(dict([(Orange.core.newmetaid(), v) 
     155                           for v in data.domain.attributes])) 
    155156    return Orange.data.Table(domain, data) 
     157 
    156158 
    157159def sparse_data_iter(): 
     
    159161        yield name, (to_sparse(data), ) 
    160162 
     163 
    161164@testing.data_driven(data_iter=sparse_data_iter()) 
    162165class SparseSVMTestCase(testing.LearnerTestCase): 
    163166    LEARNER = SVMLearnerSparse(name="svm-sparse") 
    164      
    165     @test_on_data 
    166     def test_learner_on(self, dataset): 
    167         testing.LearnerTestCase.test_learner_on(self, dataset) 
    168         svm_test_binary_classifier(self, dataset) 
     167 
     168    @test_on_data 
     169    def test_learner_on(self, dataset): 
     170        testing.LearnerTestCase.test_learner_on(self, dataset) 
     171        svm_test_binary_classifier(self, dataset) 
     172 
     173 
     174@datasets_driven(datasets=testing.CLASSIFICATION_DATASETS + 
     175                 testing.REGRESSION_DATASETS) 
     176class SparseLearnerEquivalence(unittest.TestCase): 
     177    @test_on_data 
     178    def test_sparse_learner_equivalence(self, dataset): 
     179        sparse_dataset = to_sparse(dataset) 
     180        if isinstance(dataset.domain.class_var, Orange.feature.Discrete): 
     181            svm_type = SVMLearner.C_SVC 
     182        else: 
     183            svm_type = SVMLearner.Epsilon_SVR 
     184 
     185        sparse_learner = Orange.core.SVMLearnerSparse( 
     186            probability=False, 
     187            svm_type=svm_type, 
     188            shrinking=False, 
     189            eps=1e-10 
     190        ) 
     191        dense_learner = Orange.core.SVMLearner( 
     192            probability=False, 
     193            svm_type=svm_type, 
     194            shrinking=False, 
     195            eps=1e-10 
     196        ) 
     197        sparse_cls = sparse_learner(sparse_dataset) 
     198        dense_cls = dense_learner(dataset) 
     199 
     200        for sparse, dense in zip(sparse_dataset, dataset): 
     201            val1, dist1 = sparse_cls(sparse, Orange.core.GetBoth) 
     202            val2, dist2 = dense_cls(dense, Orange.core.GetBoth) 
     203 
     204            if isinstance(dataset.domain.class_var, Orange.feature.Discrete): 
     205                for p1, p2 in zip(dist1, dist2): 
     206                    self.assertAlmostEqual(float(p1), float(p2), places=3) 
     207            else: 
     208                self.assertAlmostEqual(float(val1), float(val2), places=3) 
    169209 
    170210 
Note: See TracChangeset for help on using the changeset viewer.