{{:cours:plim:alglib:site-logo-v3.png?500|}} //Jean-Yves Tigli - Nov 1016// ==== Préambule ==== AlgLib est une bibliothèque de traitement et d'analyse de données numériques multi-plateformes. Il prend en charge plusieurs langages de programmation ( C ++ , C # , Pascal, VBA) et plusieurs systèmes d'exploitation (Windows, Linux, Solaris). AlgLib fournit les fonctionalités suivantes: * L'analyse des données (classification / régression, y compris des réseaux de neurones) * Optimisation et solveurs non linéaires * Interpolation linéaire et non linéaire par la méthode des moindre carrés * Outils d'algèbre linéaire (algorithmes directs, EVD / SVD), solveurs directs et itératifs linéaires, transformée de Fourier rapide * et de nombreux autres algorithmes (intégration numérique, ODEs , statistiques, fonctions spéciales) Vous trouverez les manuel de référence sur ce [[http://www.alglib.net/translator/man/|site]], en particulier celui d'[[http://www.alglib.net/translator/man/manual.csharp.html|AlgLib sous C#]]. ==== Distribution de AlgLib ==== L'édition gratuite d'AlgLib est destiné aux scientifiques, chercheurs et ingénieurs qui ne veulent pas acheter la licence commerciale. Elle est livré gratuitement sous les termes de la licence GPL. Elle offre un ensemble complet de fonctionnalités identiques à l'édition commerciale de AlgLib. Cependant, il y a deux limites importantes dans l'édition gratuite de ALGLIB : * Les performances, sachant que la version gratuite d'AlgLib n'est pas Multi-threads * La licence, étant donné que sous licence GPL tout code que vous pourriez développer est lui-même GPL Le site de la librairie AlgLib est [[http://www.alglib.net|www.alglib.net]] Vous trouverez entre autre sur le site une distribution gratuite pour C# : [[http://www.alglib.net/translator/re/alglib-3.10.0.csharp.gpl.zip|alglib-3.10.0.csharp.gpl]]. ==== AlgLib et Analyse de Données ==== Comme indiqué ci-dessus, AlgLib fournit des librairies pour l'analyse de données. La liste et le manuel se trouvent sur ce [[http://www.alglib.net/translator/man/manual.csharp.html#pck_DataAnalysis|site]]. Un grand nombre d'algorithmes sont déjà implémentés comme : * Basic dataset functions * Clustering functions (hierarchical, k-means, k-means++) * Backward compatibility functions * Decision forest classifier (regression model) * Different filters used in data analysis * Linear discriminant analysis * Linear models * Logit models * Markov Chains for Population/proportional Data * Basic functions for neural networks * Basic functions for neural ensemble models * Neural network training * Principal component analysis Vous y trouverez très probablement un algorithme adapté à l'analyse souhaitée des données collectées dans votre projet. ==== Exemple de mise en oeuvre ==== Sans anticiper sur votre choix, nous allons présenter ici un exemple de mise en oeuvre d'AlgLib pour l'analyse de données. === Mise en oeuvre de l'Algorithme du K-means === L'algorithme du K-means ou K-Moyennes en français est particulièrement simple et pourtant assez performant pour certains problème de classification de données (ou clustering en anglais). Cet algorithme tient sur peu de lignes, vous pouvez donc trouver des sources intégrales qui l'implémente comme sur [[http://www.codeproject.com/Articles/985824/Implementing-The-K-Means-Clustering-Algorithm-in-C|K Means Clustering Algorithm en C]]. Dans ce cas, le code est donc embarquable sur votre SmartPhone .... pour les inconditionnels du "tout local". L'algorithme du K-means peut se résumer ainsi en 4 étapes : - Choisir k objets formant ainsi k clusters - Ré)affecter chaque objet O au cluster Ci de centre Mi tel que dist(O,Mi) est minimal - Recalculer Mi de chaque cluster (le barycentre) - Aller à l’étape 2 si on vient de faire une affectation Voici une vidéo illustrative de l'évolution des clusters au fur et à mesure des itérations de l'algorithme ([[https://youtu.be/BVFG7fd1H30|video]]). Plusieurs exécutions sont présentées avec des collections de données variables et des K (nombre de clusters souhaité) différents. Vous pouvez constater l'influence du choix des points de départ affectés aléatoirement aux clusters initiaux. === Implémentation du K-means en C# avec AlgLib === Un exemple d'utilisation d'AlgLib pour la mise en oeuvre de K-means en C# se trouve sur cette [[http://www.alglib.net/translator/man/manual.csharp.html#example_clst_kmeans|page]]. Cet exemple largement perfectible a été modifié pour ce tutorial. Il est commenté en français et intégré dans un projet Visual Studio C# se trouve dans le {{:cours:plim:alglib:exemple_alglib_kmeans_c_.zip|fichier}} contenant déjà la librairie AlgLib dans une dll. Bien sûr il vous faudra utilise un Visual Studio déjà installé sur votre machine pour le Tutorial. Nous vous rappelons que Visual Studio 2015 Community est gratuit pour les étudiants. Vous pourrez le télécharger [[https://www.visualstudio.com/downloads/|ici]]. Pour les détenteurs de Mac, il faudra se rabattre sur Visual Studio Code sur la même page. === Travail proposé sur ce tutorial === Améliorez le en : * rajoutant le chargement du DataSet depuis un fichier (excel, csv ...le format est laissé à votre choix). Ceci vous permettra quelque soit l'algorithme de votre projet de visualiser les données bruts issues de votre SmartPhone. * rajoutant la sauvegarde des k clusters (k défini interactivement) dans un fichier (excel, csv ...le format est laissé à votre choix). Ceci vous permettra quelque soit l'algorithme de votre projet de visualiser les clusters issus de l'analyse. * rajoutant différents méthodes d'affichage des données et des clusters : * textuelles (System.Console.Write) * graphiques (avec les Winforms par exemple) Les plus avancé pourront ainsi produire un simulateur, en affichant le résultats à chaque appel de l'algorithme avec des collections de données et un nombre de clusters différents. === Transparents Cours Intro Data Mining === {{:cours:plim:alglib:intro_data_mining.pptx|}}