M1 MABS BBS Data Mining Naive Bayes
From silico.biotoul.fr
(Difference between revisions)
m |
m |
||
(5 intermediate revisions not shown) | |||
Line 1: | Line 1: | ||
+ | [[Image:NaiveBayes.png|400px|thumb|right|Jeu d'apprentissage, table de probabilité et classification d'un objet selon un classificateur bayésien naïf.]] | ||
+ | |||
Etapes pour la construction et l'utilisation d'un classificateur bayésien naïf : | Etapes pour la construction et l'utilisation d'un classificateur bayésien naïf : | ||
* Lecture du jeu d'apprentissage pour construire la table de probabilité. Utilisation | * Lecture du jeu d'apprentissage pour construire la table de probabilité. Utilisation | ||
Line 18: | Line 20: | ||
* ... | * ... | ||
- | Utilisation d'une librairie pour récupérer les paramètres de la ligne de commande : | + | Rappel: [http://orange.biolab.si/docs/latest/tutorial/rst/data/#data-input Orange file format] |
+ | |||
+ | Utilisation d'une [http://docs.python.org/dev/library/argparse.html librairie] pour récupérer les paramètres de la ligne de commande : | ||
<source lang='python'> | <source lang='python'> | ||
#!/usr/bin/python | #!/usr/bin/python | ||
Line 26: | Line 30: | ||
# SCRIPT PARAMETERS | # SCRIPT PARAMETERS | ||
parser = argparse.ArgumentParser(description='Naive Bayesian learner and classifier.') | parser = argparse.ArgumentParser(description='Naive Bayesian learner and classifier.') | ||
- | parser.add_argument('--training', required=True, help='File in | + | parser.add_argument('--training', required=True, help='File in Orange tab format containing training examples.') |
parser.add_argument('--sample', required=True, help='File containing new objects to be classified.') | parser.add_argument('--sample', required=True, help='File containing new objects to be classified.') | ||
opt = vars(parser.parse_args()) | opt = vars(parser.parse_args()) | ||
</source> | </source> | ||
- | Utilisation d'une librairie pour lire les fichiers au format CSV : | + | Utilisation d'une [http://docs.python.org/2/library/csv.html librairie] pour lire les fichiers au format CSV : |
<source lang='python'> | <source lang='python'> | ||
#!/usr/bin/python | #!/usr/bin/python | ||
Line 61: | Line 65: | ||
</source> | </source> | ||
- | Librairie pour estimer la probabilité d'une valeur par une gaussienne : | + | Librairie pour estimer la probabilité d'une valeur par une gaussienne ([http://docs.scipy.org/doc/numpy/reference/routines.statistics.html#averages-and-variances numpy] et [http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.norm.html scipy]): |
<source lang='python'> | <source lang='python'> | ||
#!/usr/bin/python | #!/usr/bin/python | ||
Line 75: | Line 79: | ||
</source> | </source> | ||
- | Librairie pour travailler avec des fichiers temporaires : | + | [http://docs.python.org/2/library/tempfile.html Librairie] pour travailler avec des fichiers temporaires : |
<source lang='python'> | <source lang='python'> | ||
#!/usr/bin/python | #!/usr/bin/python | ||
Line 100: | Line 104: | ||
os.system(cmd) | os.system(cmd) | ||
</source> | </source> | ||
+ | |||
+ | = Leave-one-out cross validation = | ||
+ | [[Media:LOOCV-draft.py]] |
Current revision as of 10:55, 4 December 2013
Etapes pour la construction et l'utilisation d'un classificateur bayésien naïf :
- Lecture du jeu d'apprentissage pour construire la table de probabilité. Utilisation
- des fréquences pour la variables discrètes
- d'une gaussienne pour les variables continues
- Lecture des échantillons à classer
- calcul de la vraisemblance de chaque classe
- attribution de la classe la plus vraissemblable
La table de probabilité devrait contenir :
- classe TRUE, effectif: XX
- classe FALSE, effectif: YY
- classe TRUE, attribut age, moyenne: XX, écart-type: XX
- classe FASLE, attribut age, moyenne: YY, écart-type: YY
- classe TRUE, attribut sex, valeur M, effectif: XX
- classe TRUE, attribut sex, valeur F, effectif: XX
- classe FALSE, attribut sex, valeur M, effectif: XX
- classe FALSE, attribut sex, valeur F, effectif: XX
- ...
Rappel: Orange file format
Utilisation d'une librairie pour récupérer les paramètres de la ligne de commande :
#!/usr/bin/python import argparse # SCRIPT PARAMETERS parser = argparse.ArgumentParser(description='Naive Bayesian learner and classifier.') parser.add_argument('--training', required=True, help='File in Orange tab format containing training examples.') parser.add_argument('--sample', required=True, help='File containing new objects to be classified.') opt = vars(parser.parse_args())
Utilisation d'une librairie pour lire les fichiers au format CSV :
#!/usr/bin/python import csv # GLOBAL VARIABLES targetClass = '' attributeClass = {} model = {} N = 0 # N: size of training set # LOAD TRAINING SET AND BUILD MODEL (START TO BUILD PROBABILITY TABLE) # training[class][attribute_name][attribute_value] = occurrences # e.g. training[G1][population][Uppsala] = 22 with open(opt['training']) as f: reader = csv.DictReader(f, delimiter='\t') # LOAD ATTRIBUTE TYPES (continuous, discrete, ignore) attributeClass = reader.next() # DETERMINE TARGET CLASS classLine = reader.next() for i in attributeClass: if classLine[i]=='class': targetClass = i # START BUILDING model for row in reader: N += 1 ...
Librairie pour estimer la probabilité d'une valeur par une gaussienne (numpy et scipy):
#!/usr/bin/python import numpy import scipy.stats import os mean = numpy.mean(aList) sd = numpy.std(aList) pf = scipy.stats.norm.pdf( value, loc=mean, scale=sd)
Librairie pour travailler avec des fichiers temporaires :
#!/usr/bin/python import tempfile # obtain unique file name outputFileName = tempfile.mktemp() # create file outputFile=open(outputFileName, 'w') outputFile.write(header) ... # remove file os.remove(outputFileName)
Pour exécuter des commandes :
# RUN CLASSIFIER cmd=opt['script']+' --training '+trainingFileName+' --sample '+testFileName+' > '+outputFileName os.system(cmd)