Package classifiers :: Module q_classifier_mm
[frames] | no frames]

Source Code for Module classifiers.q_classifier_mm

 1  """Subroutines for q_classifier.py that implement a multi-mu model. 
 2  That is, one where all the classes share a common covariance matrix. 
 3  """ 
 4   
 5  import math 
 6  import multivariance as M 
 7  import q_classifier as QC 
 8  from gmisclib import dictops 
 9   
10  HUGE = 1e30 
11   
12 -def count_the_classes(data):
13 """How many examples of each class do we have?""" 14 counts = {} 15 for datum in data: 16 dictops.add_doc(counts, datum.classid, 1) 17 return counts
18 19 20
21 -def build_classifiers(data, N, modelchoice=M.multi_mu):
22 """Builds a set of quadratic classifiers. 23 Data is a list of datum_tr . 24 It returns a list: [ (evaluation_result, classifier_description), ... ] .""" 25 26 assert modelchoice==M.multi_mu or modelchoice==M.multi_mu_diag 27 28 cprms = M.meanvar(data, N, modelchoice) 29 assert isinstance(cprms[0], M.multi_mu_with_numbers) \ 30 or isinstance(cprms[0], M.multi_mu_diag_with_numbers) 31 32 classlist = cprms[0].desc.int_to_id.values() 33 34 if modelchoice==M.multi_mu_diag: 35 details = M.diag_quadratic(ndim=cprms[0].desc.ndim()) 36 elif modelchoice==M.multi_mu: 37 details = M.quadratic(ndim=cprms[0].desc.ndim()) 38 else: 39 RuntimeError, 'Cannot happen' 40 41 classcounts = count_the_classes(data) 42 # Now, we build a bunch of classifiers 43 classifiers = [] 44 for tmp in cprms: 45 qc = QC.classifier() 46 for c in classlist: 47 # Bias is the Bayesean prior: classes with more training examples 48 # are more likely. 49 bias = math.log(classcounts[c]) 50 if modelchoice==M.multi_mu_diag: 51 q = M.diag_quadratic_with_numbers(tmp.mu[c], tmp.invsigma, \ 52 details, bias) 53 elif modelchoice==M.multi_mu: 54 q = M.quadratic_with_numbers(tmp.mu[c], tmp.invsigma, 55 details, bias) 56 else: 57 RuntimeError, 'Cannot happen' 58 qc.addQuad(c, q) 59 classifiers.append(qc) 60 return classifiers
61