Introduction aux bibliothèques d'apprentissage automatique pour C ++

Contenu

introduction

J'aime travailler avec C ++, même après avoir découvert le langage de programmation Python pour l'apprentissage automatique. C ++ c'était le premier langage de programmation que j'ai appris et je suis ravi de l'utiliser dans l'espace d'apprentissage automatique.

J'ai écrit sur la création de modèles d'apprentissage automatique dans mon article précédent et la communauté a adoré l'idée. J'ai reçu une réponse accablante et une requête m'a marqué (de plusieurs personnes): Existe-t-il des bibliothèques C ++ pour l'apprentissage automatique?

C'est une bonne question. Des langages comme Python et R disposent d'un grand nombre de packages et de bibliothèques pour s'adapter à différentes tâches d'apprentissage automatique.. Ensuite, C ++ avez vous une offre de ce type?

Bibliothèques d'apprentissage automatique C ++

Oui, il le fait! Je vais mettre en évidence deux de ces bibliothèques C ++ dans ce post, et nous les verrons aussi en action (avec code). Si vous êtes nouveau sur C ++ pour l'apprentissage automatique, Je vous recommanderai à nouveau de lire le premier post.

Table des matières

  1. Pourquoi devrions-nous utiliser des bibliothèques d'apprentissage automatique?
  2. Bibliothèques d'apprentissage automatique en C ++
    1. Bibliothèque SHARK
    2. Bibliothèque MLPACK

Pourquoi devrions-nous utiliser des bibliothèques d'apprentissage automatique?

C'est une question que beaucoup de nouveaux arrivants auront.. Quelle est la pertinence des bibliothèques dans le machine learning? Laissez-moi essayer de vous expliquer cela dans cette section.

Disons que des professionnels chevronnés et des vétérans de l'industrie ont fait de gros efforts et ont trouvé une solution à un obstacle.. Préféreriez-vous l'utiliser ou préféreriez-vous passer des heures à essayer de recréer la même chose à partir de zéro? Comme d'habitude, il y a peu d'intérêt à opter pour cette dernière méthode, surtout lorsque vous travaillez ou apprenez dans les délais impartis.

La meilleure chose à propos de notre communauté d'apprentissage automatique est qu'il existe déjà de nombreuses solutions sous forme de bibliothèques et de packages. Quelqu'un d'autre, des experts aux passionnés, vous avez déjà fait le travail acharné et avez rassemblé la réponse bien emballée dans une bibliothèque.

Ces bibliothèques de machine learning sont efficaces et optimisées, et soigneusement testé pour plusieurs cas d'utilisation. Faire confiance à ces bibliothèques est ce qui motive notre apprentissage et rend l'écriture de code, soit en C ++ Python, être beaucoup plus facile et plus intuitif.

Bibliothèques d'apprentissage automatique en C ++

Dans cette section, nous examinerons les deux bibliothèques d'apprentissage automatique les plus populaires en C +:

  1. Bibliothèque SHARK
  2. Bibliothèque MLPACK

Regardons chacun individuellement et voyons comment fonctionne le code C ++.

1) Bibliothèque SHARK C ++

Shark est une bibliothèque modulaire rapide et prend en charge de manière écrasante les algorithmes d'apprentissage supervisé, comme régression linéaire, les réseaux de neurones, regroupement, k-chaussettes, etc. Il inclut également les fonctionnalités d'algèbre linéaire et d'optimisation numérique. Ce sont des fonctions ou des domaines mathématiques clés qui sont très importants lors de l'exécution de tâches d'apprentissage automatique.

Nous verrons dans un premier temps comment installer Shark et configurer un environnement. Après, nous allons implémenter la régression linéaire avec Shark.

Installer Shark et configurer l'environnement (je vais le faire pour Linux)

  • Shark fait confiance à Boost et cmake. Par chance, toutes les dépendances peuvent être installées avec la commande suivante:
              sudo apt-get install cmake cmake-curses-gui libatlas-base-dev libboost-all-dev
  • Pour installer Shark, exécutez les commandes suivantes ligne par ligne dans votre terminal:
  1. clone de git https://github.com/Shark-ML/Shark.git (vous pouvez également télécharger le fichier zip et l'extraire)
  2. requin cd
  3. compilation mkdir
  4. construction de cd
  5. faire ..
  6. faire

Si vous n'avez pas vu ça avant, ce n'est pas un obstacle. C'est assez simple et il y a beaucoup d'informations en ligne si vous avez des problèmes. Pour Windows et autres systèmes d'exploitation, vous pouvez faire une recherche rapide sur Google pour savoir comment installer Shark. Voici le site de référence Guide d'installation du requin.

Compiler des programmes avec Shark

Implémentation de la régression linéaire avec Shark

Mon premier article de cette série avait une introduction à la régression linéaire. Je vais utiliser la même idée dans ce post, mais cette fois en utilisant la bibliothèque Shark C ++.

Phase d'initialisation
Nous commencerons par inclure les bibliothèques et les fonctions d'en-tête pour la régression linéaire:

Vient ensuite le jeu de données. J'ai créé deux fichiers CSV. Le fichier input.csv contient les valeurs x et le fichier labels.csv contient les valeurs y. Ci-dessous un aperçu des données:

Bibliothèque C ++ _

Vous pouvez trouver les deux fichiers ici: Apprentissage automatique avec C ++. Premier, nous allons créer des conteneurs de données pour enregistrer les valeurs des fichiers CSV:

Ensuite, nous devons les importer. Shark est livré avec une belle fonction d'importation CSV, et nous spécifions le conteneur de données que nous voulons initialiser, et aussi l'emplacement du fichier de chemin CSV:

Après, nous devons instancier un type de jeu de données de régression. À présent, c'est juste un objet général de régression, et ce que nous allons faire dans le constructeur, c'est passer nos entrées et aussi nos étiquettes pour les données.

Ensuite, nous devons entraîner le modèle de régression linéaire. Comment fait-on cela? Nous devons instancier un entraîneur et établir un modèle linéaire:

Étape de formation

Vient ensuite l'étape clé où nous formons véritablement le modèle. Ici, le coach a une fonction membre appelée former. Ensuite, cette fonction entraîne ce modèle et trouve les paramètres du modèle, ce qu'on veut faire exactement.

Étape de prédiction

En conclusion, générons les paramètres du modèle:

Les modèles linéaires ont une fonction membre appelée compenser qui génère l'intersection de la ligne de meilleur ajustement. Ensuite, nous générons une matrice au lieu d'un multiplicateur. C'est parce que le modèle peut être généralisé (pas seulement linéaire, peut être un polynôme).

On calcule la droite de meilleur ajustement en minimisant les moindres carrés, En d'autres termes, minimiser les pertes au carré.

Ensuite, par chance, le modèle nous permet de générer cette information. La bibliothèque Shark est très utile pour donner une indication de l'ajustement des modèles:

Premier, nous devons initialiser un objet de perte au carré, puis nous devons instancier un conteneur de données. Après, la prévision est calculée sur la base des entrées du système, Et puis tout ce que nous ferons est de faire la perte, qui est calculé en passant les étiquettes et aussi la valeur de prédiction.

En conclusion, nous devons compiler. Dans la borne, tapez la commande suivante (assurez-vous que le répertoire est configuré correctement):

g++ -o lr linear_regression.cpp -std=c++11 -lboost_serialization -lshark -lcblas

Une fois compilé, aurait créé un g / D objet. Maintenant, lancez simplement le programme. La sortie que nous obtenons est:

B : [1](-0,749091)

UNE :[1,1]((2.00731))

Perdu: 7.83109

La valeur de b est un peu loin de 0, mais c'est à cause du bruit sur les étiquettes. La valeur du multiplicateur est proche de 2, ce qui est tout à fait équivalent aux données. Et voici comment vous pouvez utiliser la bibliothèque Shark en C ! ++ construire un modèle de régression linéaire!

2) Bibliothèque MLPACK C ++

mlpack est une bibliothèque d'apprentissage automatique rapide et flexible écrite en C ++. Son objectif est de fournir des implémentations rapides et extensibles d'algorithmes d'apprentissage automatique de pointe.. mlpack fournit ces algorithmes sous forme de simples programmes de ligne de commande, a quitté le Python, Liens Julia et classes C ++ qui peuvent ensuite être intégrés dans des solutions d'apprentissage automatique à plus grande échelle.

Nous verrons dans un premier temps comment installer mlpack et l'environnement de configuration. Ensuite, nous allons implémenter l'algorithme k-means en utilisant mlpack.

Installer mlpack et l'environnement de configuration (je vais le faire pour Linux)

mlpack dépend des bibliothèques suivantes qui doivent être installées sur le système et avoir des en-têtes présents:

  • Tatou> = 8.400.0 (avec le soutien de LAPACK)
  • Renforcer (math_c99, options_programme, sérialisation, unit_test_framework, tas, esprit)> = 1.49
  • rétrécir> = 2.10.0

Sur Ubuntu et Debian, vous pouvez obtenir toutes ces dépendances au moyen de ajuster:

sudo apt-get install libboost-math-dev libboost-program-options-dev libboost-test-dev libboost-serialization-dev binutils-dev python-pandas python-numpy cython python-setuptools

Maintenant que toutes les dépendances sont installées sur votre système, vous pouvez directement exécuter les commandes suivantes pour compiler et installer mlpack:

  • wget
  • goudron -xvzpf mlpack-3.2.2.tar.gz
  • mkdir mlpack-3.2.2 / compiler && CD mlpack-3.2.2 / construire
  • faire ../
  • faire -j4 # Le -j est le nombre de cœurs que vous souhaitez utiliser pour une construction
  • sudo faire installer

Sur de nombreux systèmes Linux, mlpack sera installé par défaut pour / usr / local / lib et vous devrez peut-être définir la variable d'environnement LD_LIBRARY_PATH:

exporter LD_LIBRARY_PATH=/usr/local/lib

Les instructions ci-dessus sont le moyen le plus simple d'obtenir, compiler et installer mlpack. Si votre distribution Linux prend en charge les binaires, suivez ce site pour installer mlpack en utilisant une commande d'une ligne en fonction de votre distribution: Instructions d'installation du MLPACK. La méthode ci-dessus fonctionne pour toutes les distributions.

Compiler des programmes avec mlpack

  • Incluez les fichiers d'en-tête pertinents dans votre programme (en supposant la mise en œuvre des k-moyennes):
    1. #comprendre
    2. #comprendre
  • Pour compiler, nous devons lier les bibliothèques suivantes:
    1. std = c ++ 11 -larmadillo -lmlpack -lboost_serialization

Mettre en œuvre K-Means avec mlpack

K-means est un algorithme basé sur le centroïde, ou un algorithme basé sur la distance, où l'on calcule les distances pour attribuer un point à un groupe. En K-Means, chaque groupe est lié à un centre de gravité.

L'objectif principal de l'algorithme K-Means est de minimiser la somme des distances entre les points et leur centroïde de cluster respectif.

K-means est effectivement une procédure itérative dans laquelle nous voulons segmenter les données en certains groupes. Premier, nous attribuons des centroïdes initiaux, donc ceux-ci peuvent être absolument aléatoires. Ensuite, pour chaque point de données, on trouve le centroïde le plus proche. Ensuite, nous affecterons ce point de données à ce centroïde. Ensuite, chaque centre de gravité représente une classe. Et une fois que nous avons attribué tous les points de données à chaque centroïde, nous allons calculer la moyenne de ces centroïdes.

Pour une compréhension détaillée de l'algorithme K-means, lis ce tuto: Le guide le plus complet pour regrouper les K-means dont vous aurez besoin.

Ici, nous allons implémenter k-means en utilisant la bibliothèque mlpack en C ++.

Phase d'initialisation

Nous commencerons par inclure les bibliothèques et les fonctions d'en-tête pour k-means:

Ensuite, nous allons créer quelques variables de base pour déterminer le nombre de clusters, la dimensionnalité du programme, le nombre d'échantillons et le nombre maximum d'itérations que nous voulons faire. Parce que? Parce que K-means est une procédure itérative.

Ensuite, nous allons créer les données. C'est donc ici que nous utiliserons d'abord le Tatou Une bibliothèque. Nous allons créer une classe de carte qui est effectivement un conteneur de données:

Tiens! Ce tapis de classe, les données de l'objet que vous avez, nous lui avons donné une dimensionnalité de deux, et il sait qu'il va avoir 50 échantillons, et vous avez initialisé toutes ces valeurs de données à 0.

Ensuite, nous allons attribuer des données aléatoires à cette classe de données, puis exécuter efficacement les K-means. je vais créer 25 points autour de la position 1 1, et nous pouvons le faire en disant efficacement que chaque point de données est 1 1 ou à la position X est égal à 1, et est égal à 1. Après, nous allons ajouter du bruit aléatoire. pour chacun des 25 points de données. Voyons cela en action:

Ici, aller de 0 une 25, la colonne i doit être ce vecteur de type d'arme à la position 11, et puis nous ajouterons une certaine quantité de bruit aléatoire de taille 2. Ensuite, sera un Le vecteur de bruit aléatoire bidimensionnel multiplié par 0,25 jusqu'à ce poste, et ce sera notre colonne de données. Et puis on fera exactement la même chose pour le point x est égal à 2 et y est égal à 3.

Et nos données sont prêtes! Il est temps de passer à l'étape de la formation.

Étape de formation

Ensuite, premier, instancions un type de ligne d'arme de tapis pour contenir les groupes, puis nous instancions une arme de tapis pour contenir les centroïdes:

À présent, nous devons créer une instance de la classe K-means:

Nous avons instancié la classe K-means et spécifié le nombre maximum d'itérations à passer au constructeur. Alors maintenant, nous pouvons aller de l'avant et grouper.

Nous appellerons la fonction membre Cluster de cette classe K-means. Nous devons transmettre les données, le nombre de grappes, puis nous devons également passer l'objet cluster et l'objet centroïde.

À présent, cette fonction de cluster exécutera K-means sur ces données avec un nombre spécifique de clusters, puis il initialisera ces deux objets: clusters et centroïdes.

Générer des résultats

Nous pouvons simplement afficher les résultats en utilisant le centroïdes.print une fonction. Cela vous donnera l'emplacement des centroïdes:

Ensuite, nous devons compiler. Dans la borne, tapez la commande suivante (encore, assurez-vous que le répertoire est configuré correctement):

g++ k_means.cpp -o kmeans_test -O3 -std=c++11 -larmadillo -lmlpack -lboost_serialization && ./kmeans_test

Une fois compilé, aurait créé un objet kmeans. Maintenant, lancez simplement le programme. La sortie que nous obtenons est:

Centroïdes:

0,9497 1,9625

0,9689 3,0652

Et c'est ça!

Remarques finales

Dans ce billet, Nous avons vu deux bibliothèques d'apprentissage automatique populaires qui nous aident à mettre en œuvre des modèles d'apprentissage automatique en c ++. J'aime le support étendu disponible dans la documentation officielle, alors regarde ça. Si tu as besoin d'aide, contactez-moi ci-dessous et je me ferai un plaisir de vous répondre.

Dans le prochain post, nous allons implémenter des modèles d'apprentissage machine intéressants comme les arbres de décision et la forêt aléatoire. Alors restez à l'écoute!

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.