Changeset 7211:861da9cc52a4 in orange


Ignore:
Timestamp:
02/02/11 18:01:58 (3 years ago)
Author:
anze <anze.staric@…>
Branch:
default
Convert:
9fd042b66d21ad0aaa5baec23f58d8fa4219eff1
Message:

rename of Bayes learner

Location:
orange
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • orange/Orange/classification/bayes.py

    r7191 r7211  
    1 from orange import BayesClassifier, BayesLearner 
     1"""  
     2   index:: naive bayes 
     3 
     4======================= 
     5Support Vector Machines 
     6======================= 
     7 
     8.. index:: Naive Bayesian Learner 
     9.. autoclass:: Orange.classify.bayes.NaiveBayes 
     10   :members: 
     11    
     12""" 
     13 
     14import Orange 
     15from Orange.core import BayesClassifier as _BayesClassifier 
     16from Orange.core import BayesLearner as _BayesLearner 
     17 
     18class NaiveBayes(Orange.core.Learner): 
     19    """ 
     20    Naive bayes learner 
     21    """ 
     22     
     23    def __new__(cls, examples = None, weightID = 0, **argkw): 
     24        self = Orange.core.Learner.__new__(cls, **argkw) 
     25        if examples: 
     26            self.__init__(**argkw) 
     27            return self.__call__(examples, weightID) 
     28        else: 
     29            return self 
     30         
     31    def __init__(self, m=0, estimatorConstructor=None, 
     32                 conditionalEstimatorConstructor=None, 
     33                 conditionalEstimatorConstructorContinuous=None,**argkw): 
     34        """ 
     35        :param m: m for m-estimate. If set, m-estimation of probabilities 
     36                will be used using :class:`orange.ProbabilityEstimatorConstructor_m` 
     37                This attribute is ignored if you also set estimatorConstructor. 
     38        :type m: integer 
     39        :param estimatorConstructor: Probability estimator constructor for 
     40                prior class probabilities. Defaults to 
     41                :`class:orange.ProbabilityEstimatorConstructor_relative` 
     42                Setting this attribute disables the above described attribute m. 
     43        :type estimatorConstructor: orange.ProbabilityEstimatorConstructor 
     44        :param conditionalEstimatorConstructor: Probability estimator constructor 
     45                for conditional probabilities for discrete features. If omitted, 
     46                the estimator for a priori will be used. 
     47                class probabilities. 
     48        :type conditionalEstimatorConstructor: orange.ConditionalProbabilityEstimatorConstructor 
     49        :param conditionalEstimatorConstructorContinuous: Probability estimator constructor 
     50                for conditional probabilities for continuous features. Defaults to 
     51                :class:`orange.ConditionalProbabilityEstimatorConstructor_loess` 
     52        :type conditionalEstimatorConstructorContinuous: orange.ConditionalProbabilityEstimatorConstructor 
     53        """ 
     54        self.m = m 
     55        self.estimatorConstructor = estimatorConstructor 
     56        self.conditionalEstimatorConstructor = conditionalEstimatorConstructor 
     57        self.conditionalEstimatorConstructorContinuous = conditionalEstimatorConstructorContinuous 
     58        self.__dict__.update(argkw) 
     59 
     60    def __call__(self, examples, weight=0): 
     61        bayes = _BayesLearner() 
     62        if self.estimatorConstructor: 
     63            bayes.estimatorConstructor = self.estimatorConstructor 
     64            if self.m: 
     65                if not hasattr(bayes.estimatorConstructor, "m"): 
     66                    raise AttributeError, "invalid combination of attributes: 'estimatorConstructor' does not expect 'm'" 
     67                else: 
     68                    self.estimatorConstructor.m = self.m 
     69        elif self.m: 
     70            bayes.estimatorConstructor = Orange.core.ProbabilityEstimatorConstructor_m(m = self.m) 
     71        if self.conditionalEstimatorConstructor: 
     72            bayes.conditionalEstimatorConstructor = self.conditionalEstimatorConstructor 
     73        else: 
     74            bayes.conditionalEstimatorConstructor = orange.ConditionalProbabilityEstimatorConstructor_ByRows() 
     75            bayes.conditionalEstimatorConstructor.estimatorConstructor=bayes.estimatorConstructor 
     76             
     77        if self.conditionalEstimatorConstructorContinuous: 
     78            bayes.conditionalEstimatorConstructorContinuous = self.conditionalEstimatorConstructorContinuous 
     79             
     80        return NaiveBayesClassifier(bayes(examples, weight)) 
     81             
     82class NaiveBayesClassifier(Orange.core.Classifier): 
     83    def __init__(self, nbc): 
     84        self.nativeBayesClassifier = nbc 
     85        for k, v in self.nativeBayesClassifier.__dict__.items(): 
     86            self.__dict__[k] = v 
     87   
     88    def __call__(self, *args, **kwdargs): 
     89        self.nativeBayesClassifier(*args, **kwdargs) 
     90 
     91    def __setattr__(self, name, value): 
     92        if name == "nativeBayesClassifier": 
     93            self.__dict__[name] = value 
     94            return 
     95        if name in self.nativeBayesClassifier.__dict__: 
     96            self.nativeBayesClassifier.__dict__[name] = value 
     97        self.__dict__[name] = value 
     98     
     99     
     100    def printModel(self): 
     101        nValues=len(self.classVar.values) 
     102        frmtStr=' %10.3f'*nValues 
     103        classes=" "*20+ ((' %10s'*nValues) % tuple([i[:10] for i in self.classVar.values])) 
     104        print classes 
     105        print "class probabilities "+(frmtStr % tuple(self.distribution)) 
     106        print 
     107     
     108        for i in self.conditionalDistributions: 
     109            print "Attribute", i.variable.name 
     110            print classes 
     111            for v in range(len(i.variable.values)): 
     112                print ("%20s" % i.variable.values[v][:20]) + (frmtStr % tuple(i[v])) 
     113            print 
Note: See TracChangeset for help on using the changeset viewer.