Changeset 10677:70e2134c6d0b in orange


Ignore:
Timestamp:
03/28/12 15:03:36 (2 years ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added LibLinearLogRegLearner to logreg module.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/classification/logreg.py

    r10580 r10677  
    998998    return prob 
    999999 
    1000     
     1000 
     1001""" 
     1002Logistic regression learner from LIBLINEAR 
     1003""" 
     1004 
     1005from Orange.data import preprocess 
     1006class LibLinearLogRegLearner(Orange.core.LinearLearner): 
     1007    """A logistic regression learner from `LIBLINEAR`_. 
     1008     
     1009    Supports L2 regularized learning. 
     1010     
     1011    .. _`LIBLINEAR`: http://www.csie.ntu.edu.tw/~cjlin/liblinear/ 
     1012      
     1013    """ 
     1014 
     1015    L2R_LR = Orange.core.LinearLearner.L2R_LR 
     1016    L2R_LR_DUAL = Orange.core.LinearLearner.L2R_LR_Dual 
     1017 
     1018    __new__ = Orange.utils._orange__new__(base=Orange.core.LinearLearner) 
     1019 
     1020    def __init__(self, solver_type=L2R_LR, C=1.0, eps=0.01, normalization=True, 
     1021                 **kwargs): 
     1022        """ 
     1023        :param solver_type: One of the following class constants:  
     1024            ``L2_LR`` or``L2_LR_DUAL`` 
     1025         
     1026        :param C: Regularization parameter (default 1.0) 
     1027        :type C: float 
     1028         
     1029        :param eps: Stopping criteria (default 0.01) 
     1030        :type eps: float 
     1031         
     1032        :param normalization: Normalize the input data prior to learning 
     1033            (default True) 
     1034        :type normalization: bool 
     1035         
     1036        """ 
     1037        self.solver_type = solver_type 
     1038        self.C = C 
     1039        self.eps = eps 
     1040        self.normalization = normalization 
     1041 
     1042        for name, valu in kwargs.items(): 
     1043            setattr(self, name, value) 
     1044 
     1045    def __call__(self, data, weight_id=None): 
     1046        if not isinstance(data.domain.class_var, Orange.feature.Discrete): 
     1047            raise TypeError("Can only learn a discrete class.") 
     1048 
     1049        if data.domain.has_discrete_attributes() or self.normalization: 
     1050            dc = Orange.data.continuization.DomainContinuizer() 
     1051            dc.multinomial_treatment = dc.NValues 
     1052            dc.class_treatment = dc.Ignore 
     1053            dc.continuous_treatment = \ 
     1054                    dc.NormalizeByVariance if self.normalization else dc.Leave 
     1055            c_domain = dc(data)  
     1056            data = data.translate(c_domain) 
     1057        return super(LibLinearLogRegLearner, self).__call__(data, weight_id) 
Note: See TracChangeset for help on using the changeset viewer.