Praktische Lösungen mit Python: von der Vorverarbeitung der Daten bis zum Deep Learning
E-Book, Deutsch, 368 Seiten
ISBN: 978-3-96010-307-3
Verlag: O'Reilly
Format: EPUB
Kopierschutz: 6 - ePub Watermark
Entwickler, die mit Python und seinen Bibliotheken einschließlich Pandas und Scikit-Learn vertraut sind, werden spezifische Probleme erfolgreich bewältigen – wie etwa Daten laden, Text und numerische Daten behandeln, Modelle auswählen, Dimensionalität reduzieren und vieles mehr.
Jedes Rezept enthält Code, den Sie kopieren, zum Testen in eine kleine Beispieldatenmenge einfügen und dann anpassen können, um Ihre eigenen Anwendungen zu konstruieren. Darüber hinaus werden alle Lösungen diskutiert und wichtige Zusammenhänge hergestellt. Dieses Kochbuch unterstützt Sie dabei, den Schritt von der Theorie und den Konzepten hinein in die Praxis zu machen. Es liefert das praktische Rüstzeug, das Sie benötigen, um funktionierende Machine-Learning-Anwendungen zu entwickeln.
In diesem Kochbuch finden Sie Rezepte für:
- Vektoren, Matrizen und Arrays
- den Umgang mit numerischen und kategorischen Daten, Texten, Bildern sowie Datum und Uhrzeit
- das Reduzieren der Dimensionalität durch Merkmalsextraktion oder Merkmalsauswahl
- Modellbewertung und -auswahl
- lineare und logistische Regression, Bäume und Wälder und k-nächste Nachbarn
- Support Vector Machine (SVM), naive Bayes, Clustering und neuronale Netze
- das Speichern und Laden von trainierten Modellen
Weitere Infos & Material
KAPITEL 1
Vektoren, Matrizen und Arrays
1.0Einführung
Die Programmbibliothek NumPy bildet die Grundlage des Python-Stapels für maschinelles Lernen (auch als SciPy-Stapel bezeichnet). NumPy erlaubt effiziente Operationen auf Datenstrukturen, die in Projekten des maschinellen Lernens häufig vorkommen: Vektoren, Matrizen und Tensoren. Auch wenn NumPy nicht im Mittelpunkt dieses Buchs steht, werden Sie in den folgenden Kapiteln häufig auf diese Bibliothek stoßen. Dieses Kapitel behandelt die gebräuchlichsten NumPy-Operationen, mit denen Sie es in Workflows des maschinellen Lernens höchstwahrscheinlich zu tun haben werden. 1.1Einen Vektor erzeugen
Problem Sie müssen einen Vektor erzeugen. Lösung Verwenden Sie NumPy, um ein eindimensionales Array anzulegen: # Bibliothek laden import numpy as np # Einen Vektor als Zeile erstellen vector_row = np.array([1, 2, 3]) # Einen Vektor als Spalte erstellen vector_column = np.array([[1], [2], [3]]) Diskussion Die Hauptdatenstruktur von NumPy ist das mehrdimensionale Array. Um einen Vektor zu erzeugen, legen wir einfach ein eindimensionales Array an. Vektoren lassen sich genau wie Arrays horizontal (d.h. als Zeilen) oder vertikal (d.h. als Spalten) darstellen. Siehe auch Vectors, Math Is Fun (http://bit.ly/2FB5q1v) Euclidean vector, Wikipedia (http://bit.ly/2FtnRoL, https://de.wikipedia.org/wiki/Vektor) 1.2Eine Matrix erstellen
Problem Es muss eine Matrix erstellt werden. Lösung Verwenden Sie NumPy, um ein zweidimensionales Array einzurichten: # Bibliothek laden import numpy as np # Eine Matrix erstellen matrix = np.array([[1, 2], [1, 2], [1, 2]]) Diskussion Eine Matrix können Sie mit einem zweidimensionalen NumPy-Array erstellen. In der angegebenen Lösung enthält die Matrix drei Zeilen und zwei Spalten (eine Spalte mit Einsen und eine Spalte mit Zweien). Die Bibliothek NumPy bringt aber auch eine dedizierte matrix-Datenstruktur mit: matrix_object = np.mat([[1, 2], [1, 2], [1, 2]]) matrix([[1, 2], [1, 2], [1, 2]]) Die matrix-Datenstruktur empfiehlt sich allerdings aus zwei Gründen nicht. Erstens stellen Arrays die De-facto-Standarddatenstruktur von NumPy dar, und zweitens gibt die große Mehrheit der NumPy-Operationen Arrays zurück und keine matrix-Objekte. Siehe auch Matrix, Wikipedia (http://bit.ly/2Ftnevp) Matrix, Wolfram MathWorld (http://bit.ly/2Fut7IJ) 1.3Eine dünn besetzte Matrix erzeugen
Problem Sie möchten Daten mit wenigen Werten ungleich null effizient darstellen. Lösung Erstellen Sie eine dünn besetzte Matrix: # Bibliotheken laden import numpy as np from scipy import sparse # Eine Matrix erstellen matrix = np.array([[0, 0], [0, 1], [3, 0]]) # CSR-Matrix erzeugen matrix_sparse = sparse.csr_matrix(matrix) Diskussion Beim maschinellen Lernen kommt es häufig vor, dass riesige Datenmengen anfallen, in denen aber die meisten Datenelemente den Wert null besitzen. Stellen Sie sich zum Beispiel eine Matrix vor, bei der jeder Spalte ein Netflix-Movie und jeder Zeile ein Benutzer zugeordnet ist. Die Werte der Matrix geben an, wie oft ein Benutzer das jeweilige Movie angesehen hat. Diese Matrix würde aus Zehntausenden von Spalten und Millionen von Zeilen bestehen! Da jedoch die meisten Benutzer nur einen Bruchteil der Filme anschauen, würde die überwiegende Mehrheit der Elemente den Wert null besitzen. Dünn besetzte Matrizen hingegen speichern nur Elemente ungleich null und nehmen an, dass alle anderen Werte null sind, was zu beträchtlichen Einsparungen an Rechenaufwand führt. In unserer Lösung haben wir ein NumPy-Array mit zwei Werten ungleich null erzeugt und es dann in eine dünn besetzte Matrix konvertiert. Wenn wir die dünn besetzte Matrix anzeigen, ist zu erkennen, dass nur die Werte ungleich null gespeichert werden: # Dünn besetzte Matrix anzeigen print(matrix_sparse) (1, 1) 1 (2, 0) 3 Es gibt verschiedene Arten von dünn besetzten Matrizen, in CSR-Matrizen1 stellen (1, 1) und (2, 0) jedoch die (nullindizierten) Indizes der Nicht-Null-Werte 1 bzw. 3 dar. Zum Beispiel befindet sich das Element 1 in der zweiten Zeile und der zweiten Spalte. Der Vorteil dünn besetzter Matrizen zeigt sich vor allem dann, wenn wir eine wesentlich größere Matrix mit viel mehr null-Elementen erzeugen und dann diese größere Matrix mit unserer ursprünglichen dünn besetzten Matrix vergleichen: # Größere Matrix erzeugen matrix_large = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0, 0, 0]]) # CSR-Matrix erzeugen matrix_large_sparse = sparse.csr_matrix(matrix_large) # Ursprüngliche dünn besetzte Matrix anzeigen print(matrix_sparse) (1, 1) 1 (2, 0) 3 # Die größere dünn besetzte Matrix anzeigen print(matrix_large_sparse) (1, 1) 1 (2, 0) 3 Obwohl wir viel mehr null-Elemente in die größere Matrix eingefügt haben, ist ihre Darstellung als dünn besetzte Matrix genau die gleiche wie unsere ursprüngliche dünn besetzte Matrix. Das heißt, dass sich die Größe der dünn besetzten Matrix durch die hinzugefügten null-Elemente nicht geändert hat. Wie bereits erwähnt, gibt es viele verschiedene Typen von dünn besetzten Matrizen, zum Beispiel CSC-Matrizen (komprimierte Spaltenspeicherung), Liste von Listen und Wörterbuch mit Schlüsseln. Es ginge über den Rahmen dieses Buchs hinaus, die verschiedenen Arten und die Konsequenzen ihrer Anwendung zu erläutern, zumindest aber sei erwähnt, dass es zwar keinen »besten« dünn besetzten Matrixtyp gibt, trotzdem aber wesentliche Unterschiede zwischen ihnen bestehen und wir uns darüber im Klaren sein sollten, wenn wir einen Typ anstelle eines anderen auswählen. Siehe auch Sparse matrices, SciPy documentation (http://bit.ly/2HReBZR) 101 Ways to Store a Sparse Matrix (http://bit.ly/2HS43cI) 1.4Elemente auswählen
Problem In einem Vektor oder einer Matrix sind ein oder mehrere Elemente auszuwählen. Lösung Mit Arrays von NumPy lässt sich das leicht bewerkstelligen: # Bibliothek laden import numpy as np # Zeilenvektor erzeugen vector = np.array([1, 2, 3, 4, 5, 6]) # Matrix erzeugen matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Das dritte Element des Vektors auswählen vector[2] 3 # Die zweite Zeile und zweite Spalte auswählen matrix[1,1] 5 Diskussion Wie die meisten Dinge in Python sind auch NumPy-Arrays nullindiziert, d.h., der Index des ersten Elements ist 0 und nicht 1. Das Paket NumPy bietet eine breite Palette an Methoden, mit denen sich Elemente oder Gruppen von Elementen in Arrays auswählen lassen (d.h. Indizieren und Slicen): # Alle Elemente eines Vektors auswählen vector[:] array([1, 2, 3, 4, 5, 6]) # Alles bis einschließlich des dritten Elements...