Читать книгу Praxiseinstieg Machine Learning mit Scikit-Learn, Keras und TensorFlow - Aurélien Géron - Страница 107
Übungen
Оглавление1 Versuchen Sie, einen Klassifikator für den MNIST-Datensatz zu entwickeln, der auf den Testdaten eine Genauigkeit von mehr als 97% erzielt. Hinweis: Der KNeighborsClassifier funktioniert bei dieser Aufgabe recht gut; Sie müssen aber geeignete Hyperparameter finden (probieren Sie eine Gittersuche auf den Hyperparametern weights und n_neighbors).
2 Schreiben Sie eine Funktion, mit der sich ein MNIST-Bild in jede Richtung (links, rechts, oben, unten) um ein Pixel verschieben lässt.5 Erstellen Sie anschließend aus sämtlichen Bildern im Trainingsdatensatz vier verschobene Kopien (eine pro Richtung) und fügen Sie diese den Trainingsdaten hinzu. Trainieren Sie dann Ihr bestes Modell auf dem so erweiterten Trainingsdatensatz und messen Sie die Genauigkeit auf den Testdaten. Sie sollten beobachten, dass das Modell noch besser wird! Diese Technik, einen Trainingsdatensatz künstlich zu vergrößern, nennt man Data Augmentation oder Erweitern des Trainingsdatensatzes.
3 Versuchen Sie sich am Titanic-Datensatz. Ein geeigneter Ort, dies auszuprobieren, ist Kaggle (https://www.kaggle.com/c/titanic).
4 Entwickeln Sie einen Spamfilter (eine fortgeschrittene Übung):– Laden Sie Beispiele für Spam und Ham aus dem öffentlichen Datensatz von Apache SpamAssassin (https://homl.info/spamassassin) herunter.– Entpacken Sie die Datensätze und machen Sie sich mit dem Format der Daten vertraut.– Unterteilen Sie die Datensätze in Trainings- und Testdaten.– Schreiben Sie eine Pipeline zur Vorverarbeitung der Daten, um jede E-Mail in einen Merkmalsvektor zu überführen. Ihre Pipeline sollte eine E-Mail in einen (dünn besetzten) Vektor transformieren, der das Vorhandensein jedes möglichen Worts beinhaltet. Wenn beispielsweise sämtliche E-Mails nur die vier Wörter »Hello«, »how«, »are«, »you« enthielten, würde aus der E-Mail »Hello you Hello Hello you« der Vektor [1, 0, 0, 1] entstehen ([»Hello« ist vorhanden, »how« und »are« nicht, »you« ist vorhanden]) oder [3, 0, 0, 2], falls Sie die Häufigkeit jedes Worts auszählen möchten.
Sie können Ihrer Pipeline Hyperparameter hinzufügen, um einzustellen, ob der Header der E-Mails verworfen werden soll oder nicht. Sie können jede E-Mail in Kleinbuchstaben umwandeln, Interpunktion entfernen, alle URLs durch »URL« und alle Zahlen durch »NUMBER« ersetzen oder sogar Stemming einsetzen (also die Endungen von Wörtern entfernen; es gibt für diesen Zweck Python-Bibliotheken).
Probieren Sie anschließend mehrere Klassifikatoren aus und prüfen Sie, ob Sie einen guten Spamfilter bauen können, der eine hohe Sensitivität und Relevanz aufweist.
Lösungen zu diesen Übungen finden Sie in den Jupyter-Notebooks auf https://github.com/ageron/handson-ml2.