« Code DBSCAN » : différence entre les versions

De Wiki du LAMA (UMR 5127)
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
 
(4 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
Vous trouverez sur cette page le code pour la détection d'anomalies sur une File.
Vous trouverez sur cette page le code pour la détection d'anomalies avec l'algorithme DBSCAN.


=Code=
=Code=
Ligne 6 : Ligne 6 :


<nowiki>
<nowiki>
## Fonction de la détection d'anomalie Isolation Forest
## Fonction de la détection d'anomalie DBSCAN
def detectionAnomaly(donnee, taille_File):
def detectionAnomaly(donnee, taille_File):


liste_de_donnee = donnee
##on récupère le n-1 premiers éléments de la File
liste_de_donnee = donnee[0:taille_File]
X = convert_list_database(liste_de_donnee) # <- base de donnees en panda
df = convert_list_database(liste_de_donnee) # on défnit la base de donnée de ref


## Partie de la détection d'anomalies
# on ajoute le nouveau élément qu'on veut tester, donc df_motif est composé des n-1 derniers éléments de la File
db = DBSCAN(eps=0.5, min_samples=5).fit(X)
df_modif = convert_list_database(donnee[1:taille_File +1])
labels = db.labels_ # <- une liste de score


contamination_un_element = 1*1/taille_File # on veut qu'un seul élément contaminer parmi la taille de la file


if labels[len(labels)-1] == -1: # <- on regarde le dernier score et si -1 alors anomalie (bruit)
## Partie de la détection d'anomalies
print("--> Erreur détecter")
model = IsolationForest(n_estimators=100, max_samples='auto', contamination=contamination_un_element,max_features=1.0)


## On renvoie la valeur de l'état du dernier point pour savoir s'il est une anomalie ou non et permettre de le traiter dans des fonctions futures.
model.fit(df[['c1']].values)
return labels[len(labels)-1]
</nowiki>


=Explication des principales lignes=
df_modif['anomaly']=model.predict(df[['c1']].values)


Permet de trouver des anomalies dans une base de données X,
## on récupère le dernier élémment: celui que l'on souhaite regarder
avec comme epsilon 0.5,
dernier_elt = df_modif.tail(1).values
et avec un minimum de points dans un cluster de 5.
dernier_elt = dernier_elt.tolist()


<nowiki>
if dernier_elt[0][len(dernier_elt)] == -1: # sinon anomalie détectée alors (à déterminer selon votre choix)
DBSCAN(eps=0.5, min_samples=5).fit(X)
print("Erreur détecter")

## On peut aussi renvoyer la valeur de l'état du dernier élément qui pourra être réutiliser papr la suite
return dernier_elt[0][len(dernier_elt)]
</nowiki>
</nowiki>


Permet de récupérer la colonne labels qui correspond à des valeurs allant de -1 à 1 (-1 étant une anomalie). Ces valeurs sont issues de la ligne ci-dessus.
=Explication des principales lignes=
<nowiki>
db.labels
</nowiki>

Dernière version du 26 mai 2023 à 11:51

Vous trouverez sur cette page le code pour la détection d'anomalies avec l'algorithme DBSCAN.

Code

Lien PDF

## Fonction de la détection d'anomalie DBSCAN
def detectionAnomaly(donnee, taille_File):

   liste_de_donnee = donnee
   X = convert_list_database(liste_de_donnee) # <- base de donnees en panda

   ## Partie de la détection d'anomalies
   db = DBSCAN(eps=0.5, min_samples=5).fit(X)
   labels = db.labels_ # <- une liste de score


   if labels[len(labels)-1] == -1: # <- on regarde le dernier score et si -1 alors anomalie (bruit)
      print("--> Erreur détecter")

   ## On renvoie la valeur de l'état du dernier point pour savoir s'il est une anomalie ou non et permettre de le traiter dans des fonctions futures.
   return labels[len(labels)-1]

Explication des principales lignes

Permet de trouver des anomalies dans une base de données X, avec comme epsilon 0.5, et avec un minimum de points dans un cluster de 5.

   DBSCAN(eps=0.5, min_samples=5).fit(X)

Permet de récupérer la colonne labels qui correspond à des valeurs allant de -1 à 1 (-1 étant une anomalie). Ces valeurs sont issues de la ligne ci-dessus.

   db.labels