Cours:BUTiot TNS : Différence entre versions
(→Classification temps réel) |
(→Lecture des données d'entrainement et apprentissage) |
||
Ligne 28 : | Ligne 28 : | ||
</source> | </source> | ||
* Mise en place du classifieur KNN (entrainement et test): | * Mise en place du classifieur KNN (entrainement et test): | ||
+ | |||
+ | Il sera nécessaire d'installer les paquets <code>@tensorflow-models/knn-classifier</code> et <code>@tensorflow/tfjs</code> | ||
<source lang="c++"> | <source lang="c++"> | ||
const knnClassifier = require('@tensorflow-models/knn-classifier'); | const knnClassifier = require('@tensorflow-models/knn-classifier'); | ||
Ligne 51 : | Ligne 53 : | ||
} | } | ||
</source> | </source> | ||
+ | Tester le bon fonctionnement de ce code. | ||
{{q| b)}} Évaluer les performances de ce classifieur KNN (1 plus proche voisin) en construisant la matrice de confusion (cf https://fr.wikipedia.org/wiki/Matrice_de_confusion) | {{q| b)}} Évaluer les performances de ce classifieur KNN (1 plus proche voisin) en construisant la matrice de confusion (cf https://fr.wikipedia.org/wiki/Matrice_de_confusion) |
Version du 5 février 2024 à 14:35
Classification multivariée temps réel
Le travail de cette étape va consister à
- lire des données temps réel caractérisant l'état d'un réseau (latence et débit)
- A partir d'un ensemble de données d'entrainement, mettre en place un classifieur permettant de détecter des anomalies sur ce réseau
Lecture des données d'entrainement et apprentissage
- Source des données : https://www.kaggle.com/datasets/rishitdagli/anomaly-detection-sample-dataset
a) À faire :
- Créer une nouvelle "application" node.js
- Télécharger le zip des données, décompresser, placer les deux fichiers
tr_server_data.csv
etgt_server_data.csv
dans le dossier de l'application. - Lire ces données au format CSV, par exemple avec :
const fs = require("node:fs");
// training
let tr = fs.readFileSync("tr_server_data.csv", "utf-8")
.split('\n') // découpe des lignes
.map(l => l.split(',').map (v => parseFloat(v))); // découpe autour de la virgule et conv. en flottant
tr.pop(); // Les deux dernières lignes sont à rejeter.
tr.pop();
- Mise en place du classifieur KNN (entrainement et test):
Il sera nécessaire d'installer les paquets @tensorflow-models/knn-classifier
et @tensorflow/tfjs
const knnClassifier = require('@tensorflow-models/knn-classifier');
const tf = require('@tensorflow/tfjs');
// Create the classifier.
const classifier = knnClassifier.create();
// Train the classifier
for (let k = 0; k < gt.length; k++) {
classifier.addExample(
tf.tensor(tr[k]),
gt[k]
);
}
// Test the classifier
for (let k = 0; k < gt.length; k++) {
classifier.predictClass(
tf.tensor(tr[k]),
1
).then(v => console.log(v.classIndex + " / " + gt[k]));
}
Tester le bon fonctionnement de ce code.
b) Évaluer les performances de ce classifieur KNN (1 plus proche voisin) en construisant la matrice de confusion (cf https://fr.wikipedia.org/wiki/Matrice_de_confusion)
c Évaluer les performances de ce classifieur KNN (3 plus proche voisin) en construisant la matrice de confusion
Classification temps réel
- Données publiées sur le broker habituel :
-
data/latence
en ms -
data/debit
en mb/s -
data/gt
= ground truth (vérité terrain) : est-ce une anomalie ?
-
- Ces données ne sont pas les mêmes que celles de l'entrainement.
A faire (en node.js) :
- Lire ces données avec mqtt
- Lorsqu'une donnée arrive : la classer comme "normale" (0) ou "anomalie" (1) avec le KNN précédent (1 ou 3 plus proche voisin)
- La vérité terrain étant disponible sur le topic
data/gt
, évaluer les performances du classifieur, sur ces données non entrainées, en construisant une matrice de confusion.