silico.biotoul.fr
 

M1 MABS BBS Data Mining Naive Bayes

From silico.biotoul.fr

Jump to: navigation, search
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 :

  • 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)

Leave-one-out cross validation

Media:LOOCV-draft.py