Termine
KW 40: Vorbesprechung
Di 2019-10-02, 14:30 Uhr: Vorbesprechung
Kurze Vorstellung: Wer ist da? Warum sind Sie da?
Konzept der Veranstaltung:
- Vorstellung der Bücher aus IM970 Data Science (dsci) (WS 2019)
- ausführlich siehe Konzept 2019-03-14
Long Term Vision
- Aufbau einer leichtgewichtigen Version des Kurses als (Bachelor-) Wahlpflichtfach 3. Semester
- Weiterer Ausbau des Moduls auf Master-Ebene
- Knowledge Graph (ggf. http://graphdb.ontotext.com/) als semantisches Backend
- Einbeziehung semi-strukturierter Daten, insbes. Natural Language Processing
- -> Masterarbeit?
Software:
- dsci-lab: XUbuntu (wie auch in den Pools) unter Oracle Virtualbox
- gemeinsames offenes Projekt: weitere Spezifikation des Labs (d.h. dieser Maschine)
Abschluss mit einer Studienarbeit:
- Thema: im Prinzip offen - nur spanned muss es sein.
- Ergebnissicherung: Ein Jupyter-Notebook.
- Jeder individuell, keine Gruppen-Abgabe. Wer in einer Gruppe arbeitet, muss dennoch eine vollständig eigene Leistung abgeben - ich bin hier inzwischen sehr streng.
Hausaufgabe (HA) bis KW 41:
- Lesen und im Detail verstehen: Bowles S. 1-7 oben
- VirtualBox installieren, dsci-lab herunterladen, in VirtualBox importieren: Ergebnis: "Maschine läuft".
KW 41: Einführung
Besprechung Hausaufgabe Bowles-Lektüre
- siehe HA: Bowles S.1-7 muss im Detail verstanden sein
- Kurzer Selbsttest: https://moodle.haw-landshut.de/mod/quiz/view.php?id=152785
- Welche Fragen stellen sich uns jetzt am Anfang der Veranstaltung? kollektive Ergebnissicherung: Fragen an Bowles zu Kap. 1
- Zusammenfassung JB: Why Are These Two Algorithms So Useful?
kurze Einführung JB in Bowles S.7-20
- Chapter 1: Two Essential Algorithms
- Hausaufgabe: Nachlesen bis nächste Woche.
- Lernziel: Handhabung unserer Lernumgebung
- Python als Host-Sprache
KW 42: Titanic anschauen
Theorie: Erläuterungen JB zu Bowles:
- Chapter 1: Two Essential Algorithms > Kap 1.2 bis Ende Kap. 1
- Entscheidungsbaum zur Auswahl von Algorithmen: https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html > scikit-learn algorithm cheat sheet
- Aktuelles Benchmarking zur Performance: https://towardsdatascience.com/benchmarking-simple-machine-learning-models-with-feature-extraction-against-modern-black-box-80af734b31cc
- Normatives Vorgehensmodell: CRISP-DM Model
Praxis: In medias res!
- The Anatomy of a New Problem
- Bowles_2.1_titanic: The Anatomy of a New Problem (Bowles verwendet Titanic nicht, wir aber schon)
Recherche, Präsentation
- Googeln Sie nach "exploratory data analysis python". Sie finden zahlreiche Notebooks.
- Wählen Sie eines aus, das Sie besonders spannend finden: Titel, URL ins Etherpad!
- Kurzbeschreibung im Etherpad:
- Was gefällt Ihnen besonders?
KW 43: ndarray, series, dataframe
Einführung in die spezifischen Datenstrukturen von numpy und pandas
- Lese-Empfehlungen zum Selbstlernen:
- Kurzlektüre 3 Minuten; schnelle Übersicht, Grundidee; aber für uns zu knapp: https://medium.com/@ericvanrees/pandas-series-objects-and-numpy-arrays-15dfe05919d7
- Aufgabe heute für jeden: Unterschiede Python Liste, np.ndarray und pd.series?
- Ergebnissicherung: kollaborativ eine kleine Zusammenfassung.
- Einführung JB
- Die eigentliche Einführung für unseren Kurs, schön gemacht:
- Einführung aus der Pandas-Doku: https://pandas.pydata.org/pandas-docs/version/0.25/getting_started/dsintro.html
- Das sollte man am Ende können: https://www.hackerearth.com/practice/machine-learning/data-manipulation-visualisation-r-python/tutorial-data-manipulation-numpy-pandas-python/tutorial/
- Array Slicing
- Array Concatenation
Praxis
KW 44
Ziele heute
- Datensätze Rocks, Wine, Glass
- kennen
- Welches Machine Learning Problem müssen wir lösen?
- In welchen Begriffen, Maßen, Metriken messen wir die Modell-Qualität?
- für Rocks ein Modell erstellen
Basiswissen:
Schnellübersicht über die Kapitel
- Factors Driving Algorithm Choices and Performance—Complexity and Data
- Measuring the Performance of Predictive Models
- 'reinschauen in die Notebooks
Aktion
- Quellen:
- https://classeval.wordpress.com/introduction/basic-evaluation-measures/
- https://classeval.wordpress.com/introduction/introduction-to-the-roc-receiver-operating-characteristics-plot/
- https://en.wikipedia.org/wiki/Confusion_matrix
- https://de.wikipedia.org/wiki/Beurteilung_eines_bin%C3%A4ren_Klassifikators
- Ontologie bauen
- "Axiome": {T|F}{P|N}
- verschiedene Layouts der Confusion Matrix auslegen: vgl. (ipynb)Bowles_3.3_rocks > Listing 3.2
- abgeleitete Begriffe misclassification | 1 – specificity | sensitivity | ROC | AUC | u.V.m.
- "Axiome": {T|F}{P|N}
Hausaufgabe:
- Unbedingt Bowles S. 75-100 lesen, im Detail verstehen, ggf. im Code wiederfinden - denn nächste Woche diskutieren wir die Details!
KW 45
Fortführung Karten-Aufgabe: Kennzahlen für Klassifikation
Achieving Harmony Between Model and Data p.101
Richtung des Kurses:
- genau dieses Bibliotheken wollen wir verstehen: sklearn.linear_model.LogisticRegression | | sklearn.linear_model.LogisticRegressionCV | | sklearn.linear_model.SGDClassifier
- neue Kernbegriffe: L1- und L2-Regularisierung, ElasticNet
KW 46
Diese Sitzung: Ende Theorie, was war dran, was sollte man jetzt wissen oder können
Theorie
Zusammenfassung zu KW 44 / Bowles Kap.4 erste Hälfte:
- nachlesen: https://www.analyticsvidhya.com/blog/2016/01/complete-tutorial-ridge-lasso-regression-python/
- "if you are using regression without regularization, you have to be very special!"
Diese Begriffe sollte man einordnen und erklären können:
- zu Kap 4, erste Hälfte (vgl. Hausaufgabe):
- l1-, l2-Norm
- Unterschied lars, lasso glmnet/ElasticNet
- (Vorsicht Verwechslung: ElasticNet hat *nichts* zu tun mit https://de.wikipedia.org/wiki/Elasticsearch)
- Welche Regularisierungs-Parameter haben wir zur Verfügung?
- Mit welchen Maßen beurteilen wir die Qualität eines Modells?
- Begriffe aus Kap 3 FP | FN | TP | TN | precision | recall | accuracy | accuracy paradoxon | sensitivity | specificity | prevalence | f1-score | AUC | ROC | confusion matrix | error rate | test set | training set | validation set | cross validation
- Grundlagen-Begriffe feature | feature vector | attribute | target | outcome | unabhängige Variable | abhängige Variable | nominal | kategorial | ordinal | class label | field | quantitative | continuous
- Orientierungswissen: Erkläre den Unterschied zwischen
- überwachtes und unüberwachtes Lernen
- Regressions-Problem und Klassifikations-Problem
- kategorialen, ordinalen und numerischen Features
Überblick JB zu Bowles Solving the Penalized Linear Regression Problem (p.132)
- für Interessierte: Bowles erklärt es im Detail, bitte selbst nachlesen
- für Nur-Anwender und Blackbox-User: https://scikit-learn.org/stable/modules/linear_model.html
- Was ist der Unterschied zwischen:
- in dsci nicht behandelt:
- 1.1.9. Orthogonal Matching Pursuit (OMP)
- 1.1.10. Bayesian Regression
- 1.1.13. Perceptron
- 1.1.14. Passive Aggressive Algorithms
- Vertiefung für Interessierte:
Überblick JB zu Bowles Extensions to Linear Regression (p.151)
Ggf. Demo XXX: Flugdatenschreiber
Ziel: Mini-Projektplan zu den frühen Phasen im CRISP-DM Model: Business Understanding | Data Undestanding | Data Preparation
Hausaufgabe: Bis KW 47 ein Notebook für einen bekannten Datensatz erstellen
Ziel: Eine Musterlösung für einen Datensatz von Bowles
- Selber mit Bibliotheken machen, was Bowles in plain Python macht!
- Vorher bei Bowles nachlesen, was er zu diesem Datensatz sagt - auch incl. Kap. 5
- ggf. auch im Web nach Infos zu diesem Datensatz suchen
Datensatz:
- für KW 47 zunächst Abalone
- Vorschau: später dann auch Titanic; mit dem Datensatz spielen, z.B. auch Alter als unabhängige Variable betrachten
Warum tun wir es selbst?
- Bestandsaufnahme: Was war schon dran, was fehlt noch - im Kurs, bei jedem selbst ;-)
- Selber machen (aus früheren Notebooks zusammenklauben): Wiederholung, Vergessen verhindern, selbst ein Ergebnis produzieren - und Erfolgserlebnis haben!
dabei auch Visualisierungen aus https://pandas.pydata.org/pandas-docs/version/0.25/user_guide/visualization.html einsetzen.
Checkliste explorative Datenanalyse
für den gesamten Datensatz
- read csv
- mit Headline?
- Datensatz ist ohne Headline, also Headline hinzufügen
- abalone = pd.read_csv('abalone.data.csv', names=['Sex', 'Length', 'Diameter', 'Height', 'Whole weight', 'Shucked weight', 'Viscera weight', 'Shell weight', 'Rings'])
- Alternative: Spalten nachträglich (um)benennen
- Auszug einlesen, z.B. jede dritte Zeile, zufällige Zeilen (bei großen Datensätzen)
- Was tun mit Null-Werten
- anzeigen, wie viele
- automatisch auffüllen: Wie?
- display(abalone['Sex'].value_counts())
- nur bestimmte Spalten
- kann man auch mit regex als Gruppe bestimmen; gut bei vieeelen Datensätzen
- "Form"
- breit? lang?
- abalone.shape
- breit? lang?
- Wertebereiche
- Welche Attribute haben welchen Datentyp?
- abalone.info(verbose=True)
- Attribut Kontonummer als Integer? Falsch! ggf. in string ändern
- Welche Attribute haben welchen Datentyp?
für jedes Attribut
- pandas.describe
- standard: numerisch
- extra abfragen: nominal
- nominal: unique Werte
- missing values
- plotten
- optisch Verteilung feststellen (https://sichtungderdinge.wordpress.com/2012/06/12/statistik-und-auswertung-quantitativer-daten-in-spss/) :
- z.B. mit Histogramm, ggf. mit binning
- z.B. für AbaloneSex
- Unimodale (eingipflige), symmetrische Verteilung
- Unimodal (eingipflige), rechtsschiefe oder linksschiefe Verteilung
- Bimodal (Kamelhöcker…) – hier ist es schwer, einen aussagekräftigen Mittelwert zu bestimmen.
- U-förmig (’n U halt…) aussagekräftiger Mittelwert, zentrale Tendenz auch hier schwer machbar.
- L-förmig (abfallend)
- unbalanciert
- https://de.wikipedia.org/wiki/Gini-Koeffizient ?
- z.B. mit Histogramm, ggf. mit binning
- Ausreißer erkennen?
- bezogen auf Quantile
- Busines understanding: Was ist in meinem Fall ein Ausreißer?
- ggf. Algorithmen in scikit nachschauen
- erkennen: ok; bewerten?
- fehlerhafte Werte erkennen
- box plot
für je 2 Attribute
- plots aus https://pandas.pydata.org/pandas-docs/version/0.25/user_guide/visualization.html einsetzen.
- scatterplot
- heatmap
- parallel plot
- u.V.m.
Checkliste Modellbildung
Welche Art von Problem gilt es zu lösen?
Daten-Vorbereitung
- Normalisierung
- Standardisierung
- bei Bowles z.T. "normalization" genannt
- längere Diskussion bei Bowles: nachschauen
KW 47
u.A. Besprechung der Hausaufgaben-Notebooks
Hausaufgabe:
- Daten-Vorverarbeitung aus Cocalc-Beispiel-Notebook auf Titanic-Datensatz übertragen:
Mustergültiges Beispiel-Notebook zu Titanic bauen.
- ipynb-Datei auf Moodle hochladen
- ggf angucken: https://pandas.pydata.org › Pandas_Cheat_Sheet
KW 48
Mikro-Projekt "Banane"
Zweck: an einer 08/15-Aufgabe sehr methodisch den kompletten Pfad von Datenschöpfung, Feature Engineering, Modellkonstruktion bis hin zur Modellevaluation durch gehen - idealerweise mit möglichst wenig Code, aber viel Grips und Erklärung.
Aufgabe:
- Vorhersage des Nettogewichtes von Bananen auf Grundlage von Basisdaten
Lernziele:
- das bisherige Wissen auf ein triviales Spiel-Beispiel anwenden
- Aufbau nach CRISP-DM
- möglichst wenig Code-Zeilen verwenden
- Nutzung von sklearn.linear_model.ElasticNetCV
Quelle:
- inspiriert durch Hans Lohninger: http://www.statistics4u.com/fundstat_germ/data_bananas.html, für unsere Übung aber leicht verändert: csv
Notebook Teil 1: "Projektplan" erstellen
- zuerst Notebook-Struktur aufsetzen; Überschriften und Vorgehen nach CRISP-DM Model - zumindest was davon unbedingt wichtig ist
- dann normalsprachliche Skizze "das ist zu tun"
- minimaler Code, um zu zeigen, dass es nicht nur eine Word-Datei ist ;-) :
- ipynb in der virtuellen Maschine
- Datensatz einlesen
- head, describe, shape
- erst in Teil 2 des Projekts: Visualisierungen, ggf. feaure engineering, Lernen, Prädiktion, Evaluation etc.
- auf Moodle hochladen (s.u.)
- 50% der Bewertung - d.h. eine sehr gute normalsprachliche Skizze ist für das Bestehen
ausreichend
- unbedingt Bowles referieren
- gerne auch die Übungs-Notebooks aus der Veranstaltung
- auch CRISP
Notebook Teil 2: Codieren
- Wiederverwendung von Notebook Teil 1
- erst am Schluss den Code einfügen (d.h. man kann das Notebook grundsätzlich auch ohne Code abgeben)
- Copy & Paste ist üblich und ok. Aber auch für Code-Schnipsel gilt: unbedingt penibel die Quelle angeben, sonst ist es ein Plagiat!
- auf Moodle hochladen (s.u.)
- 50% der Bewertung
- Besonderheiten
- Datensatz einlesen, train-test-split selbst durchführen:
- Test-Daten: id ist durch 4 teilbar
- Train-Daten: alle anderen
- Lern-Algorithmus: 3.2.4.1.1. sklearn.linear_model.ElasticNetCV
- Datensatz einlesen, train-test-split selbst durchführen:
Abgabe:
- Mikro-Projekt Bananen, Teil 1: Skizze
- auf Moodle hochladen: Mikro-Projekt Bananen, Teil 2: Ausarbeitung
- Laufzeit knapp 1 Woche, genaue Abgabefrist siehe Moodle
Feedback Hausaufgabe
Versuch: Zusammenfassen zu einem gemeinsamen Notebook auf Cocalc, geht das zumindest mit 4 Leuten?
KW 49
anschauen Uploads
auch "Upload" JB: http://jbusse.de/2019_ws_dsci/Vortrag_GdW_2019-11-28.html
Multinominale Regression
Erzeuge synthetischen Datensatz:
- erzeuge random
- 2 numerische Attribute: Breite (resp. Durchmesser), Höhe
- 1 kategorialer Wert Körper-Typ: WPZK (Würfel, Pyramide, Zylinder, Kegel)
- mit Rauschen errechnen, um physikalische Messfehler zu simulieren:
- Oberfläche, Volumen (Formeln im Netz)
- Verhältnis Höhe / Breite (abhängige, aber irrelevante Variable)
- mit möglichst weitgehendem Einsatz von Bibliotheken
- keine NaN, keine Ausreißer, keine Fehlwerte
- Beispiel-Datensätze:
- http://www.jbusse.de/2019_ws_dsci/Bauklötze-train-test_2019-12-09T1430.zip (minimal, ohne Oberfläche: geht auch ;-) )
ML Problem: target: klassifiziere in Körpertyp aus:
- Aufgabe
- gegeben Breite und Höhe
- gesucht: Körper-Typ WPZK
- feature engineering (kennen wir aus "Banane")
- zunächst auf nur 2 Körper filtern: Würfel und Kegel
- später alle 4 Körper: multinominale Regression
Soweit möglich mit Bibliotheken realisieren:
- Daten bereitstellen
- synthetischen Datensatz herstellen
- train-test-split
- mit Train trainieren
- Vorverarbeiteung
- feature generation
- scaler.train
- Modell trainieren mit https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html, penalty = ‘elasticnet’
- Vorverarbeiteung
- Modell auf Test anwenden
- feature generation
- scaler.transform
- modell.predict
- Modell evaluieren
KW 50
Diskussion der Notebooks aus KW 49
Ergebnis: Beispiel-Notebooks
KW 51
empfohlene Teilnehmer heute: Alle, die die Aufgabe "Bananen" oder "Würfel, Pyramide, Zylinder, Kegel" noch nicht ganz selbstständig lösen konnten.
Notebook: Baukloetze
Titanic Delve, adaptiert durch BUJ
Dataset Quelle: https://www.cs.toronto.edu/~delve/data/titanic/desc.html, verändert durch BUJ
- Dieses Titanic-Dataset unterscheidet sich ganz offensichtlich von anderen bekannten Datasets bei Kaggle, Chris Albon etc.
- Wir arbeiten nicht mit dem Original, BUJ hat ein paar Zellen geändert ;-)
Dataset Download:
Klassifikationsproblem:
- wie üblich: Target ist "survived"
- vorherzusagen aus den anderen Spalten
Bibliotheken:
- https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html und/oder sklearn.linear_model.LogisticRegressionCV
- multi_class="multinomial"
- penalty="elasticnet"
- random_state=42
- l1_ratios= [ 0.1, 0.5, 0.9 ]
- (Vereinfachung: nur den Wert 0.5 untersuchen)
- fit_intercept=False
- cv=5
- Score: accuracy
- (Hinweis: ElasticNet ist eigentlich nicht die optimale Solver-Wahl für diese Aufgabe. Aber wir haben ElasticNet genau angeschaut, und nehmen schlechte Scores im Rahmen der Lehrveranstaltung inkauf).
- Visualisierung mit jakevdp.github.io > seaborn
Abschnitte:
- Explorative Datenanalyse
- Daten-Vorverabeitung
- Modellgenerierung mit Cross-Validation
- Erstellung des finalen Modells
- Qualitätsbeurteilung
- confusion matrix, accuracy
- AUC + ROC
- Zusatz-Aufgabe für Interessierte
-
Visualisieren Sie die Werte des Attributs
coefs_paths_
; interpretieren Sie auf dieser Grundlage das erstellte Modell (Transfer von Bowles Kap. 4 und 5)
-
Visualisieren Sie die Werte des Attributs
Kurze Vorstellung des geplanten Vorgehens am 15.1.2020
- Jeder TN bespricht mit JB seinen "Projektplan", JB git Feedback
Abgabe bis 15.2.
- ein gezippter Ordner, in dem alle benötigten Daten und Notebooks flach enthalten sind (d.h. Daten werden aus dem lokalen Verzeichnis mit relativem Pfad eingelesen).
- Ordner-Name: Name in Ihrer Hochschul-email, z.B. s-jbuss2
KW 2/2020
Lawinengefahrenprognose mit Text Analytics und Maschinellem Lernen
KW 3
Vorstellung "Projektplan" zu Titanic Delve, adaptiert durch BUJ durch die Studierenden