ML++
Maschinelles Lernen ist eine umfangreiche und spannende Disziplin, die die Aufmerksamkeit von Spezialisten aus vielen Bereichen auf sich zieht. Leider scheint es für C++-Programmierer und -Enthusiasten an Unterstützung im Bereich maschinelles Lernen zu mangeln. Um diese Lücke zu schließen und C++ im ML-Bereich Fuß zu fassen, wurde diese Bibliothek geschrieben. Die Absicht dieser Bibliothek besteht darin, als Schnittstelle zwischen Low-Level-Entwicklern und Ingenieuren für maschinelles Lernen zu fungieren.
Installation
Beginnen Sie mit dem Herunterladen der Header-Dateien für die ML++-Bibliothek. Sie können dies tun, indem Sie das Repository klonen und das darin enthaltene MLPP-Verzeichnis extrahieren:
git clone https://github.com/novak-99/MLPP
Als nächstes führen Sie das Shell-Skript „buildSO.sh“ aus:
Bewahren Sie anschließend die ML++-Quelldateien in einem lokalen Verzeichnis auf und binden Sie sie auf folgende Weise ein:
# include " MLPP/Stat/Stat.hpp " // Including the ML++ statistics module.
int main (){
...
}
Nachdem Sie die Erstellung eines Projekts abgeschlossen haben, kompilieren Sie es abschließend mit g++:
g++ main.cpp /usr/local/lib/MLPP.so --std=c++17
Verwendung
Bitte beachten Sie, dass ML++ den Datentyp std::vector<double>
zum Emulieren von Vektoren und den Datentyp std::vector<std::vector<double>>
zum Emulieren von Matrizen verwendet.
Fügen Sie zunächst die entsprechende Header-Datei Ihrer Wahl ein.
# include " MLPP/LinReg/LinReg.hpp "
Als nächstes instanziieren Sie ein Objekt der Klasse. Vergessen Sie nicht, den Eingabesatz und den Ausgabesatz als Parameter zu übergeben.
LinReg model (inputSet, outputSet);
Rufen Sie anschließend den Optimierer auf, den Sie verwenden möchten. Geben Sie bei iterativen Optimierern wie dem Gradientenabstieg die Lernrate, die Epochennummer und die Angabe an, ob das UI-Panel verwendet werden soll oder nicht.
model.gradientDescent( 0.001 , 1000 , 0 );
Großartig, Sie sind jetzt bereit zum Testen! Um eine einzelne Testinstanz zu testen, verwenden Sie die folgende Funktion:
model.modelTest(testSetInstance);
Dadurch wird die singuläre Vorhersage des Modells für dieses Beispiel zurückgegeben.
Um einen gesamten Testsatz zu testen, verwenden Sie die folgende Funktion:
model.modelSetTest(testSet);
Das Ergebnis sind die Vorhersagen des Modells für den gesamten Datensatz.
Inhalte der Bibliothek
- Rückschritt
- Lineare Regression
- Logistische Regression
- Softmax-Regression
- Exponentielle Regression
- Probit-Regression
- CLogLog-Regression
- Tanh-Regression
- Tiefe, dynamisch dimensionierte neuronale Netze
- Mögliche Aktivierungsfunktionen
- Linear
- Sigmoid
- Softmax
- Swish
- Misch
- SinC
- Softplus
- Softsign
- CLogLog
- Logit
- Gaußsche CDF
- RELU
- GELU
- Zeichen
- Einheitsschritt
- Sinh
- Cosh
- Tanh
- Csch
- Sek
- Coth
- Arsinh
- Arcosh
- Artanh
- Arcsch
- Arsch
- Arcoth
- Mögliche Optimierungsalgorithmen
- Batch-Gradientenabstieg
- Mini-Batch-Gradientenabstieg
- Stochastischer Gradientenabstieg
- Gradientenabstieg mit Schwung
- Nesterov beschleunigter Gradient
- Adagrad-Optimierer
- Adadelta-Optimierer
- Adam Optimierer
- Adamax-Optimierer
- Nadam Optimierer
- AMSGrad-Optimierer
- Newton-Raphson-Optimierer 2. Ordnung*
- Normale Gleichung*
*Nur verfügbar für lineare Regression - Mögliche Verlustfunktionen
- MSE
- RMSE
- MAE
- MBE
- Protokollverlust
- Kreuzentropie
- Scharnierverlust
- Wasserstein-Verlust
- Mögliche Regularisierungsmethoden
- Lasso
- Grat
- ElasticNet
- Gewichtsreduzierung
- Mögliche Methoden zur Gewichtsinitialisierung
- Uniform
- Xavier Normal
- Xavier-Uniform
- Er ist normal
- Er Uniform
- LeCun Normal
- LeCun-Uniform
- Mögliche Lernratenplaner
- Zeitbasiert
- Epochenbasiert
- Schrittbasiert
- Exponentiell
- Vorgefertigte neuronale Netze
- Mehrschichtiges Pezeptron
- Autoencoder
- Softmax-Netzwerk
- Generative Modellierung
- Tabellarische generative gegnerische Netzwerke
- Tabellarische generative gegnerische Wasserstein-Netzwerke
- Verarbeitung natürlicher Sprache
- Word2Vec (Kontinuierlicher Wortschatz, Skip-Gram)
- Stemmen
- Beutel voller Wörter
- TFIDF
- Tokenisierung
- Hilfsfunktionen zur Textverarbeitung
- Computer Vision
- Die Faltungsoperation
- Max., Min., Durchschnittliches Pooling
- Globales Max., Min. und durchschnittliches Pooling
- Vorgefertigte Feature-Detektoren
- Horizontaler/vertikaler Prewitt-Filter
- Horizontaler/vertikaler Sobel-Filter
- Horizontaler/vertikaler Scharr-Filter
- Horizontaler/vertikaler Roberts-Filter
- Gaußscher Filter
- Harris-Eckendetektor
- Hauptkomponentenanalyse
- Naive Bayes-Klassifikatoren
- Multinomiale Naive Bayes
- Bernoulli Naive Bayes
- Gaußscher naiver Bayes
- Unterstützt die Vektorklassifizierung
- Urformulierung (Scharnierverlust-Ziel)
- Duale Formulierung (über Lagrange-Multiplikatoren)
- K-Mittel
- k-Nächste Nachbarn
- Ausreißer-Finder (mit Z-Scores)
- Matrixzerlegungen
- SVD-Zerlegung
- Cholesky-Zerlegung
- Positiver Definitheitsprüfer
- QR-Zerlegung
- Numerische Analyse
- Numerische Differenzierung
- Univariate Funktionen
- Multivariate Funktionen
- Jacobi-Vektorrechner
- Hessischer Matrixrechner
- Funktions-Approximator
- Ständige Annäherung
- Lineare Näherung
- Quadratische Näherung
- Kubische Näherung
- Differentialgleichungslöser
- Eulers Methode
- Wachstumsmethode
- Mathematische Transformationen
- Diskrete Kosinustransformation
- Lineares Algebra-Modul
- Statistikmodul
- Datenverarbeitungsmodul
- Datensätze festlegen und drucken
- Verfügbare Datensätze
- Wisconsin-Brustkrebs-Datensatz
- MNIST-Datensatz
- Irisblüten-Datensatz
- Weindatensatz
- Kalifornischer Wohnungsdatensatz
- Datensatz zu Bränden und Kriminalität (Chicago)
- Funktionsskalierung
- Mittlere Normalisierung
- Eine heiße Darstellung
- Reverse One Hot-Darstellung
- Unterstützte Farbraumkonvertierungen
- RGB zu Graustufen
- RGB zu HSV
- RGB zu YCbCr
- RGB zu XYZ
- XYZ zu RGB
- Dienstprogramme
- TP-, FP-, TN-, FN-Funktion
- Präzision
- Abrufen
- Genauigkeit
- F1-Ergebnis
Was ist in Arbeit?
ML++ ist, wie die meisten Frameworks, dynamisch und verändert sich ständig. Dies ist besonders wichtig in der Welt des ML, da Tag für Tag neue Algorithmen und Techniken entwickelt werden. Hier sind ein paar Dinge, die derzeit für ML++ entwickelt werden:
- Faltungs-Neuronale Netze
- Kernel für SVMs
- Unterstützung der Vektorregression
Zitate
Verschiedene Materialien haben mir bei der Erstellung von ML++ geholfen, und einige davon möchte ich hier würdigen. Dieser Artikel von TutorialsPoint war eine große Hilfe beim Versuch, die Determinante einer Matrix zu implementieren, und dieser Artikel von GeeksForGeeks war sehr hilfreich beim Versuch, den Adjunkten und den Inversen einer Matrix zu ermitteln.