Cours:BUTiot classif

De troyesGEII
Aller à : navigation, rechercher

Retour à la page du cours

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

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 et gt_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 proches voisins) 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.