ML++
L’apprentissage automatique est une discipline vaste et passionnante, qui attire l’attention des spécialistes de nombreux domaines. Malheureusement, pour les programmeurs et les passionnés de C++, il semble y avoir un manque de support dans le domaine de l'apprentissage automatique. Pour combler ce vide et donner au C++ un véritable pied dans la sphère du ML, cette bibliothèque a été écrite. L'intention de cette bibliothèque est qu'elle agisse comme un carrefour entre les développeurs de bas niveau et les ingénieurs en apprentissage automatique.
Installation
Commencez par télécharger les fichiers d'en-tête de la bibliothèque ML++. Vous pouvez le faire en clonant le référentiel et en extrayant le répertoire MLPP qu'il contient :
git clone https://github.com/novak-99/MLPP
Ensuite, exécutez le script shell « buildSO.sh » :
Après cela, conservez les fichiers sources ML++ dans un répertoire local et incluez-les de cette manière :
# include " MLPP/Stat/Stat.hpp " // Including the ML++ statistics module.
int main (){
...
}
Enfin, une fois la création d'un projet terminée, compilez-le en utilisant g++ :
g++ main.cpp /usr/local/lib/MLPP.so --std=c++17
Usage
Veuillez noter que ML++ utilise le type de données std::vector<double>
pour émuler des vecteurs et le type de données std::vector<std::vector<double>>
pour émuler des matrices.
Commencez par inclure le fichier d’en-tête respectif de votre choix.
# include " MLPP/LinReg/LinReg.hpp "
Ensuite, instanciez un objet de la classe. N'oubliez pas de passer le jeu d'entrée et le jeu de sortie en paramètres.
LinReg model (inputSet, outputSet);
Ensuite, appelez l'optimiseur que vous souhaitez utiliser. Pour les optimiseurs itératifs tels que la descente de gradient, incluez le taux d'apprentissage, le numéro d'époque et l'utilisation ou non du panneau de l'interface utilisateur.
model.gradientDescent( 0.001 , 1000 , 0 );
Super, vous êtes maintenant prêt à tester ! Pour tester une instance de test unique, utilisez la fonction suivante :
model.modelTest(testSetInstance);
Cela renverra la prédiction singulière du modèle pour cet exemple.
Pour tester un ensemble de test complet, utilisez la fonction suivante :
model.modelSetTest(testSet);
Le résultat sera les prédictions du modèle pour l’ensemble de l’ensemble de données.
Contenu de la bibliothèque
- Régression
- Régression linéaire
- Régression logistique
- Régression Softmax
- Régression exponentielle
- Régression probit
- Régression CLogLog
- Régression de Tanh
- Réseaux de neurones profonds et de taille dynamique
- Fonctions d'activation possibles
- Linéaire
- Sigmoïde
- Softmax
- Bruissement
- Mish
- SinC
- Softplus
- Signature douce
- CLogLog
- Se connecter
- CDF gaussien
- RÉLU
- GÉLU
- Signe
- Étape unitaire
- Sinh
- Matraque
- Tanh
- Csch
- Sécher
- Coth
- Arsinh
- Arcoch
- Artanh
- Arcsch
- Arsech
- Arcoth
- Algorithmes d'optimisation possibles
- Descente de dégradé par lots
- Descente de dégradé en mini-lots
- Descente de gradient stochastique
- Descente de gradient avec élan
- Dégradé accéléré Nesterov
- Optimiseur Adagrad
- Optimiseur Adadelta
- Adam Optimiseur
- Optimiseur Adamax
- Nadam Optimiseur
- Optimiseur AMSGrad
- Optimiseur Newton-Raphson de 2e ordre*
- Équation normale*
*Uniquement disponible pour la régression linéaire - Fonctions de perte possibles
- MSE
- RMSE
- MAE
- MBE
- Perte de journal
- Entropie croisée
- Perte de charnière
- Perte de Wasserstein
- Méthodes de régularisation possibles
- Lasso
- Crête
- ÉlastiqueNet
- Coupure de poids
- Méthodes possibles d'initialisation du poids
- Uniforme
- Xavier Normal
- Xavier Uniforme
- Il est normal
- Il uniforme
- LeCun Normal
- Uniforme LeCun
- Planificateurs de taux d'apprentissage possibles
- Basé sur le temps
- Basé sur l'époque
- Basé sur les étapes
- Exponentiel
- Réseaux de neurones prédéfinis
- Peceptron multicouche
- Encodeur automatique
- Réseau Softmax
- Modélisation générative
- Réseaux contradictoires génératifs tabulaires
- Réseaux contradictoires génératifs tabulaires de Wasserstein
- Traitement du langage naturel
- Word2Vec (sac continu de mots, Skip-Gram)
- Dérivé
- Sac de mots
- TFIDF
- Tokenisation
- Fonctions auxiliaires de traitement de texte
- Vision par ordinateur
- L'opération de convolution
- Mise en commun maximale, minimale et moyenne
- Global Max, Min, Moyenne de mise en commun
- Détecteurs de fonctionnalités prédéfinis
- Filtre Prewitt horizontal/vertical
- Filtre Sobel horizontal/vertical
- Filtre Scharr horizontal/vertical
- Filtre Roberts horizontal/vertical
- Filtre gaussien
- Détecteur de coin Harris
- Analyse en composantes principales
- Classificateurs bayésiens naïfs
- Bayes naïfs multinomiaux
- Bernoulli Naive Bayes
- Bayes naïf gaussien
- Classification des vecteurs de support
- Formulation Primaire (Objectif de Perte de Charnière)
- Formulation double (via des multiplicateurs lagrangiens)
- K-Moyennes
- k-Voisins les plus proches
- Recherche de valeurs aberrantes (utilisation des scores z)
- Décompositions matricielles
- Décomposition SVD
- Décomposition de Cholesky
- Vérificateur de définition positive
- Décomposition QR
- Analyse numérique
- Diffrentiation numérique
- Fonctions univariées
- Fonctions multivariées
- Calculatrice de vecteur jacobien
- Calculateur de matrice de Hesse
- Approximateur de fonction
- Approximation constante
- Approximation linéaire
- Approximation quadratique
- Approximation cubique
- Solveurs d'équations différentielles
- La méthode d'Euler
- Méthode de croissance
- Transformations mathématiques
- Transformation en cosinus discrète
- Module d'algèbre linéaire
- Module de statistiques
- Module de traitement des données
- Configuration et impression des ensembles de données
- Ensembles de données disponibles
- Ensemble de données sur le cancer du sein du Wisconsin
- Ensemble de données MNIST
- Ensemble de données sur les fleurs d'iris
- Ensemble de données sur le vin
- Ensemble de données sur le logement en Californie
- Ensemble de données sur les incendies et la criminalité (Chicago)
- Mise à l'échelle des fonctionnalités
- Normalisation moyenne
- Une représentation chaude
- Inverser une représentation chaude
- Conversions d'espace colorimétrique prises en charge
- RVB en niveaux de gris
- RVB vers HSV
- RVB en YCbCr
- RVB vers XYZ
- XYZ en RVB
- Utilitaires
- Fonction TP, FP, TN, FN
- Précision
- Rappel
- Précision
- score F1
Qu'y a-t-il en préparation ?
ML++, comme la plupart des frameworks, est dynamique et en constante évolution. Ceci est particulièrement important dans le monde du ML, car de nouveaux algorithmes et techniques sont développés jour après jour. Voici quelques éléments actuellement développés pour ML++ :
- Réseaux de neurones convolutifs
- Noyaux pour SVM
- Prise en charge de la régression vectorielle
Citations
Différents matériaux m'ont aidé tout au long de la création de ML++, et je voudrais ici en reconnaître plusieurs. Cet article de TutorialsPoint a été d'une grande aide pour essayer d'implémenter le déterminant d'une matrice, et cet article de GeeksForGeeks a été très utile pour essayer de prendre l'adjoint et l'inverse d'une matrice.