debut bayes naif
This commit is contained in:
parent
d9fa94a2d6
commit
0e218e5518
2 changed files with 119 additions and 71 deletions
|
@ -3,90 +3,134 @@
|
|||
"""
|
||||
Vous allez definir une classe pour chaque algorithme que vous allez développer,
|
||||
votre classe doit contenit au moins les 3 methodes definies ici bas,
|
||||
* train : pour entrainer le modèle sur l'ensemble d'entrainement
|
||||
* predict : pour prédire la classe d'un exemple donné
|
||||
* test : pour tester sur l'ensemble de test
|
||||
* train : pour entrainer le modèle sur l'ensemble d'entrainement
|
||||
* predict : pour prédire la classe d'un exemple donné
|
||||
* test : pour tester sur l'ensemble de test
|
||||
vous pouvez rajouter d'autres méthodes qui peuvent vous etre utiles, mais moi
|
||||
je vais avoir besoin de tester les méthodes test, predict et test de votre code.
|
||||
"""
|
||||
|
||||
import numpy as np
|
||||
import math
|
||||
|
||||
|
||||
# le nom de votre classe
|
||||
# BayesNaif pour le modèle bayesien naif
|
||||
# Knn pour le modèle des k plus proches voisins
|
||||
|
||||
def gaussian_pdf(x, mu, sigma):
|
||||
"""
|
||||
Fonction de densité de probabilité de la distribution gaussienne
|
||||
"""
|
||||
return math.exp(-(float(x)-float(mu))**2/(2*float(sigma)**2)) / (float(sigma)*math.sqrt(2*math.pi))
|
||||
|
||||
class BayesNaif: #nom de la class à changer
|
||||
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
"""
|
||||
c'est un Initializer.
|
||||
Vous pouvez passer d'autre paramètres au besoin,
|
||||
c'est à vous d'utiliser vos propres notations
|
||||
"""
|
||||
|
||||
|
||||
def train(self, train, train_labels): #vous pouvez rajouter d'autres attribus au besoin
|
||||
"""
|
||||
c'est la méthode qui va entrainer votre modèle,
|
||||
train est une matrice de type Numpy et de taille nxm, avec
|
||||
n : le nombre d'exemple d'entrainement dans le dataset
|
||||
m : le mobre d'attribus (le nombre de caractéristiques)
|
||||
|
||||
train_labels : est une matrice numpy de taille nx1
|
||||
|
||||
vous pouvez rajouter d'autres arguments, il suffit juste de
|
||||
les expliquer en commentaire
|
||||
|
||||
|
||||
|
||||
------------
|
||||
Après avoir fait l'entrainement, faites maintenant le test sur
|
||||
les données d'entrainement
|
||||
IMPORTANT :
|
||||
Vous devez afficher ici avec la commande print() de python,
|
||||
- la matrice de confision (confusion matrix)
|
||||
- l'accuracy
|
||||
- la précision (precision)
|
||||
- le rappel (recall)
|
||||
|
||||
Bien entendu ces tests doivent etre faits sur les données d'entrainement
|
||||
nous allons faire d'autres tests sur les données de test dans la méthode test()
|
||||
"""
|
||||
|
||||
|
||||
def predict(self, exemple, label):
|
||||
"""
|
||||
Prédire la classe d'un exemple donné en entrée
|
||||
exemple est de taille 1xm
|
||||
|
||||
si la valeur retournée est la meme que la veleur dans label
|
||||
alors l'exemple est bien classifié, si non c'est une missclassification
|
||||
def __init__(self, **kwargs):
|
||||
"""
|
||||
c'est un Initializer.
|
||||
Vous pouvez passer d'autre paramètres au besoin,
|
||||
c'est à vous d'utiliser vos propres notations
|
||||
"""
|
||||
|
||||
|
||||
def train(self, train, train_labels, gaussian=False): #vous pouvez rajouter d'autres attribus au besoin
|
||||
"""
|
||||
c'est la méthode qui va entrainer votre modèle,
|
||||
train est une matrice de type Numpy et de taille nxm, avec
|
||||
n : le nombre d'exemple d'entrainement dans le dataset
|
||||
m : le mobre d'attribus (le nombre de caractéristiques)
|
||||
|
||||
train_labels : est une matrice numpy de taille nx1
|
||||
|
||||
vous pouvez rajouter d'autres arguments, il suffit juste de
|
||||
les expliquer en commentaire
|
||||
|
||||
|
||||
|
||||
------------
|
||||
Après avoir fait l'entrainement, faites maintenant le test sur
|
||||
les données d'entrainement
|
||||
IMPORTANT :
|
||||
Vous devez afficher ici avec la commande print() de python,
|
||||
- la matrice de confision (confusion matrix)
|
||||
- l'accuracy
|
||||
- la précision (precision)
|
||||
- le rappel (recall)
|
||||
|
||||
Bien entendu ces tests doivent etre faits sur les données d'entrainement
|
||||
nous allons faire d'autres tests sur les données de test dans la méthode test()
|
||||
"""
|
||||
|
||||
# Distribution a priori des étiquettes P(C)
|
||||
|
||||
n,m = train.shape
|
||||
|
||||
unique_labels = np.unique(train_labels)
|
||||
|
||||
prob_labels = []
|
||||
for i in unique_labels:
|
||||
prob_labels.append(sum(train_labels == i) / n)
|
||||
|
||||
# Distribution des vraisemblances P(F1,F2,...|C)
|
||||
|
||||
features_likelihood = []
|
||||
|
||||
# on itère sur les labels, les colonnes et les valeurs uniques des colonnes (si discret)
|
||||
|
||||
for l in unique_labels:
|
||||
subset = train[np.where(train_labels==unique_labels[l])[0]]
|
||||
n_subset, m_subset = subset.shape
|
||||
for c in range(m_subset):
|
||||
if (gaussian):
|
||||
features_likelihood.append((l,c,np.mean(subset[:,c]),np.std(subset[:,c])))
|
||||
else:
|
||||
unique_values = np.unique(train[:,c])
|
||||
for v in unique_values:
|
||||
features_likelihood.append((l,c,v,sum(subset[:,c]==v)/n_subset))
|
||||
|
||||
# Distribution des probabilités P(F1,F2,...)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
"""
|
||||
def predict(self, exemple, label):
|
||||
"""
|
||||
Prédire la classe d'un exemple donné en entrée
|
||||
exemple est de taille 1xm
|
||||
|
||||
si la valeur retournée est la meme que la veleur dans label
|
||||
alors l'exemple est bien classifié, si non c'est une missclassification
|
||||
|
||||
def test(self, test, test_labels):
|
||||
"""
|
||||
c'est la méthode qui va tester votre modèle sur les données de test
|
||||
l'argument test est une matrice de type Numpy et de taille nxm, avec
|
||||
n : le nombre d'exemple de test dans le dataset
|
||||
m : le mobre d'attribus (le nombre de caractéristiques)
|
||||
|
||||
test_labels : est une matrice numpy de taille nx1
|
||||
|
||||
vous pouvez rajouter d'autres arguments, il suffit juste de
|
||||
les expliquer en commentaire
|
||||
|
||||
Faites le test sur les données de test, et afficher :
|
||||
- la matrice de confision (confusion matrix)
|
||||
- l'accuracy
|
||||
- la précision (precision)
|
||||
- le rappel (recall)
|
||||
|
||||
Bien entendu ces tests doivent etre faits sur les données de test seulement
|
||||
|
||||
"""
|
||||
|
||||
|
||||
# Vous pouvez rajouter d'autres méthodes et fonctions,
|
||||
# il suffit juste de les commenter.
|
||||
"""
|
||||
|
||||
def test(self, test, test_labels):
|
||||
"""
|
||||
c'est la méthode qui va tester votre modèle sur les données de test
|
||||
l'argument test est une matrice de type Numpy et de taille nxm, avec
|
||||
n : le nombre d'exemple de test dans le dataset
|
||||
m : le mobre d'attribus (le nombre de caractéristiques)
|
||||
|
||||
test_labels : est une matrice numpy de taille nx1
|
||||
|
||||
vous pouvez rajouter d'autres arguments, il suffit juste de
|
||||
les expliquer en commentaire
|
||||
|
||||
Faites le test sur les données de test, et afficher :
|
||||
- la matrice de confision (confusion matrix)
|
||||
- l'accuracy
|
||||
- la précision (precision)
|
||||
- le rappel (recall)
|
||||
|
||||
Bien entendu ces tests doivent etre faits sur les données de test seulement
|
||||
|
||||
"""
|
||||
|
||||
|
||||
# Vous pouvez rajouter d'autres méthodes et fonctions,
|
||||
# il suffit juste de les commenter.
|
||||
|
|
|
@ -22,6 +22,7 @@ En gros, vous allez :
|
|||
# Charger/lire les datasets
|
||||
|
||||
train, train_labels, test, test_labels = ld.load_iris_dataset(0.7)
|
||||
train, train_labels, test, test_labels = ld.load_congressional_dataset(0.7)
|
||||
|
||||
# Initializer vos paramètres
|
||||
|
||||
|
@ -47,3 +48,6 @@ myKnn.test(test, test_labels)
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue