Changeset 11397:e4b810f1f493 in orange


Ignore:
Timestamp:
03/12/13 17:02:59 (13 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added 'multinomial_treatment' parameter to LIBLINEAR derived learners.

Location:
Orange
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • Orange/classification/logreg.py

    r11063 r11397  
    22from Orange.utils import deprecated_keywords, deprecated_members 
    33from Orange.data import preprocess 
     4from Orange.data.continuization import DomainContinuizer 
    45import decimal 
    56import math 
     
    10231024""" 
    10241025 
    1025 from Orange.data import preprocess 
     1026 
    10261027class LibLinearLogRegLearner(Orange.core.LinearLearner): 
    10271028    """A logistic regression learner from `LIBLINEAR`_. 
    1028      
     1029 
    10291030    Supports L2 regularized learning. 
    1030      
     1031 
    10311032    .. _`LIBLINEAR`: http://www.csie.ntu.edu.tw/~cjlin/liblinear/ 
    1032       
     1033 
    10331034    """ 
    10341035 
     
    10401041 
    10411042    def __init__(self, solver_type=L2R_LR, C=1.0, eps=0.01, normalization=True, 
    1042             bias=-1.0, **kwargs): 
     1043            bias=-1.0, multinomial_treatment=DomainContinuizer.NValues, 
     1044            **kwargs): 
    10431045        """ 
    1044         :param solver_type: One of the following class constants:  
     1046        :param solver_type: One of the following class constants: 
    10451047            ``L2_LR``, ``L2_LR_DUAL``, ``L1R_LR``. 
    1046          
    1047         :param C: Regularization parameter (default 1.0). Higher values of C mean  
    1048             less regularization (C is a coefficient for the loss function). 
     1048 
     1049        :param C: Regularization parameter (default 1.0). Higher values of 
     1050            C mean less regularization (C is a coefficient for the loss 
     1051            function). 
    10491052        :type C: float 
    1050          
     1053 
    10511054        :param eps: Stopping criteria (default 0.01) 
    10521055        :type eps: float 
    1053          
     1056 
    10541057        :param normalization: Normalize the input data prior to learning 
    10551058            (default True) 
     
    10581061        :param bias: If positive, use it as a bias (default -1). 
    10591062        :type bias: float 
    1060          
     1063 
     1064        :param multinomial_treatment: Defines how to handle multinomial 
     1065            features for learning. It can be one of the 
     1066            :class:`~.DomainContinuizer` `multinomial_treatment` 
     1067            constants (default: `DomainContinuizer.NValues`). 
     1068 
     1069        :type multinomial_treatment: int 
     1070 
     1071        .. versionadded:: 2.6.1 
     1072            Added `multinomial_treatment` 
     1073 
    10611074        """ 
    10621075        self.solver_type = solver_type 
     
    10651078        self.normalization = normalization 
    10661079        self.bias = bias 
     1080        self.multinomial_treatment = multinomial_treatment 
    10671081 
    10681082        for name, value in kwargs.items(): 
     
    10741088 
    10751089        if data.domain.has_discrete_attributes(False) or self.normalization: 
    1076             dc = Orange.data.continuization.DomainContinuizer() 
    1077             dc.multinomial_treatment = dc.NValues 
     1090            dc = DomainContinuizer() 
     1091            dc.multinomial_treatment = self.multinomial_treatment 
    10781092            dc.class_treatment = dc.Ignore 
    10791093            dc.continuous_treatment = \ 
    10801094                    dc.NormalizeByVariance if self.normalization else dc.Leave 
    1081             c_domain = dc(data)  
     1095            c_domain = dc(data) 
    10821096            data = data.translate(c_domain) 
    10831097        return super(LibLinearLogRegLearner, self).__call__(data, weight_id) 
  • Orange/classification/svm/__init__.py

    r11377 r11397  
    2020 
    2121from Orange.data import preprocess 
     22from Orange.data.preprocess import DomainContinuizer 
    2223 
    2324from Orange import feature as variable 
     
    805806 
    806807    def __init__(self, solver_type=L2R_L2LOSS_DUAL, C=1.0, eps=0.01, 
    807                  bias=1.0, normalization=True, **kwargs): 
     808                 bias=1.0, normalization=True, 
     809                 multinomial_treatment=DomainContinuizer.NValues, **kwargs): 
    808810        """ 
    809811        :param solver_type: One of the following class constants: 
     
    833835        :type normalization: bool 
    834836 
    835         .. note:: If the training data contains discrete features they are 
    836             replaced by indicator columns one for each value of the feature 
    837             regardless of the value of `normalization`. This is different 
    838             then in :class:`SVMLearner` where this is done only if 
     837        :param multinomial_treatment: Defines how to handle multinomial 
     838            features for learning. It can be one of the 
     839            :class:`~.DomainContinuizer` `multinomial_treatment` 
     840            constants (default: `DomainContinuizer.NValues`). 
     841 
     842        :type multinomial_treatment: int 
     843 
     844        .. versionadded:: 2.6.1 
     845            Added `multinomial_treatment` 
     846 
     847        .. note:: By default if the training data contains discrete features 
     848            they are replaced by indicator columns one for each value of the 
     849            feature regardless of the value of `normalization`. This is 
     850            different then in :class:`SVMLearner` where this is done only if 
    839851            `normalization` is ``True``. 
    840852 
     
    852864        self.bias = bias 
    853865        self.normalization = normalization 
     866        self.multinomial_treatment = multinomial_treatment 
    854867 
    855868        for name, val in kwargs.items(): 
    856869            setattr(self, name, val) 
     870 
    857871        if self.solver_type not in [self.L2R_L2LOSS_DUAL, self.L2R_L2LOSS, 
    858872                self.L2R_L1LOSS_DUAL, self.L1R_L2LOSS]: 
    859             warnings.warn("""\ 
    860 Deprecated 'solver_type', use 
    861 'Orange.classification.logreg.LibLinearLogRegLearner' 
    862 to build a logistic regression model using LIBLINEAR. 
    863 """, 
    864                 DeprecationWarning) 
     873            warnings.warn( 
     874                " Deprecated 'solver_type', use " 
     875                "'Orange.classification.logreg.LibLinearLogRegLearner'" 
     876                "to build a logistic regression models using LIBLINEAR.", 
     877                DeprecationWarning 
     878            ) 
    865879 
    866880    def __call__(self, data, weight_id=None): 
     
    869883 
    870884        if data.domain.has_discrete_attributes(False) or self.normalization: 
    871             dc = Orange.data.continuization.DomainContinuizer() 
    872             dc.multinomial_treatment = dc.NValues 
     885            dc = DomainContinuizer() 
     886            dc.multinomial_treatment = self.multinomial_treatment 
    873887            dc.class_treatment = dc.Ignore 
    874888            dc.continuous_treatment = \ 
     
    888902 
    889903    def __init__(self, C=1.0, eps=0.01, bias=1.0, 
    890                  normalization=True, **kwargs): 
     904                 normalization=True, 
     905                 multinomial_treatment=DomainContinuizer.NValues, 
     906                 **kwargs): 
    891907        """\ 
    892908        :param C: Regularization parameter (default 1.0) 
     
    904920            (default True) 
    905921        :type normalization: bool 
     922 
     923        :param multinomial_treatment: Defines how to handle multinomial 
     924            features for learning. It can be one of the 
     925            :class:`~.DomainContinuizer` `multinomial_treatment` 
     926            constants (default: `DomainContinuizer.NValues`). 
     927 
     928        :type multinomial_treatment: int 
     929 
     930        .. versionadded:: 2.6.1 
     931            Added `multinomial_treatment` 
    906932 
    907933        """ 
     
    910936        self.bias = bias 
    911937        self.normalization = normalization 
     938        self.multinomial_treatment = multinomial_treatment 
    912939        for name, val in kwargs.items(): 
    913940            setattr(self, name, val) 
     
    920947 
    921948        if data.domain.has_discrete_attributes(False) or self.normalization: 
    922             dc = Orange.data.continuization.DomainContinuizer() 
    923             dc.multinomial_treatment = dc.NValues 
     949            dc = DomainContinuizer() 
     950            dc.multinomial_treatment = self.multinomial_treatment 
    924951            dc.class_treatment = dc.Ignore 
    925952            dc.continuous_treatment = \ 
  • Orange/testing/unit/tests/test_linear.py

    r11017 r11397  
    55from Orange.testing.testing import datasets_driven 
    66from Orange.classification.svm import LinearSVMLearner 
     7from Orange.data.preprocess import DomainContinuizer 
    78try: 
    89    import unittest2 as unittest 
     
    1112 
    1213import numpy as np 
     14 
     15 
     16def clone(obj): 
     17    return cPickle.loads(cPickle.dumps(obj)) 
    1318 
    1419 
     
    7681def test_learner_with_bias_on(self, dataset): 
    7782    learner = self.learner 
    78     learner_b = cPickle.loads(cPickle.dumps(learner)) 
     83    learner_b = clone(learner) 
    7984    learner_b.bias = 1 
    8085    try: 
     
    116121 
    117122 
     123def multinomial_test(self): 
     124    data = Orange.data.Table("lenses") 
     125    learner = clone(self.learner) 
     126    learner.multinomial_treatment = DomainContinuizer.NValues 
     127    classifier = learner(data) 
     128    self.assertEqual(len(classifier.domain), 7) 
     129 
     130    learner.multinomial_treatment = DomainContinuizer.FrequentIsBase 
     131    classifier = learner(data) 
     132    self.assertEqual(len(classifier.domain), 6) 
     133 
     134    learner.multinomial_treatment = DomainContinuizer.ReportError 
     135    with self.assertRaises(Orange.core.KernelException): 
     136        classifier = learner(data) 
     137 
     138 
    118139@datasets_driven(datasets=testing.CLASSIFICATION_DATASETS) 
    119140class TestLinearSVMLearnerL2R_L2LOSS_DUAL(testing.LearnerTestCase): 
     
    123144    test_learner_with_bias_on = test_learner_with_bias_on 
    124145    test_missing_instances = missing_instances_test 
     146    test_multinomial = multinomial_test 
    125147 
    126148 
     
    132154    test_learner_with_bias_on = test_learner_with_bias_on 
    133155    test_missing_instances = missing_instances_test 
     156    test_multinomial = multinomial_test 
    134157 
    135158 
     
    141164    test_learner_with_bias_on = test_learner_with_bias_on 
    142165    test_missing_instances = missing_instances_test 
     166    test_multinomial = multinomial_test 
    143167 
    144168 
     
    150174    test_learner_with_bias_on = test_learner_with_bias_on 
    151175    test_missing_instances = missing_instances_test 
     176    test_multinomial = multinomial_test 
    152177 
    153178 
     
    159184    test_learner_with_bias_on = test_learner_with_bias_on 
    160185    test_missing_instances = missing_instances_test 
     186    test_multinomial = multinomial_test 
    161187 
    162188 
     
    168194    test_learner_with_bias_on = test_learner_with_bias_on 
    169195    test_missing_instances = missing_instances_test 
     196    test_multinomial = multinomial_test 
    170197 
    171198 
Note: See TracChangeset for help on using the changeset viewer.