Partitionnement automatique de données
L’apprentissage automatique ou apprentissage statistique
1. Présentation
a. Définition
L’apprentissage automatique, plus connu sous son appellation anglaise machine learning, désigne un ensemble d’algorithmes et de principes permettant à un programme d’améliorer sa performance dans l’exécution d’une tâche donnée. C’est un domaine associé à l’intelligence artificielle. L’essentiel de ces algorithmes reposant sur une approche statistique, le terme « apprentissage statistique » est parfois utilisé.
Dans le cadre d’une approche statistique, de nouveaux types d’objets mathématiques sont manipulés. Les variables arithmétiques classiques représentent une valeur donnée ou une inconnue : X représente le nombre de bonbons, il est exprimé en fonction du prix P et de l’argent en poche A. Les statistiques introduisent, par exemple, la notion de variable aléatoire. Dans ce cas, ce n’est plus la valeur d’une variable X qui est recherchée, mais les chances : pour que X prenne une valeur donnée, pour que X soit supérieure à un seuil, pour que X appartienne à un certain ensemble, etc. Par exemple : quelles sont les chances pour que X, le résultat d’un dé, soit une valeur paire ? Ces techniques permettront par exemple d’extraire des déterminants à partir d’un jeu de données : au vu des données, X a 50 % de chances d’être nul, mais quand Y vaut 3, X est nul dans 98 % des cas.
Ces algorithmes sont devenus pertinents et utiles avec l’accroissement de la puissance de calcul permettant d’exécuter des opérations à des fréquences vertigineuses, et la diminution des coûts de stockage de l’information entraînant l’apparition de jeux de données toujours plus massifs et variés.
Le terme big data (littéralement « grosses données » en français) est à présent consacré pour désigner des volumes de données sur lesquels les algorithmes et les méthodes (de stockage, de mise à jour, de communication) traditionnels sont dépassés....
Bibliothèques Python
1. Calcul matriciel optimisé avec NumPy
a. Présentation
Un grand nombre d’algorithmes relevant du machine learning repose sur du calcul matriciel. Ce domaine des mathématiques définit par exemple un ensemble d’opérations sur les matrices telles que l’addition, le produit, les rotations, etc. Les matrices manipulées peuvent rapidement atteindre des dimensions conséquentes. Les opérations sur ce type de matrices prennent un temps non négligeable.
C’est à cette fin que la bibliothèque NumPy a été écrite. En plus de fonctions mathématiques diverses, elle implémente une représentation particulièrement efficace des tableaux à dimensions multiples (représentation informatique des matrices mathématiques) et des opérations associées.
Une matrice est un tableau particulier à plusieurs dimensions. Il doit en effet respecter un ensemble de contraintes. La première étant que les sous-tableaux doivent avoir la même taille : soit A un tableau de tableaux, tous les tableaux contenus dans A doivent contenir le même nombre d’éléments. De plus, les éléments contenus doivent être du même type (entiers, nombres réels, etc.).
NumPy fait partie de l’écosystème SciPy : un ensemble de bibliothèques et de logiciels libres, écrits pour Python, destinés aux sciences et aux mathématiques.
SciPy est le nom de l’écosystème (de la pile logicielle en anglais), mais aussi le nom de la bibliothèque Python donnant une cohérence à l’ensemble.
b. Installation
Il s’agit, une fois de plus, d’une bibliothèque libre et répandue. Elle est empaquetée pour Debian sous le nom « python3-numpy ». Il est ainsi généralement possible de l’installer avec son gestionnaire d’applications favori :
# apt-get install python3-numpy
Évidemment indexée par Pypi, la bibliothèque est aussi installable à l’aide de pip3 :
$ pip3 install numpy
Une fois installée, il est possible de l’importer :
>>> import numpy as np
c. Le type numpy.array
L’essentiel des fonctionnalités...
Une première application : regrouper les fichiers par date de création
1. Représentation des données
a. Description de la problématique
Un système de fichiers représente un ensemble conséquent de données à traiter. Le but recherché est de regrouper des fichiers par groupes en fonction de certaines de leurs propriétés. Le choix a été fait de s’attacher au regroupement selon l’une des trois dates fournies par le système d’exploitation : modification, création et accès (voir chapitre Premiers pas dans l’analyse d’un fichier, section Les métadonnées temporelles avec os.path).
Les dates peuvent être représentées de différentes manières. Ici, elles seront utilisées sous leur forme de timestamp, donnant des informations de date et d’heure ou sous la forme d’heure seule (sans date associée). Le timestamp représente le nombre de secondes depuis l’epoch (1er janvier 1970 00:00:00 UTC), l’heure sans date sera le nombre des secondes écoulées depuis le début de la journée (00:00:00 heure locale).
Ces deux représentations offrent trois possibilités de regroupement : selon la date, selon l’heure ou selon la date et l’heure. C’est-à-dire regrouper les fichiers : de la même période (les fichiers modifiés début décembre), du même moment dans la journée (les fichiers modifiés le matin) ou de la même période au même moment dans la journée (les fichiers modifiés en début de journée début décembre).
Ces groupes peuvent constituer un ensemble d’indices permettant de guider l’exploration d’un système de fichiers. Le regroupement par horaire permettra de mettre en évidence les fichiers créés par des tâches récurrantes (du type de celles gérées par cron). Les timestamp permettront de déterminer l’ensemble des fichiers modifiés à la période d’une attaque, etc.
b. Stockage et identification des temps et des chemins
La récupération des informations consiste à parcourir l’ensemble de l’arborescence d’un...