Python-Software für maschinelles Lernen



Heute gibt es eine Vielzahl von Softwaretools zum Erstellen von Modellen für maschinelles Lernen. Die ersten derartigen Tools wurden von Wissenschaftlern und Statistikern entwickelt, in denen die Sprachen R und Python beliebte, historisch entwickelte Ökosysteme für die Verarbeitung, Analyse und Visualisierung von Daten in diesen Sprachen sind, obwohl es bestimmte Bibliotheken für maschinelles Lernen für Java, Lua, C ++ gibt. Darüber hinaus sind die interpretierten Programmiersprachen viel langsamer als die kompilierten, daher werden die Datenaufbereitung und die Struktur der Modelle in der interpretierten Sprache beschrieben und die Hauptberechnungen in der kompilierten Sprache durchgeführt.

In diesem Beitrag werden wir hauptsächlich über Bibliotheken sprechen, die in Python implementiert sind, da diese Sprache eine große Anzahl von Paketen zur Integration in verschiedene Dienste und Systeme sowie zum Schreiben verschiedener Informationssysteme enthält. Das Material enthält eine allgemeine Beschreibung bekannter Bibliotheken und ist vor allem für diejenigen nützlich, die mit dem Studium der ML beginnen und grob verstehen möchten, wo nach Implementierungen bestimmter Methoden gesucht werden muss.

Bei der Auswahl bestimmter Pakete zur Lösung von Problemen müssen Sie zunächst entscheiden, ob sie über einen Mechanismus zur Lösung Ihrer Probleme verfügen. So müssen Sie sich beispielsweise für die Bildanalyse höchstwahrscheinlich mit neuronalen Netzen und für die Arbeit mit Text befassen - bei wiederkehrenden Netzen mit einer geringen Datenmenge müssen neuronale Netze wahrscheinlich aufgegeben werden.

Allzweckbibliotheken in Python


Alle in diesem Abschnitt beschriebenen Pakete werden verwendet, um fast jede maschinelle Lernaufgabe zu lösen. Oft reichen sie aus, um zumindest in erster Näherung das gesamte Modell zu erstellen.

Numpy


Eine Open-Source-Bibliothek zur Durchführung linearer Algebraoperationen und numerischer Transformationen. Solche Operationen sind in der Regel erforderlich, um Datensätze zu konvertieren, die als Matrix dargestellt werden können. Die Bibliothek hat eine große Anzahl von Operationen für die Arbeit mit mehrdimensionalen Arrays, Fourier-Transformationen und Zufallszahlengeneratoren implementiert. Numpy-Speicherformate sind de facto der Standard zum Speichern numerischer Daten in vielen anderen Bibliotheken (z. B. Pandas, Scikit-learn, SciPy).

Website : www.numpy.org

Pandas


Bibliothek zur Datenverarbeitung. Mit seiner Hilfe können Sie Daten aus nahezu jeder Quelle herunterladen (Integration in die wichtigsten Datenspeicherformate für maschinelles Lernen), verschiedene Funktionen berechnen und neue Parameter erstellen sowie Datenabfragen mit in SQL implementierten Aggregatfunktionen erstellen. Darüber hinaus gibt es eine Vielzahl von Matrixtransformationsfunktionen, eine Schiebefenstermethode und andere Methoden zum Abrufen von Informationen aus Daten.

Website : pandas.pydata.org

Scikit-lernen


Eine Softwarebibliothek mit mehr als einem Jahrzehnt Geschichte enthält Implementierungen fast aller möglichen Transformationen, und oft reicht es aus, das Modell vollständig zu implementieren. In der Regel sind beim Programmieren fast aller Modelle in Python immer einige Transformationen mit dieser Bibliothek vorhanden.
Scikit-learn enthält Methoden zum Aufteilen eines Datensatzes in Test und Training, zum Berechnen grundlegender Metriken über Datensätze und zum Durchführen einer Kreuzvalidierung. Die Bibliothek verfügt auch über die grundlegenden Algorithmen des maschinellen Lernens: lineare Regression (und ihre Modifikationen von Lasso, Ridge-Regression), Unterstützungsvektoren, Entscheidungsbäume und Wälder usw. Es gibt auch Implementierungen der wichtigsten Clustering-Methoden. Darüber hinaus enthält die Bibliothek Methoden, die von Forschern ständig zum Arbeiten mit Parametern (Merkmalen) verwendet werden: Zum Beispiel das Verringern der Dimension mithilfe der Hauptkomponentenmethode. Die imblearn-Bibliothek ist Teil des Pakets, mit dem Sie mit unausgeglichenen Samples arbeiten und neue Werte generieren können.

Website : www.scikit-learn.org

Scipy


Eine ziemlich umfangreiche Bibliothek für Forschungszwecke. Es enthält eine Vielzahl von Funktionen aus der mathematischen Analyse, einschließlich der Berechnung von Integralen, der Suche nach Maximum und Minimum sowie Funktionen zur Verarbeitung von Signalen und Bildern. In vielerlei Hinsicht kann diese Bibliothek als Analogon zum MATLAB-Paket für Entwickler in der Python-Sprache angesehen werden. Mit seiner Hilfe können Sie Gleichungssysteme lösen, genetische Algorithmen verwenden und viele Optimierungsaufgaben ausführen.

Website : www.scipy.org

Spezifische Bibliotheken


In diesem Abschnitt werden Bibliotheken betrachtet, die entweder einen bestimmten Anwendungsbereich haben oder bei einer begrenzten Anzahl von Benutzern beliebt sind.

Tensorflow


Eine von Google für die Arbeit mit Tensoren entwickelte Bibliothek wird zum Aufbau neuronaler Netze verwendet. Die Unterstützung für das Rechnen auf Grafikkarten hat eine Version für die C ++ - Sprache. Basierend auf dieser Bibliothek werden übergeordnete Bibliotheken für die Arbeit mit neuronalen Netzen auf der Ebene ganzer Schichten erstellt. Vor einiger Zeit begann die beliebte Keras-Bibliothek, Tensorflow anstelle der ähnlichen Theano-Bibliothek als Haupt-Backend für Berechnungen zu verwenden. Die cuDNN-Bibliothek wird für die Arbeit mit NVIDIA-Grafikkarten verwendet. Wenn Sie mit Bildern (mit Faltungs-Neuronalen Netzen) arbeiten, müssen Sie diese Bibliothek höchstwahrscheinlich verwenden.

Website : www.tensorflow.org

Keras


Eine Bibliothek zum Aufbau neuronaler Netze, die die Haupttypen von Schichten und Strukturelementen unterstützt. Es unterstützt sowohl wiederkehrende als auch Faltungs-Neuronale Netze und beinhaltet die Implementierung bekannter neuronaler Netzwerkarchitekturen (z. B. VGG16). Vor einiger Zeit wurden Ebenen aus dieser Bibliothek in der Tensorflow-Bibliothek verfügbar. Es gibt vorgefertigte Funktionen zum Arbeiten mit Bildern und Text (Einbetten von Wörtern usw.). Integriert in Apache Spark mithilfe der Distribution von dist-keras.

Website : www.keras.io

Caffe


Ein Rahmen für das Training neuronaler Netze der University of Berkeley. Wie TensorFlow verwendet es cuDNN, um mit NVIDIA-Grafikkarten zu arbeiten. Es enthält die Implementierung bekannter neuronaler Netze, eines der ersten in Apache Spark (CaffeOnSpark) integrierten Frameworks.

Website : cafee.berkeleyvision.org

pyTorch


Ermöglicht das Portieren der Torch-Bibliothek für die Lua-Sprache in die Python-Sprache. Es enthält Implementierungen von Algorithmen für die Arbeit mit Bildern, statistische Operationen und Werkzeuge für die Arbeit mit neuronalen Netzen. Separat können Sie eine Reihe von Werkzeugen für Optimierungsalgorithmen erstellen (insbesondere stochastischen Gradientenabstieg).

Website : www.torch.ch

Gradient Boost-Implementierungen über Entscheidungsbäume


Solche Algorithmen verursachen ausnahmslos ein erhöhtes Interesse, da sie häufig bessere Ergebnisse zeigen als neuronale Netze. Dies gilt insbesondere dann, wenn Sie keine sehr großen Datenmengen haben (eine sehr grobe Schätzung: Tausende und Zehntausende, aber nicht Zehntausende). Unter den Gewinnermodellen auf der Kaggle-Wettbewerbsplattform sind Gradientenverstärkungsalgorithmen über Entscheidungsbäumen weit verbreitet.
Implementierungen solcher Algorithmen befinden sich in der Regel in breit angelegten Bibliotheken für maschinelles Lernen (z. B. in Scikit-learn). Es gibt jedoch spezielle Implementierungen dieses Algorithmus, die häufig unter den Gewinnern verschiedener Wettbewerbe zu finden sind. Es lohnt sich, Folgendes hervorzuheben.

Xgboost


Die häufigste Implementierung der Gradientenverstärkung. Nachdem es 2014 erschienen war, hatte es bis 2016 bereits beträchtliche Popularität erlangt. Sortierung und Modelle basierend auf der Histogrammanalyse werden verwendet, um die Partition auszuwählen.

Website : github.com/dmlc/xgboost

Lightgbm


Gradient Boost-Option von Microsoft, veröffentlicht im Jahr 2017. Gradient-basiertes One-Side-Sampling (GOSS) wird verwendet, um das Partitionierungskriterium auszuwählen. Es gibt Methoden zum Arbeiten mit kategorialen Attributen, d. H. mit Zeichen, die nicht explizit durch eine Nummer ausgedrückt werden (z. B. den Namen des Autors oder die Marke des Autos). Es ist Teil des Microsoft DMTK-Projekts zur Implementierung von Ansätzen für maschinelles Lernen für .Net.

Website : www.dmtk.io.

Catboost


Die Entwicklung von Yandex, das wie LightGBM im Jahr 2017 veröffentlicht wurde, implementiert einen speziellen Ansatz für die Verarbeitung kategorialer Merkmale (basierend auf der Zielcodierung, d. H. Ersetzen kategorialer Merkmale durch Statistiken basierend auf dem vorhergesagten Wert). Darüber hinaus enthält der Algorithmus einen speziellen Ansatz für die Konstruktion des Baums, der die besten Ergebnisse zeigte. Unser Vergleich hat gezeigt, dass dieser Algorithmus besser funktioniert als andere direkt nach dem Auspacken. ohne irgendwelche Parameter einzustellen.

Website : catboost.yandex

Microsoft Cognitive Toolkit (CNTK)


Das Framework der Microsoft Corporation verfügt über eine C ++ - Schnittstelle. Bietet Implementierung verschiedener neuronaler Netzwerkarchitekturen. Es kann eine interessante Integration mit .Net sein.

Website : www.microsoft.com/en-us/cognitive-toolkit

Andere Entwicklungsressourcen


Mit zunehmender Beliebtheit des maschinellen Lernens haben Projekte wiederholt die Entwicklung vereinfacht und mit Online-Zugriff in grafische Form gebracht. In diesem Bereich können mehrere notiert werden.

Azure ML


Maschineller Lerndienst auf der Microsoft Azure-Plattform, mit dem Sie die Datenverarbeitung in Form von Diagrammen erstellen und Berechnungen auf Remoteservern durchführen können, wobei Python-Code und andere eingeschlossen werden können.

Website: azure.microsoft.com/ru-ru/services/machine-learning-studio

IBM DataScience-Erfahrung (IBM DSX)


Ein Dienst für die Arbeit in der Jupyter Notebook-Umgebung mit der Fähigkeit, Berechnungen in Python und anderen durchzuführen. Unterstützt die Integration mit bekannten Datasets und Spark, einem IBM Watson-Projekt.

Website : ibm.com/cloud/watson-studio

Sozialwissenschaftliche Pakete


Darunter befindet sich das IBM Statistical Package für die Sozialwissenschaften (SPSS), ein IBM Softwareprodukt zur Verarbeitung von Statistiken in den Sozialwissenschaften, das eine grafische Oberfläche zum Festlegen des Datenverarbeitungsprozesses unterstützt. Vor einiger Zeit wurde es möglich, Algorithmen für maschinelles Lernen in die gesamte Ausführungsstruktur einzubetten. Im Allgemeinen wird die eingeschränkte Unterstützung von Algorithmen für maschinelles Lernen unter Statistikpaketen, die bereits statistische Funktionen und Visualisierungsmethoden enthalten (z. B. Tableau und SAS), immer beliebter.

Fazit


Die Wahl des Softwarepakets, auf dessen Grundlage die Aufgabe gelöst wird, wird normalerweise durch die folgenden Bedingungen bestimmt.

  1. Die Umgebung, in der das Modell verwendet wird: ob Spark-Unterstützung benötigt wird, welche Services integriert werden müssen.
  2. Datenfunktionen. Was sind die Daten: Bild, Text oder eine Reihe von Zahlen, welche Art von Verarbeitung benötigen sie?
  3. Die Veranlagung von Modellen für diese Art von Aufgabe. Daten aus Bildern werden normalerweise von Faltungs-Neuronalen Netzen verarbeitet, und Algorithmen, die auf Entscheidungsbäumen basieren, werden für kleine Datensätze verwendet.
  4. Einschränkungen der Rechenleistung sowohl im Training als auch im Einsatz.

In der Regel kann bei der Entwicklung in Python die Verwendung von Allzweckbibliotheken (Pandas, Scikit-learn, numPy) nicht vermieden werden. Dies führte dazu, dass ihre Schnittstelle die meisten spezialisierten Bibliotheken unterstützt. Wenn dies jedoch nicht der Fall ist, müssen Sie verstehen, dass Sie selbst Konnektoren schreiben oder eine andere Bibliothek auswählen müssen.

Sie können das erste Modell mit einer relativ kleinen Anzahl von Bibliotheken erstellen und dann entscheiden, wofür Sie Zeit aufwenden möchten: Parameter entwickeln (Feature-Engineering) oder die optimale Bibliothek und den optimalen Algorithmus auswählen oder diese Aufgaben parallel ausführen.

Nun ein wenig zu den Empfehlungen zur Auswahl. Wenn Sie einen Algorithmus benötigen, der sofort am besten funktioniert, ist dies Catboost. Wenn Sie mit Bildern arbeiten möchten, können Sie Keras und Tensorflow oder Caffe verwenden. Wenn Sie mit Text arbeiten, müssen Sie entscheiden, ob Sie ein neuronales Netzwerk aufbauen und den Kontext berücksichtigen möchten. Wenn ja, die gleichen Wünsche wie für die Bilder, wenn eine "Tasche von Wörtern" (Frequenzcharakteristika des Auftretens jedes Wortes) ausreicht, sind Gradientenverstärkungsalgorithmen geeignet. Bei kleinen Datenmengen können Sie die Algorithmen zum Generieren neuer Daten aus Scikit-Learn- und linearen Methoden verwenden, die in derselben Bibliothek implementiert sind.

In der Regel reichen die beschriebenen Bibliotheken aus, um die meisten Probleme zu lösen und sogar Wettbewerbe zu gewinnen. Das Feld des maschinellen Lernens entwickelt sich sehr schnell - wir sind sicher, dass bereits zum Zeitpunkt des Schreibens dieses Beitrags neue Frameworks erschienen sind.

Nikolay Knyazev, Leiter der maschinellen Lerngruppe von Jet Infosystems

Source: https://habr.com/ru/post/de415997/


All Articles