Rückblick: Scikit-Learn glänzt für einfacheres maschinelles Lernen

Scikits sind Python-basierte wissenschaftliche Toolboxen, die auf SciPy, der Python-Bibliothek für wissenschaftliches Rechnen, basieren. Scikit-learn ist ein Open-Source-Projekt, das sich auf maschinelles Lernen konzentriert: Klassifizierung, Regression, Clustering, Reduzierung der Dimensionalität, Modellauswahl und Vorverarbeitung. Es ist ein ziemlich konservatives Projekt, bei dem es aus Gründen der Wartbarkeit und der begrenzten Entwicklerressourcen sehr vorsichtig ist, das Scope Creep zu vermeiden und auf unbewiesene Algorithmen zuzugreifen. Auf der anderen Seite bietet es eine schöne Auswahl an soliden Algorithmen und verwendet Cython (den Python-to-C-Compiler) für Funktionen, die schnell sein müssen, wie z. B. innere Schleifen.

Zu den Bereichen, die Scikit-learn nicht abdeckt, gehören Deep Learning, Enforcement Learning, grafische Modelle und Sequenzvorhersage. Es ist als in und für Python definiert, daher gibt es keine APIs für andere Sprachen. Scikit-learn unterstützt PyPy nicht, die schnelle Just-in-Time-Kompilierung der Python-Implementierung, da die Abhängigkeiten NumPy und SciPy PyPy nicht vollständig unterstützen.

Scikit-learn unterstützt die GPU-Beschleunigung aus mehreren Gründen nicht, die mit der Komplexität und den damit verbundenen Maschinenabhängigkeiten zusammenhängen. Abgesehen von neuronalen Netzen benötigt Scikit-learn wenig GPU-Beschleunigung.

Scikit-Lernfunktionen

Wie bereits erwähnt, bietet Scikit-learn eine gute Auswahl an Algorithmen für Klassifizierung, Regression, Clustering, Dimensionsreduktion, Modellauswahl und Vorverarbeitung. In dem Klassifizierungsbereich, in dem die Kategorie identifiziert wird, zu der ein Objekt gehört, und der als überwachtes Lernen bezeichnet wird, werden Support Vector Machines (SVM), nächste Nachbarn, logistische Regression, zufällige Gesamtstruktur, Entscheidungsbäume usw. implementiert ein mehrstufiges neuronales Perzeptron (MLP) -Netzwerk.

Die Implementierung von MLP durch Scikit-learn ist jedoch ausdrücklich nicht für Großanwendungen vorgesehen. Informationen zu umfangreichen GPU-basierten Implementierungen und zum Deep Learning finden Sie in den zahlreichen verwandten Projekten von Scikit-learn, zu denen Python-freundliche Deep-Neural-Network-Frameworks wie Keras und Theano gehören.

Für die Regression, bei der ein Attribut mit kontinuierlichem Wert vorhergesagt wird, das einem Objekt zugeordnet ist (z. B. der Kurs einer Aktie), unterstützt Scikit-learn die Vektorregression (SVR), die Gratregression, Lasso, das elastische Netz und die Regression des kleinsten Winkels (LARS) ), Bayesianische Regression, verschiedene Arten robuster Regression und so weiter. Das ist eigentlich eine größere Auswahl an Regressionsalgorithmen, als die meisten Analysten vielleicht wollen, aber es gibt gute Anwendungsfälle für jeden, der aufgenommen wurde.

Für das Clustering, eine unbeaufsichtigte Lerntechnik, bei der ähnliche Objekte automatisch in Mengen gruppiert werden, verfügt Scikit-learn über k-Mittelwerte, spektrale Clusterbildung, Mittelwertverschiebung, hierarchisches Clustering, DBSCAN und einige andere Algorithmen. Auch hier wurde die Bandbreite konservativer Algorithmen berücksichtigt.

Bei der Dimensionsreduzierung geht es darum, die Anzahl der zu berücksichtigenden Zufallsvariablen zu verringern, indem Zerlegungstechniken wie Hauptkomponentenanalyse (PCA) und nicht negative Matrixfaktorisierung (NMF) oder Merkmalsauswahltechniken verwendet werden. Bei der Modellauswahl geht es um das Vergleichen, Validieren und Auswählen von Parametern und Modellen. Dabei werden Algorithmen wie Rastersuche, Kreuzvalidierung und Metrikfunktionen verwendet. Für beide Bereiche enthält Scikit-learn alle bewährten Algorithmen und Methoden in leicht zugänglichen APIs.

Die Vorverarbeitung, bei der Merkmale extrahiert und normalisiert werden, ist einer der ersten und wichtigsten Teile des maschinellen Lernprozesses. Die Normalisierung wandelt Merkmale in neue Variablen um, häufig mit einem Mittelwert von Null und einer Einheitsvarianz, manchmal jedoch zwischen einem bestimmten Minimal- und Maximalwert, häufig 0 und 1. Durch die Merkmalsextraktion werden Text oder Bilder in Zahlen umgewandelt, die für maschinelles Lernen verwendet werden können. Auch hier serviert Scikit-learn alle leckeren klassischen Gerichte, die Sie in diesem Smorgasbord erwarten würden. Es steht Ihnen frei, diejenigen zu sammeln, die Sie ansprechen.

Beachten Sie, dass Feature Extraktion von Funktion ist ganz anders Auswahl bereits erwähnte unter Dimensionsreduktion. Die Merkmalsauswahl ist eine Möglichkeit, das Lernen zu verbessern, indem nicht unterschiedliche, kovariante oder auf andere Weise statistisch unwichtige Merkmale entfernt werden.

Kurz gesagt, Scikit-learn enthält eine vollständige Reihe von Algorithmen und Methoden zur Dimensionsreduzierung, Modellauswahl, Merkmalsextraktion und Normalisierung, obwohl es keinen geführten Workflow gibt, um diese zu erreichen, außer einer guten Sammlung von Beispielen und einer guten Dokumentation.

Scikit-learn installieren und ausführen

Meine Installation von Scikit-learn war möglicherweise die einfachste Installation eines Frameworks für maschinelles Lernen, die ich je hatte. Da ich bereits alle Voraussetzungen installiert und ausreichend aktuell hatte (Python, Numpy und Scipy), war ein Befehl erforderlich:

 $ sudo pip install -U scikit-learn

OK, ich brauchte zwei Befehle, weil ich das erste Mal vergessen habe sudo.

Das hat mich dazu gebracht, Scikit-0.18.1 zu lernen. Zu guter Letzt habe ich auch das GitHub-Repository überprüft, das Nasentest-Framework installiert und die Entwicklungsversion von Scikit-learn from source erstellt, die so einfach war, wie zum Stammverzeichnis des Repositorys zu wechseln und zu tippen make. Es dauerte eine Weile, bis Python kompiliert, alle C-Dateien generiert und kompiliert, die Assembly verknüpft und alle Tests ausgeführt wurden, ohne dass ein Eingriff erforderlich war.

Es war auch sehr einfach, mein erstes Scikit-Lernbeispiel auszuführen. Auf der Seite mit den allgemeinen Beispielen habe ich in das Beispiel geklickt, um kreuzvalidierte Vorhersagen zu zeichnen, das Notizbuch durchgelesen, den Python-Quellcode und das Jupyter-Notizbuch heruntergeladen und ausgeführt. Die Python-Quelle tuckerte einige Sekunden lang, erzeugte einige Warnmeldungen und öffnete ein Diagramm. Das Jupyter-Notizbuch hat im Wesentlichen dasselbe getan, als ich es interaktiv ausgeführt habe, wie Sie in der folgenden Abbildung sehen können.

Scikit-learn erhält die besten Noten für die einfache Entwicklung unter allen von mir getesteten Frameworks für maschinelles Lernen, hauptsächlich weil die Algorithmen wie angekündigt und dokumentiert funktionieren, die APIs konsistent und gut gestaltet sind und es nur wenige „Impedanzfehlanpassungen“ gibt Datenstrukturen. Es ist eine Freude, mit einer Bibliothek zu arbeiten, in der Funktionen gründlich ausgearbeitet und Fehler gründlich beseitigt wurden.

Scikit lernen

Die Scikit-Lerndokumentation ist gut und es gibt viele Beispiele - insgesamt etwa 200. Die meisten Beispiele enthalten mindestens ein Diagramm, das aus den mit Matplotlib analysierten Daten erstellt wurde. All dies trägt zur einfachen Entwicklung und zum einfachen Lernen der Bibliothek bei.

Es gibt ein langes Tutorial, "Ein Tutorial zum statistischen Lernen für die wissenschaftliche Datenverarbeitung", das fünf Abschnitte und einen Anhang zum Finden von Hilfe enthält. Das Tutorial ist ziemlich gut darin, sowohl die grundlegenden Konzepte zu behandeln als auch Beispiele anhand tatsächlicher Daten, Codes und Grafiken zu zeigen. Es werden auch Beispiele für den Text genannt - zum Beispiel der Vergleich von vier verschiedenen SVM-Klassifikatoren, die in der folgenden Abbildung dargestellt sind.

Die Beispiele, die ich durchgearbeitet habe, waren alle auf ihren Webseiten ziemlich klar. In vielen Fällen wurden beim Herunterladen und Ausführen der Beispiele Warnungen ausgegeben, die nicht auf der Webseite angezeigt wurden, aber immer die gleichen Ergebnisse lieferten. Die erste Abbildung oben, die meine Jupyter-Notebook-Ausgabe zum Zeichnen kreuzvalidierter Vorhersagen zeigt, ist ein gutes Beispiel.

Ich schreibe die meisten Warnungen auf Fehler im Apple vecLib-Framework und auf die Entwicklung in den Python-Bibliotheken zurück. Einige scheinen Warnungen in Python 2.7.10 zu sein, die in der für die Webseite verwendeten Version nicht vorhanden waren. Die folgende Abbildung enthält eine solche Warnung. die entsprechende Webseite nicht.

Als Python-Bibliothek für maschinelles Lernen mit bewusst begrenztem Umfang ist Scikit-learn sehr gut. Es verfügt über eine breite Palette etablierter Algorithmen mit integrierter Grafik. Es ist relativ einfach zu installieren, zu erlernen und zu verwenden und enthält gute Beispiele und Tutorials.

Auf der anderen Seite deckt Scikit-learn kein tiefes Lernen oder verstärkendes Lernen ab, wodurch die aktuellen schwierigen, aber wichtigen Probleme wie genaue Bildklassifizierung und zuverlässige Analyse und Übersetzung von Sprachen in Echtzeit weggelassen werden. Darüber hinaus enthält es keine grafischen Modelle oder Sequenzvorhersagen, kann nicht wirklich aus anderen Sprachen als Python verwendet werden und unterstützt weder PyPy noch GPUs.

Die Leistung, die Scikit-learn für maschinelles Lernen außer neuronalen Netzen erzielt, ist auch ohne die Beschleunigung von PyPy oder GPUs ziemlich gut. Python ist oft schneller als man es von einem Interpreter erwartet, und die Verwendung von Cython zum Generieren von C-Code für innere Schleifen beseitigt die meisten Engpässe in Scikit-learn.

Wenn Sie an tiefem Lernen interessiert sind, sollten Sie sich natürlich anderswo umsehen. Dennoch gibt es viele Probleme - angefangen beim Aufbau einer Vorhersagefunktion, die verschiedene Beobachtungen verknüpft, die Klassifizierung von Beobachtungen bis hin zum Erlernen der Struktur in einem unbeschrifteten Datensatz -, die sich für einfaches altes maschinelles Lernen eignen, ohne Dutzende von Neuronenschichten zu benötigen, und für diese Bereiche Scikit -Lernen ist sehr gut.

Wenn Sie ein Python-Fan sind, ist Scikit-learn möglicherweise die beste Option unter den einfachen Bibliotheken für maschinelles Lernen. Wenn Sie Scala bevorzugen, ist Spark ML möglicherweise die bessere Wahl. Wenn Sie Ihre Lernpipelines gerne durch Zeichnen von Diagrammen und gelegentliches Schreiben eines Ausschnitts aus Python oder R entwerfen möchten, passt die Microsoft Cortana Analytics Suite - insbesondere das Azure Machine Learning Studio - möglicherweise gut zu Ihren Vorlieben.

--- ---.

Kosten: Kostenloses Open Source. Plattform: Benötigt Python, NumPy, SciPy und Matplotlib. Releases sind für MacOS, Linux und Windows verfügbar.

Scorecard Modelle und Algorithmen (25%) Einfache Entwicklung (25%) Dokumentation (20%) Leistung (20%) Einfache Bereitstellung (10%) Gesamtpunktzahl (100%)
Scikit-learn 0.18.1 9 9 9 8 9 8.8