diff --git a/Semester_2/Einheit_12/Grundlagen-ML.ipynb b/Semester_2/Einheit_12/Grundlagen-ML.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..5dc13207d5bf906edea8f5fd495b32b5eb9eec9c --- /dev/null +++ b/Semester_2/Einheit_12/Grundlagen-ML.ipynb @@ -0,0 +1,819 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "7671966d-f256-49ca-80c4-1d6181acc60a", + "metadata": {}, + "source": [ + "### <font color='blue'>**Grundlagen Maschinelles Lernen**</font>\n", + "\n", + "Maschinelles Lernen (ML) ist ein weit verbreiteter Ansatz im Gebiet der Künstlichen Intelligenz. \n", + "\n", + "Grundidee des Maschinellen Lernens: \n", + "\n", + "* Aus Beispielen werden Regelmäßigkeiten, Muster oder Modelle durch \"Lernen\" extrahiert. \n", + "* Hierzu werden ML-System mithilfe von Beispielen trainiert.\n", + "* Nach der Lernphase entstehen Modelle, die die bisherigen Beispiel durch Erkennen von Mustern, Beziehungen und Regelmäßigkeiten verallgemeinern. \n", + "* Damit lassen sie sich auf neue Daten anwenden und künftige Werte vorhersagen.\n", + "* Aktuelle ML-Systeme zeichnen sich durch einen geringen Entwicklungsaufwand und leichte anpassbarkeit aus.\n", + "* Nachteile sind eine großer Datenbedarf und die schlechte Erklärbarkeit, warum und wie das System welche Lösung gefunden hat. \n", + "\n", + "Fokus hier auf eine Spezialform des Maschinellen Lernens: Methoden des Deep Learnings (tiefes Lernen). \n", + "Sie basieren basieren auf künstlichen neuronalen Netzwerke (artificial neuronal networks ANN.\n", + "Deep bzw. tief bedeutet, dass tiefe, mehrschichtige Netzwerke - heute mit bis zu 100 Schichten - verwendet werden.\n", + "Schematischer Workflow \n", + "\n", + "1. **Vorbereitete Daten**, z.B. normalisiert, stehen zur Verfügung. \n", + "2. Ggf. muss eine **Konvertierung** in ein verwertbares Format.\n", + "3. Ggf. **Anreicherung** der bestehenden Daten, z.B. durch synthetische Daten \n", + "4. Abschließende **Analyse der Daten**, z.B. auf Integrität\n", + "5. Prüfung, ob **existierende Modelle** für die Aufgabe herangezogen werden können. \n", + "6. Erstellung eines **ersten Modells* \n", + "7. **Training** des Modells \n", + "8. **Evaluation** des trainierten Modells \n", + "9. Prüfung auf **Verwertbarkeit des Modells**\n", + "10. Ggf. **Anpassung des Modells** in einem iterativen Prozess\n", + "11. **Anwendung eines akzeptablen Modells** für künftige Szenarien\n", + "\n", + "Lernansätze beim Maschinellen Lernen kann man wie folgt klassifizieren: \n", + "\n", + "* **Lernmodus** - mit dem das Netzwerk trainiert wird\n", + " * **Überwachtes Lernen** - Supervised Learning: Für Eingabe sind die Ausgaben bekannt \n", + " * Unüberwachtes Lernen - Unsupervised Learning: Exploration von Daten, Identifikation inhärenter struktureller Eigenschaften. \n", + " * Teilüberwachtes Lernen - Semi-supervised Learning\n", + " * Bestärkendes Lernen - Reinforcement Learning: Belohnen richtiger und bestrafen falscher Antworten führt zu selbständig entwicleten Strategien. \n", + " * Aktives Lernen - Active Learning \n", + "* **Problemtyp** - der zu lösen ist\n", + " * **Regression**: Vorhersage von kontinuierlichen Werten, Methoden: lineare, polynomiale oder multivariate Regression, Beispiel: Vorhersage eletrischer Leistung in abhängigkeit meteorologischer Daten. \n", + " * **Klassifikation**: Vorhersage von Klassenzugehörigkeiten, d.h. Abbildung von Merkmalen in einen diskreten Wertebereich, Beispiel: Kategorisierung von E-Mails als Spam.\n", + " * **Clustering**: Findung von Gruppierung und deren Ähnlichkeitsmerkmalen nach nicht vorgegebenen Bezeichungen), Methoden des Unsupervised Learnings.\n", + " \n", + " \n", + "<div>\n", + "<img src=\"./Pics/Methoden.png\" width=\"800\"/>\n", + "</div>\n", + "\n", + "\n", + "\n", + "### <font color='blue'>**Neuronale Netzwerke**</font>\n", + "\n", + "Deep Learning basiert auf der Analogie zur Funktionsweise des menschlichen Gehirns. Die Bausteine sind Neuronen, die miteinander verknüpft sind. \n", + "Hier werden künstliche Neuronen genutzt und in mehreren Schichten miteinanderverknüpft. \n", + "\n", + "#### <font color='blue'>**Aufbau**</font>\n", + "\n", + "Ein natürliche Neuron besteht aus \n", + "\n", + "* einem **Zellkörper (Soma)**, der die Informationsverarbeitung vornimmt,\n", + "* den **Verästelungen (Dendriten)**, die die Reize der umgebenden Neuronen aufnehmen und an den Zellkörper weiterleiten,\n", + "* dem **Axon**, einem langen Fortsatz des Zellkörpers analog zu den Dendriten, die an den Enden Verästelungen (Axonterminale) mit Anknüpfungen an die Synapsen haben.\n", + "* die **Kontakzonen der Nervenzellen (Synapsen)** zwischen den Axonterminalen und den Dendriten. \n", + "\n", + "\n", + "<div>\n", + "<img src=\"./Pics/Neuron.png\" width=\"400\"/>\n", + "</div>\n", + "\n", + "\n", + "Beim Übertragen der Impulse an die nächste Nervenzelle werden Botenstoffe (Neurotransmitter) ausgeschüttet. Sie lösen eine Änderung des elektischen Potentials der verbundenen Neuronen aus. Zwischen den Zellen werden ankommende Aktivierungspotential ausgelöst, wenn ein Schwellenpotential überschritten wird. \n", + "\n", + "Ein künstliches Neuron wird als Perzeptron modelliert und besteht aus \n", + "\n", + "* einem **Perzeptor** als Modell der künstlichen Nervenzelle, der die Berechnung der **Übertragungs- und Aktivierungsfunktion** durchführt,\n", + "* eine **Eingabeschicht** mit der Dendritenfunktion zur Aufnahme von Reizen, \n", + "* eine **Ausgabe** als Modell des Axons,\n", + "* den **Gewichtungen (weights)**, die die Eigenschaften der Synapsen repäsentieren.\n", + "* und das **Bias**, das zu der Summe des Eingabevektors addiert wird. \n", + "* Die **Aktivierungsfunktion** modelliert das Überschreiten des Schwellenwertes. \n", + "\n", + "<div>\n", + "<img src=\"./Pics/AufbauNeuron.png\" width=\"600\"/>\n", + "</div>\n", + "\n", + "#### <font color='blue'>**Modell**</font>\n", + "\n", + "In der mathematische Formulierung sind\n", + "\n", + "* die Eingabewerte bilden einen **n-dimensionalen Vektor** $X = [x_1, x_2, ... ]$, dessen Komponenten mit dem **Wichtungen** $w_i$ versehen und inklusive des **Bias** $b$ aufaddiert werden: \n", + "$$\n", + " \\alpha = \\sum\\limits_{i=1}^n w_i x_i + b \\; . \n", + "$$\n", + "* Die Ausgabe des Neurons errechnet sich dann durch die Anwendung der **Aktivierungsfunktion**\n", + "$$\n", + " y = \\varphi( \\alpha ) \n", + "$$\n", + "Beispiel für Aktivierungsfunktionen sind \n", + "$$\n", + " y_1 = \\frac {1}{1+e^{-x}} \\quad y_2 = \\frac {e^x - e ^{-x}} {e^x + e ^{-x}}\n", + "$$\n", + "\n", + "#### <font color='blue'>**Lernen**</font>\n", + "\n", + "Das **Lernen** für ein einzelnes Neuron geschieht über die **Anpassung der Wichtungen** der linearen Übertragungsfunktion. Hierzu werden wiederholt Eingabewerte vorgegeben und die Ausgaben des Neurons $y_i$ mit den erwarteten Ausgaben $\\hat{y}_i$ verglichen. Das wird iterativ solange gemacht, bis das Neuron die erwarteten Ausgaben bestmöglich vorhersagt. \n", + " \n", + "Zur Anpassung wird gerne die **Delta-Regel** angewendet: \n", + "$$\n", + " w_{i_{neu}} = w_{i_{alt}} + \\eta \\cdot ( y_i - \\hat{y}_i ) \n", + "$$\n", + "Die **Lernrate** $\\eta$ ist geeignet, d.h. nicht zu hoch und nicht zu niedrig zu wählen. \n", + "Üblich ist es, zunächst mit hohen Lernraten zu beginnen und dann die Raten schrittweise zu reduzieren.\n", + "\n", + "#### <font color='blue'>**Mehrschichtige Netzwerke**</font>\n", + "\n", + "Mehrschichtige neuronale Netze bestehen aus mehrschichtigen Ansammlungen von Neuronen mit gewichteten Verbindungen. Die Bestandteile sind: \n", + "\n", + "* Eine **Eingabeschicht (input layer)**: \n", + " Jedes neuron repräsentiert hier ein Merkmal.\n", + " \n", + "* Eine oder mehrere **verdeckte Schichten (hidden layers)**: Sie dienen zur Weiterverarbeitung der Eingabeschicht. Mehr als eine verdeckte Schicht führt zu **tiefen neuronalen Netzen (deep neuronal networks)**\n", + " \n", + "* Eine **Ausgabeschicht (output layer)**: \n", + " Sie repräsentiert die Zielwerte, z.B. die gefundenen Klassen bei Klassifikationsaufgaben\n", + "\n", + "<div>\n", + "<img src=\"./Pics/Netzwerk.png\" width=\"500\"/>\n", + "</div>\n", + " \n", + "\n", + "Unterschieden werden \n", + "\n", + "* **vorwärtsgekoppelte Netze** (feedforward neural networks) mit unidirektionalen Verbindungen vom Input zum Ouput, d.h. es gibt keine Verbindungen zu Neuronen voriger Schichten. Vertreter sind CNNs (convolutional neural networks), z.B. für die Bildklassifikation \n", + "\n", + "* **rückgekoppelte Netze** (feedback neural networks) haben Rückführungen zu den unmittelbaren Vorgängern (direkte Rückkopplung) oder zu anderen vorhergehenden Schichten (indirekte Rückkopplung). Sie sind für Fragen mit zeitlichen Abläufen geeignet. \n", + "\n", + "#### <font color='blue'>**Lernvorgang**</font>\n", + "\n", + "Ziel ist die möglichst genaue Abbildung von Eingabevektoren auf gegebene Ausgabevektoren. Diese Abbildung wird dann als Modell bezeichnet. Hierzu müssen die Gewichte und die Aktivierungsfunktionen so gewählt werden, dass für viele Eingabebeispiele die Ausgabedaten korrekt bestimmt werden. \n", + "Zur Anpassung werden mathematische Verfahren verwendet. \n", + "Diese Training erfolgt in einem iterativen Prozess in folgenden Schritten: \n", + "\n", + "<div>\n", + "<img src=\"./Pics/Training.png\" width=\"600\"/>\n", + "</div>\n", + "\n", + "1. Festlegung der **Struktur** des neuronalen Netzwerks, z.B. nach Gefühl oder durch Adaption bestehender Modelle \n", + " und Festlegung von **Hyperparametern des Lernprozesses**, z.B. Anzahl der Epochen\n", + "2. **Initialisierung** des Netzwerks ggf. durch zufällige Wahl von Gewichtungen und Bias \n", + "3. Bereitstellung der **Trainingsdaten** aufgeteilt in Batches für einen \n", + "4. **Feed-Forward** Schritt von der Eingabeschicht bis zur Ausgabeschicht\n", + "5. **Fehlerevaluation** zur Beurteilung der Differenzen zwischen den berechneten und den Trainingsdaten über eine Fehlerfunktion\n", + "6. Sofern Fehlertoleranz und Anzahl der Epochen noch nicht erreicht, erfolgt eine \n", + "7. **Anpassung der Gewichtungen und des Bias**, indem die Fehlerinfomation durch Anpassung von der Ausgabeschicht über die verdeckten Schichten bis hin zu Eingabeschicht zrückpropagiert werden (Backpropagation). Hierzu wird die **Delta-Regel** verallgemeinert. \n", + "8. Nach Ende des Lernvorgangs (Fehler ist minimiert oder Zahl der Epochen erreicht) wird das **angelernte Modell evaluiert**, indem mit Testdaten mit bekannter Ausgabe die Antworten berechnet werden und deren Korrektheit und Präzision beurteilt wird. \n", + "9. Im Fall der Unzulänglichkeit erfolgt eine **Überarbeitug der Struktur des Modells**, d.h. Anpassungen des durch zusätzliche Schichten oder Aktivierungsfunktionen, und das erneute Durchlaufen des Lernprozesses.\n", + "10. Wenn da Modell verwertbar ist, dann kann es als **final** betrachtet, gespeichert und benutzt werden. \n", + "\n", + "#### <font color='blue'>**Fehlerfunktion**</font>\n", + "\n", + "Ein Fehlerwert beurteilt die Qualität der Abbildung der Eingaben auf die Ausgaben. Hier wird die **Fehlerfunktion (loss function)** verwendet, die je nach Aufgabengebiet sehr unterschiedlich sein kann. \n", + "\n", + "Für Regressionsaufgaben verbreitet ist die Erfassung des **mittleren quadratischen Fehlers (mean squared error - MSE)**, die durch die Fehlerfunktion definiert ist: \n", + "$$\n", + " E = \\frac 1 n \\sum\\limits_{i=1}^{n} ( y_i - \\hat y _i )^2\n", + "$$\n", + "$E$ ist der Fehlerwert, $n$ die Anzahl der Trainigsbeispiele und $y_i$ und $\\hat y _i$ die gewünschten und die errechneten Ausgaben. \n", + "\n", + "#### <font color='blue'>**Gewichtsanpassung**</font>\n", + "\n", + "Die Anpassung der Gewichtungen wird über die Backpropagation mittels **spezieller mathematischer Verfahren**, z.B. dem Gradientenverfahren, durchgeführt. Die Anpassung der jeweiligen Wichtungen erfolgt nach der verallgemeinerten Delta-Regel:\n", + "$$\n", + " w_{i_{neu}} = w_{i_{alt}} - \\eta \\, \\frac {\\partial E} {\\partial w_i} \\; , \n", + "$$\n", + "in der als Änderung das Produkt der Lernrate $\\eta$ mit der partiellen Ableitung des Fehlers nach der Wichtung verwendet wird. \n", + "Beginnend mit den Wichtungen der letzten Verbindungen zwischen Output- und vorhergehender Schicht, werden die Anpassungen Schicht für Schicht bis zur Input-Schicht vorgenommen. \n", + "\n", + "### <font color='blue'>**Klassifikationsbeispiel**</font>\n", + "\n", + "Der Trainingsdatensatz enthält 50 Instanzen von drei Arten von Schwertlilien mit den Merkmalen:\n", + "1. **Länge des Kelchblatts** (Spalte `sepal-length`) \n", + "2. **Breite des Sepalums** (Spalte `sepal-width`)\n", + "3. **Länge des Kronblatts** (Spalte `petal-length`)\n", + "4. **Breite des Kronblatts** (Spalte `petal-width`)\n", + "Zu den Merkmalen gehören die drei Kategorien der Iris-Varianten Iris-setosa, Iris-versicolor und Iris-virginica (Spalte `species`).\n", + "\n", + "<div>\n", + "<img src=\"./Pics/Bluete.png\" width=\"600\"/>\n", + "</div>\n", + "\n", + "Das Netzwerk soll zuerst aus drei Teilen bestehen: \n", + "\n", + "1. eine Input-Schicht, in das die vier Merkmale eingehen,\n", + "2. eine versteckte Schicht mit 10 Neuronen,\n", + "3. eine Output-Schicht, die die zu erkennenden Klassen der Iris-Varianten ausgibt.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "8174ac33-47c7-4704-8c01-d485c1ad4067", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " sepal length sepal width petal length petal width species\n", + "0 5.1 3.5 1.4 0.2 Iris-setosa\n", + "1 4.9 3.0 1.4 0.2 Iris-setosa\n", + "2 4.7 3.2 1.3 0.2 Iris-setosa\n", + "3 4.6 3.1 1.5 0.2 Iris-setosa\n", + "4 5.0 3.6 1.4 0.2 Iris-setosa\n", + ".. ... ... ... ... ...\n", + "145 6.7 3.0 5.2 2.3 Iris-virginica\n", + "146 6.3 2.5 5.0 1.9 Iris-virginica\n", + "147 6.5 3.0 5.2 2.0 Iris-virginica\n", + "148 6.2 3.4 5.4 2.3 Iris-virginica\n", + "149 5.9 3.0 5.1 1.8 Iris-virginica\n", + "\n", + "[150 rows x 5 columns]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "# Lade den Iris-Datenset\n", + "data_train = pd.read_csv('./iris.csv')\n", + "print( data_train ) " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "7c414d55-5f28-4fa5-bea7-357beb651a74", + "metadata": {}, + "outputs": [], + "source": [ + "# Mapping der Iris-Varianten zu numerischen Werten 0, 1 bzw. 2\n", + "data_train.loc[data_train['species']=='Iris-setosa', 'species'] = 0\n", + "data_train.loc[data_train['species']=='Iris-versicolor', 'species'] = 1\n", + "data_train.loc[data_train['species']=='Iris-virginica', 'species'] = 2\n", + "data_train = data_train.apply(pd.to_numeric)\n", + "data_train_array = data_train.values" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d48c4828-4429-4131-b5d8-e8e60794f70b", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Reproduzierbarkeit der Ergebnisse\n", + "np.random.seed(17)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "866f4a76-040f-4d8f-81c6-4285a98b0862", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Splitten des Datensatzes in Trainings- und Testdaten 80% vs. 20% \n", + "from sklearn.model_selection import train_test_split\n", + "X_train, X_test, y_train, y_test = train_test_split(data_train_array[:,:4], # X \n", + " data_train_array[:,4], # Y \n", + " test_size=0.2 )" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "04290085-675d-481f-b50a-918552b89e03", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from sklearn.neural_network import MLPClassifier\n", + "# VERSION 1\n", + "# Neuronales Netz zur Klassifikation (MultiLayerPerceptron)\n", + "# mit Aktivierungsfunktion 'relu' und Optimierer 'adam'.\n", + "mlp = MLPClassifier( hidden_layer_sizes=(10,), activation='relu', solver='adam', \n", + " max_iter=350, batch_size=10, verbose=False )\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "a3c1c40a-9932-477c-803b-2ccb536de868", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# VERSION 2 \n", + "# Neuronales Netz mit 2 Hidden-Layers mit 5 bzw. 3 Neuronen \n", + "# mit Aktivierungsfunktion tanh und Optimierer adam \n", + "mlp = MLPClassifier( hidden_layer_sizes=(5,3), activation='tanh', solver='adam', \n", + " max_iter=350, batch_size=10, verbose=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "ff931304-da0c-47ab-bb5c-5010b81250f7", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "<style>#sk-container-id-1 {color: black;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>MLPClassifier(activation='tanh', batch_size=10, hidden_layer_sizes=(5, 3),\n", + " max_iter=350)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">MLPClassifier</label><div class=\"sk-toggleable__content\"><pre>MLPClassifier(activation='tanh', batch_size=10, hidden_layer_sizes=(5, 3),\n", + " max_iter=350)</pre></div></div></div></div></div>" + ], + "text/plain": [ + "MLPClassifier(activation='tanh', batch_size=10, hidden_layer_sizes=(5, 3),\n", + " max_iter=350)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Training \n", + "mlp.fit(X_train, y_train) " + ] + }, + { + "cell_type": "markdown", + "id": "ad948853-d373-4e38-89e8-0279edf4e650", + "metadata": {}, + "source": [ + "#### <font color='blue'>**Evaluation**</font>\n", + "\n", + "Die **Konfusionsmatrix** hilft dabei, die Qualität einer erlernten Klassifikation auswerten und neutral zu bewerten. Des Weiteren lassen sich mithilfe der Wahrheitsmatrix einfacher spezifische Kennzahlen errechnen. Um die Konfusion Matrix aufzubauen, benötigt man das Testset des Datensatzes. Der Klassifikator teilt den Eingabedaten die Ausgabe-Klassen zu. Die Konfusionsmatrix wird gerne genutzt, um festzustellen, welche Art des Fehlers beim Klassifikator häufig vorkommt. \n", + "\n", + "Die Matrix setzt sich aus den bereits genannten Fehlertypen zusammen. \n", + "Die Zeilen sind dabei die vorhergesagten Klassen und die Spalten die tatsächlichen Klassen der Testdaten:\n", + "\n", + "<div>\n", + "<img src=\"./Pics/Konfusionsmatrix.png\" width=\"500\"/>\n", + "</div>\n", + "Weiter Kennzahlen sind: \n", + "\n", + "* Die **Sensitivität** (engl. **Recall**) bezieht die für eine Klasse richtig vorhergesagten Datenpunkte auf die Gesamtzahl der tatsächlich vorhandenen Datensätze der Klasse:\n", + "$$ \n", + " \\text{Recall}_i = \\frac { N_{ii} } { \\sum _j N_{ji} }\n", + "$$\n", + "Sie ist von großer Bedeutung, da in vielen Praxisbeispielen das Modell vor allem daran gemessen wird, ob es die positiven Fälle richtig erkennt. Nehmen wir an, wir trainieren ein Klassifikationsmodell, das anhand von Bildern Krebszellen erkennen soll. In diesem Fall ist es sehr wichtig, dass alle positiven Personen, die also wirklich Krebs haben, erkannt werden, damit man die Krankheit frühzeitig behandeln kann. In diesem Beispiel sind andere Kennzahlen nicht von solch großer Bedeutung, denn es schadet nicht, wenn Personen, die keinen Krebs haben, trotzdem genauer untersucht werden. \n", + "\n", + "* Die **Präzision** ist die relative Häufigkeit einer richtig vorhergesagten Klasse bezogen auf die Gesamtzahl der vorsagten Exemplare dieser Klasse:\n", + "$$ \n", + " \\text{Präzision}_i = \\frac { N_{ii} } { \\sum _j N_{ij} }\n", + "$$\n", + "\n", + "* Die **Genauigkeit** umschreibt die insgesamt richtig Klassifizierten im Verhältnis zu allen Klassifzierungen:\n", + "$$ \n", + " \\text{Genauigkeit} = \\frac { \\sum _i N_{ii} } { \\sum _i \\sum _j N_{ij} }\n", + "$$\n", + "Auf den ersten Blick sehen die Formeln für die Genauigkeit und Präzision relativ ähnlich aus. Ein gutes Machine Learning Modell muss nach dem Training gute Vorhersage für neue, ungesehene Daten liefern. Jedoch ist ein solches Modell nur dann wertvoll, wenn es sehr oft gute Vorhersagen liefert und die guten Ergebnisse nicht nur selten auftreten. Diese Eigenschaften lassen sich mit der Genauigkeit und Präzision messen.\n", + "<br>\n", + "Die Genauigkeit misst, wie nahe die Vorhersagen an den gewünschten Werten liegt. Bei einer Klassifikation bedeutet das also, wie oft die vorhergesagte Klasse auch der tatsächlichen entspricht. Die Präzision hingegen misst, wie scharf die Ergebnisse sind, d.h. wie reproduzierbar die Ergebnisse sind. Konkret bedeutet dies, wie nahe die Ergebnisse für ähnliche Eigenschaftswerte beeinander liegen. Dies gibt eine Aussage über die Reproduzierbarkeit von Ergebnissen da ein Modell nicht wirklich brauchbar ist, wenn es für denselben bei zwei Vorhersagen zwei sehr unterschiedliche Werte liefert. \n", + "\n", + "* Der **F-Score**, auch F1-Score genannt, ist eine im maschinellen Lernen und in der Datenanalyse weit verbreitete Metrik zur Bewertung der Leistung von Klassifizierungsmodellen. Er ist ein Maß für die *Präzision* und den *Recall* eines Modells, wobei die Präzision den Anteil der wahrhaft richtigen Ergebnisse an allen vorhergesagten richtigen Ergebnissen und der Recall den Anteil der wahrhaft richtigen Ergebnisse an allen tatsächlich richtigen Ergebnissen angibt. <br>\n", + "Der F-Score ist ein gewichtetes harmonisches Mittel aus Precision und Recall und liefert eine einzige Zahl, die die Leistung eines Modells in Bezug auf Precision und Recall zusammenfasst. \n", + "Der **F-Score reicht von 0 bis 1**, wobei ein höherer Wert für eine bessere Modellleistung steht. \n", + "Der F1-Score wird häufig in Situationen verwendet, in denen ein Ungleichgewicht zwischen der Anzahl positiver und negativer Beispiele in den Daten besteht, da er eine ausgewogene Bewertung der Leistung eines Modells unabhängig von der Klassenverteilung liefert.\n", + "$$\n", + " \\text{F-Score} = \\frac {2 \\cdot \\text{Recall} \\cdot \\text{Precision}} { \\text{Recall} + \\text{Precision} }\n", + "$$\n", + "Durch die Nutzung des sogenannten harmonischen Mittels, und nicht des klassischen arithmetischen Mittel, wird sichergestellt, dass Extremwerte einer der beiden Größen deutlich stärker bestraft werden. " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "1f933cdb-9327-4b4a-a545-0c4d86350141", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Trainingsergebnis: 0.992\n", + "[[ 7 0 0]\n", + " [ 0 11 0]\n", + " [ 0 1 11]]\n", + " precision recall f1-score support\n", + "\n", + " 0.0 1.00 1.00 1.00 7\n", + " 1.0 0.92 1.00 0.96 11\n", + " 2.0 1.00 0.92 0.96 12\n", + "\n", + " accuracy 0.97 30\n", + " macro avg 0.97 0.97 0.97 30\n", + "weighted avg 0.97 0.97 0.97 30\n", + "\n", + "Testergebnis: 0.967\n" + ] + } + ], + "source": [ + "print(\"Trainingsergebnis: %5.3f\" % mlp.score( X_train, y_train ) )\n", + "\n", + "predictions = mlp.predict(X_test) # Evaluation anhand der Testdaten \n", + "\n", + "from sklearn.metrics import classification_report, confusion_matrix \n", + "print( confusion_matrix( y_test, predictions ) ) # Konfusionsmatrix Zeile: prediction Spalte: wahr\n", + "print( classification_report( y_test, predictions ) ) # Ausgabe precison, recall und f1-score\n", + "\n", + "print( \"Testergebnis: %5.3f\" % mlp.score( X_test, y_test ) ) # Test und Ergebnisausgabe des Modells" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "56c547b7-1952-4232-9a41-170a4f81d37d", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wichtungen: [array([[-0.18175367, 0.51967945, -0.03682395, -0.1205498 , 0.16938574],\n", + " [-0.71339316, 0.1364212 , 0.68704501, 0.83270091, 0.40263018],\n", + " [ 1.02301099, -0.62040153, -0.54177161, -0.58501333, -0.41696715],\n", + " [ 0.53283474, -0.92627887, 0.24828775, 1.00029128, -0.58660593]]), array([[-1.64319389, 0.99261637, 0.48133661],\n", + " [ 0.19205787, -0.35979584, 1.30116347],\n", + " [ 0.49705423, -0.08875001, 1.10067155],\n", + " [ 0.31704068, -1.41095649, -0.4765751 ],\n", + " [ 0.53497596, -0.47725283, 2.05482876]]), array([[ 1.80286371, -0.92012959, -0.82321987],\n", + " [-2.25024998, 0.78176397, 0.15917304],\n", + " [ 0.98562046, 2.12981661, -2.50680455]])]\n", + "Biases: [array([ 0.36436877, 0.79437877, 0.03455584, -0.69635934, 0.69751936]), array([-0.32413316, 0.70181907, 0.44662492]), array([ 0.51175497, -0.31347659, 0.17286358])]\n" + ] + } + ], + "source": [ + "# Folgendes gibt die Werte der Gewichte pro Layer aus\n", + "print( \"Wichtungen:\", mlp.coefs_ )\n", + "print( \"Biases: \", mlp.intercepts_ ) " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "611bd33f-f191-4a6d-bd80-cdbdca083329", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0. 2. 0. 1.]\n" + ] + } + ], + "source": [ + "# Modellanwendung zur Vorhersage auf folgenden Werten \n", + "print( mlp.predict( [[5.1,3.5,1.4,0.2], [5.9,3.,5.1,1.8], [4.9,3.,1.4,0.2], [5.8,2.7,4.1,1.]] ) )" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "31b7dbe2-0297-42ed-86c2-e0488d7f085e", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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W6+++qrWrVunw4cP6/rrrzexWv+pq6tTWlqalixZ0u7zv/vd7/THP/5RS5cu1aeffqqwsDBNnz5djY2N3nNuvfVWffHFF1qzZo3eeustrV+/Xnfeeae/PoLfnKqtJOmqq65q8z17+eWX2zzfH9pq3bp1mjdvnj755BOtWbNGTU1NuvLKK1VXV+c951S/c263W1dffbVcLpc+/vhjvfDCC1q+fLkWLlxoxkfqFp1pJ0m644472nynfve733mf6w/tJEmDBg3SI488opycHG3atEmXXXaZrr32Wn3xxReSevj3yeinpk6dasybN8/7s9vtNpKSkozFixebWJW5Fi1aZKSlpbX7XGVlpREYGGi8+uqr3mM7d+40JBnZ2dl+qrBnkGS88cYb3p89Ho+RkJBgPProo95jlZWVht1uN15++WXDMAxjx44dhiTjs88+857zzjvvGBaLxTh06JDfave3r7eVYRjGnDlzjGuvvbbDa/prW5WUlBiSjHXr1hmG0bnfudWrVxtWq9UoKirynvPMM88YkZGRhtPp9O8H8JOvt5NhGMYll1xi3HvvvR1e0x/bqVV0dLTx3HPP9fjvU7/sGXG5XMrJyVFmZqb3mNVqVWZmprKzs02szHy7d+9WUlKShg0bpltvvVX5+fmSpJycHDU1NbVps9GjR2vw4MH9vs3y8vJUVFTUpm0cDofS09O9bZOdna2oqChNmTLFe05mZqasVqs+/fRTv9dstrVr12rgwIEaNWqU7r77bpWVlXmf669tVVVVJUmKiYmR1LnfuezsbI0fP967N5gkTZ8+XdXV1d5/Dfc1X2+nVv/4xz8UGxurcePGacGCBaqvr/c+1x/bye12a8WKFaqrq1NGRkaP/z75vFFeX1BaWiq3292mwSUpPj5eX375pUlVmS89PV3Lly/XqFGjVFhYqF/96le66KKLtH37dhUVFSkoKEhRUVFtromPj1dRUZE5BfcQrZ+/ve9T63NFRUUaOHBgm+cDAgIUExPT79rvqquu0vXXX6+hQ4dq7969+vnPf64ZM2YoOztbNputX7aVx+PRD3/4Q11wwQXeTUQ78ztXVFTU7veu9bm+pr12kqRbbrlFQ4YMUVJSkrZu3aqf/exn2rVrl15//XVJ/audtm3bpoyMDDU2Nio8PFxvvPGGxowZo9zc3B79feqXYQTtmzFjhve/J0yYoPT0dA0ZMkSvvPKKQkJCTKwMfclNN93k/e/x48drwoQJGj58uNauXavLL7/cxMrMM2/ePG3fvr3NHC2cqKN2On4+0fjx45WYmKjLL79ce/fu1fDhw/1dpqlGjRql3NxcVVVV6bXXXtOcOXO0bt06s8s6pX45TBMbGyubzXbCLOLi4mIlJCSYVFXPExUVpZEjR2rPnj1KSEiQy+VSZWVlm3NoM3k//8m+TwkJCSdMjm5ublZ5eXm/b79hw4YpNjZWe/bskdT/2uqee+7RW2+9pY8++kiDBg3yHu/M71xCQkK737vW5/qSjtqpPenp6ZLU5jvVX9opKChII0aM0OTJk7V48WKlpaXpySef7PHfp34ZRoKCgjR58mRlZWV5j3k8HmVlZSkjI8PEynqW2tpa7d27V4mJiZo8ebICAwPbtNmuXbuUn5/f79ts6NChSkhIaNM21dXV+vTTT71tk5GRocrKSuXk5HjP+fDDD+XxeLz/4+yvDh48qLKyMiUmJkrqP21lGIbuuecevfHGG/rwww81dOjQNs935ncuIyND27ZtaxPe1qxZo8jISI0ZM8Y/H6Sbnaqd2pObmytJbb5Tfb2dOuLxeOR0Onv+96lbp8f2YCtWrDDsdruxfPlyY8eOHcadd95pREVFtZlF3N/86Ec/MtauXWvk5eUZ//3vf43MzEwjNjbWKCkpMQzDMO666y5j8ODBxocffmhs2rTJyMjIMDIyMkyu2j9qamqMLVu2GFu2bDEkGY8//rixZcsW48CBA4ZhGMYjjzxiREVFGW+++aaxdetW49prrzWGDh1qNDQ0eF/jqquuMiZNmmR8+umnxoYNG4yzzjrLuPnmm836SN3mZG1VU1Nj/PjHPzays7ONvLw844MPPjDOOecc46yzzjIaGxu9r9Ef2uruu+82HA6HsXbtWqOwsND7qK+v955zqt+55uZmY9y4ccaVV15p5ObmGu+++64RFxdnLFiwwIyP1C1O1U579uwxHnroIWPTpk1GXl6e8eabbxrDhg0zLr74Yu9r9Id2MgzDuP/++41169YZeXl5xtatW43777/fsFgsxvvvv28YRs/+PvXbMGIYhvGnP/3JGDx4sBEUFGRMnTrV+OSTT8wuyVSzZs0yEhMTjaCgICM5OdmYNWuWsWfPHu/zDQ0Nxve//30jOjraCA0NNb75zW8ahYWFJlbsPx999JEh6YTHnDlzDMNoub33wQcfNOLj4w273W5cfvnlxq5du9q8RllZmXHzzTcb4eHhRmRkpDF37lyjpqbGhE/TvU7WVvX19caVV15pxMXFGYGBgcaQIUOMO+6444R/BPSHtmqvjSQZf/3rX73ndOZ3bv/+/caMGTOMkJAQIzY21vjRj35kNDU1+fnTdJ9TtVN+fr5x8cUXGzExMYbdbjdGjBhh/OQnPzGqqqravE5fbyfDMIzvfe97xpAhQ4ygoCAjLi7OuPzyy71BxDB69vfJYhiG0b19LwAAAB3rl3NGAABAz0EYAQAApiKMAAAAUxFGAACAqQgjAADAVIQRAABgKsIIAAAwFWEEAACYijACAABMRRgBAACmIowAAABTEUYAAICp/n/HlyC2oB6lnQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Visualisierung der Loss-Kurve\n", + "import matplotlib.pyplot as plt\n", + "loss_values = mlp.loss_curve_\n", + "plt.plot(loss_values)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "91376581-9808-4db2-840d-254291726be3", + "metadata": {}, + "source": [ + "#### <font color='blue'>**Regressionsbeispiele**</font>" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "50005cd0-1f67-4fe7-911d-92a26bd61a1c", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "def generate_data(expanded=False): \n", + " rng = np.random.RandomState(0)\n", + " n_sample = 100\n", + " x_max, x_min = 1.4, -1.4\n", + " x_delta = x_max - x_min\n", + " x_train = np.sort(rng.rand(n_sample) * x_delta - x_delta / 2)\n", + " y_train = x_train**3 - 0.5 * x_train**2 + rng.randn(n_sample) * 0.3\n", + " x_train = x_train.reshape((-1, 1))\n", + "\n", + " if expanded: \n", + " x_train = np.concatenate([x_train, x_train**2, x_train**3], axis=1)\n", + " return x_train, y_train" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "3ccfd473-fdc4-4ed5-9bb4-143bf552a2c5", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "X_train, y_train = generate_data(expanded=False)\n", + "\n", + "from sklearn.neural_network import MLPRegressor\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.metrics import mean_squared_error\n", + "\n", + "if True: \n", + " regressor = MLPRegressor(hidden_layer_sizes=(5,), random_state=1, \n", + " activation='identity', # ‘identity’, ‘logistic’, ‘tanh’, ‘relu’\n", + " max_iter=500)\n", + "else: \n", + " regressor = LinearRegression()\n", + " \n", + "regressor.fit(X_train, y_train)\n", + "\n", + "#print( regressor.coefs_ )\n", + "#print( regressor.intercepts_ )\n", + "\n", + "y_predicted = regressor.predict(X_train)\n", + "mse = mean_squared_error(y_train, y_predicted)\n", + "\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "data_frame = pd.DataFrame({'input': X_train[:,0], 'output': y_train})\n", + "ax1 = data_frame.plot.scatter(x='input', y='output', c='DarkBlue')\n", + "ax1.plot( X_train[:,0], y_predicted, color='red')\n", + "_ = ax1.set_title(f\"Mean squared error = {mse:.3f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "27ea2669-bbc3-4bf0-9c7b-e67bc6ae2640", + "metadata": {}, + "source": [ + "Es ist wichtig zu beachten, dass das gelernte Modell nicht in der Lage ist, die nicht-lineare Beziehung zwischen Daten und Ziel zu behandeln, da lineare Modelle davon ausgehen, dass die Beziehung zwischen Daten und Ziel linear ist.\n", + "\n", + "Denkbar sind 3 Möglichkeiten, dieses Problem zu lösen:\n", + "\n", + "* Auswahl eines Modells, das mit Nichtlinearität umgehen kann,\n", + "* Entwicklung eines reichhaltigeren Satzes von Merkmalen durch Einbeziehung von Expertenwissen, das direkt von einem einfachen linearen Modell verwendet werden kann, oder\n", + "* Verwendung eines \"Kerns\", um eine lokal basierte Entscheidungsfunktion anstelle einer globalen linearen Entscheidungsfunktion zu haben.\n", + "\n", + "Der erste Punkt soll anhand eines **Entscheidungsbaum-Regressors**, der von Haus aus mit Nichtlinearität umgehen kann, veranschaulicht werden.\n" + ] + }, + { + "cell_type": "markdown", + "id": "68b4561d-735e-4002-ba6f-6d4eca54cd5a", + "metadata": {}, + "source": [ + "### <font color='blue'>**Entscheidungsbäume**</font>\n", + "\n", + "Entscheidungsbäume (Decision Trees, DTs) sind eine **überwachte Lernmethode**, die für **Klassifizierung und Regression** verwendet wird. Ziel ist es, ein Modell zu erstellen, das den Wert einer Zielvariablen vorhersagt, indem einfache **Entscheidungsregeln** aus den Datenmerkmalen abgeleitet werden. Ein Baum kann als eine stückweise konstante Annäherung betrachtet werden. Ein Entscheidungsbaum-Regressor versucht also, eine kontinuierliche Zielvariable vorherzusagen, indem er die Merkmalsvariablen in **kleine Zonen unterteilt, wobei jede Zone eine konstante Vorhersage enthält**. Entscheidungsbäume lernen aus den Daten eine Reihe von Wenn-dann-also-Entscheidungsregeln zu approximieren. Je tiefer der Baum ist, desto komplexer sind die Entscheidungsregeln und desto besser passt das Modell.\n", + "\n", + "Bei **jedem Modellierunsgschritt** wird nun das **Attribut (z.B. Intervallgrenze) gesucht**, mit welchem sich die Trainingsdaten in diesem Schritt bezüglich des Zielattributs am besten klassifizieren lassen. Das ermittelte Attribut wird nun zur Aufteilung der Daten verwendet. Auf die so entstandenen Teilmengen wird die Prozedur rekursiv angewendet, bis in jeder Teilmenge nur noch Objekte mit einer Klassifikation enthalten sind. Am Ende ist ein Entscheidungsbaum entstanden, der das Erfahrungswissen des Trainingsdatensatzen beschreibt.\n", + "\n", + "<div>\n", + "<img src=\"./Pics/Entscheidungsbaum.png\" width=\"700\"/>\n", + "</div>\n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "ddaa9f73-1ae3-4707-a26c-e72c1a96bf9d", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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PYSoqCh8/PHH2Lx5s933raKiAh9++CHS09Mxe/ZsVFZWYunSpUhJScGvv/6KIUOGmO2/bNkynD9/Hvfccw/UajXCwsLw119/4fLLL0fPnj0xb948BAQE4Msvv8TUqVPx9ddf4/rrrwcAnD17FuPHj0djY6Npv/fff9/qX9bWXsfo/vvvR3h4OJ599llUV1ebthcXF2PSpEm49dZbcfvttyMiIgK1tbUYN24ccnNz8eCDD6JPnz746quvMHPmTJSVleHhhx/u8D588MEHeOihhzBt2jQ8/PDDOH/+PPbt24ddu3a1G8CNioqKrLoHQUFBFptws7KyAADDhw832x4VFYVevXqZnu9IbW0tqqurUVVVhZ9++gnLli3DqFGjLP6ssrKycPDgQfzjH/+w6hot6fV67Nu3D3fddVer50aMGIH169ejsrISQUFBdp2/Lfa8zva0d++HDRsGpVKJrKws3H777RaP79u3L4KDg822G5uw9u7di+joaFNfoOXLl2PUqFG44oorUFZWhueffx5ardYsPJGbkrvqiTyfscnkt99+E2+++aYICgoSNTU1QgghbrrpJjF+/HghhGjV7LVt2zYBQHz66adm51u3bl2r7cbzNXfvvfcKf39/cf78edO2sWPHCgDif//7n2lbXV2diIyMFDfeeKPF1/H6668LAKKwsLDdfd544w0BQHz55ZembdXV1SIhIUEAEFu2bDFtj4mJETNmzGh1jrFjx4qxY8eaHjc2NrZqsiktLRURERHirrvuMm07evSoACCCg4NFQUGB2f4TJkwQgwYNMrsXer1ejB49WiQmJpq2PfLIIwKA2LVrl2lbQUGBCAkJsarZy9rrGN8TY8aMadV8YfwZvfvuu2bbjff2k08+MW2rr68Xo0aNEoGBgaKioqLD+3DdddeJAQMGWHwN7QFg1deyZcssnufVV18VAMTx48dbPXfppZeKyy67zKryLFq0yOy6EyZMaPOczT3++OMCgDhw4IBV12ipsLBQABDPPfdcq+feeustAUAcOnTI6vNZ0+xlz+tszwMPPCBUKlWbz4WHh4tbb73V4vEDBgwQV111Vavtf/31V6v3bE5Ojhg6dKhZ2ePi4my6PyQfNnuRpG6++WbU1tZi9erVqKysxOrVq9v9i/urr75CSEgIrr76ahQVFZm+hg0bhsDAQLNmn+Z/BVZWVqKo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\n", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "X_train, y_train = generate_data(expanded=False)\n", + "\n", + "from sklearn.tree import DecisionTreeRegressor\n", + "\n", + "tree1 = DecisionTreeRegressor(max_depth=1).fit(X_train, y_train)\n", + "y_predicted1 = tree1.predict(X_train)\n", + "mse1 = mean_squared_error(y_train, y_predicted1)\n", + "\n", + "tree2 = DecisionTreeRegressor(max_depth=2).fit(X_train, y_train)\n", + "y_predicted2 = tree2.predict(X_train)\n", + "mse2 = mean_squared_error(y_train, y_predicted2)\n", + "\n", + "tree3 = DecisionTreeRegressor(max_depth=3).fit(X_train, y_train)\n", + "y_predicted3 = tree3.predict(X_train)\n", + "mse3 = mean_squared_error(y_train, y_predicted3)\n", + "\n", + "\n", + "data_frame = pd.DataFrame({'input': X_train[:,0], 'output': y_train})\n", + "ax1 = data_frame.plot.scatter(x='input', y='output', c='DarkBlue')\n", + "ax1.plot( X_train, y_predicted1, color='blue')\n", + "ax1.plot( X_train, y_predicted2, color='red')\n", + "ax1.plot( X_train, y_predicted3, color='green')\n", + "_ = ax1.set_title(f\"Mean squared errors = {mse1:.2f} {mse2:.2f} {mse3:.2f}\")\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "76b4b1aa-a86f-4240-815c-ea6a30d04415", + "metadata": {}, + "source": [ + "Anstatt ein Modell zu haben, das von Haus aus mit Nichtlinearität umgehen kann, könnten wir unsere Daten auch modifizieren: Wir könnten neue Merkmale erstellen, die von den ursprünglichen Merkmalen abgeleitet sind, indem wir etwas Expertenwissen nutzen. In diesem Beispiel wissen wir, dass wir eine kubische und quadratische Beziehung zwischen Daten und Ziel haben (weil wir die Daten erzeugt haben).\n", + "\n", + "Mit dieser Information könnten wir zwei neue Merkmale ($x^2$ und $x^3$) wie folgt erstellen. \n", + "Diese Art der Transformation wird als polynomiale Merkmalserweiterung bezeichnet:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "fcd2a5e5-66de-4b9b-94ec-434224a806dd", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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/bbC57V/1V+9ehXR0dHw8/PDjBkzEB4eDm9vb/z555+YNGlSuSpNRZUGQJpvyJjq1atjx44d2Lp1K9avX4+UlBSsWLECDz/8MH755ReD5zXk7gRJq7S0VO9cy5cvx4gRI9C/f39MnDgRderUgbu7O2bOnIns7OwK4yxL+/5ff/11xMXFVfiaERERZsVeEUtex1AiYGofI2PMOYdarTZpGHr16tXh7+9v8Pn69esDAM6fP1/uufPnz6NWrVpGp3Qoe3xwcHC548tW5Dw9PfHll1/ivffeQ0ZGBurWrYumTZsiMTERbm5usvxMiaqKyQ/RbQMGDMCYMWOwZ88erFixwuB+4eHhSEtLw4MPPmj0i2zbtm24cuUKVq9ejW7duum2Hz9+XNa4Aam5oUePHujRowc++ugjvP/++/i///s/bN26FbGxsQgJCcG///4LIYRecnP06NFy5woMDMTVq1fLbT958iTCwsJ0j5OTkxEWFobVq1frnXPatGkmxaw9l4eHB2JjY43uGxISgszMzHLbK4q/Kq9jiZCQEPz999/QaDR61R9ts2ZISIjF53788cfLNZtVZPjw4ViyZInB5xs2bIigoCDs27ev3HMVdU6/m/b5ffv26SU6586dw5kzZypsPq1bty7q1q0LQEqct23bho4dO7LyQw6BfX6IbvP19cXChQvxn//8B48++qjB/QYPHozS0lK888475Z4rKSnRJQ7aKknZyk1xcTH++9//yhq3Wq0ut037ZaVtpujduzfOnTunG5IMSHPUfPHFF+WODQ8Px549e/QqDuvWrcPp06f19qvo/e3duxe7d+82Ke46deogJiYGn3/+eYUVibIT4vXu3Rt79uzB77//rve8oeqbpa9jid69eyMnJ0cvYS4pKcG8efPg6+uL6Ohoi88tV58fQOprdPfPcfPmzcjIyMATTzyh23br1i0cOXJE71q1aNECzZo1wxdffKE3TcPChQuhUqkMNhFrzZkzB+fPn8eECRPMeftEVsPKD1EZw4cPr3Sf6OhojBkzBjNnzsSBAwfQs2dPeHh4IDMzE6tWrcKnn36KQYMGoUuXLggMDMTw4cPxyiuvQKVSYdmyZZU2Y5lrxowZ2LFjB/r06YOQkBBcvHgR//3vf9GoUSN07doVgNSBd/78+Rg2bBj279+P+vXrY9myZRVO0Ddq1CgkJycjPj4e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3YmIiOyIlR+5zZsHAPCd8DJiHgnTeyqWQ92JiIjsjpUfOf3+u3Tz9ET1cS8ipU4dZGbmIisrFxERgaz4EBEROQAmP3KaP1/6d8gQoE4dAEBkJJMeIiIiR8JmL7lcvAiskDo6Y+xY+8ZCREREBjH5kcsXXwDFxUCHDtKNiIiIHBKTHzncugUsWiTdf/ll+8ZCRERERjH5kcOaNcDZs1I/nyeesHc0REREZASTHzncHt6O554DvLzsGwsREREZxdFeVSUEkJAA5OUBzz9v72iIiIioEiohhLB3ELaSn58Pf39/5OXlwc/Pz97hEBERkQnk/v5msxcRERG5FCY/RERE5FKY/BAREZFLYfJDRERELoXJDxEREbkUJj9ERETkUpj8EBERkUth8kNEREQuhckPERERuRQmP0RERORSmPwQERGRS2HyQ0RERC6FyQ8RERG5FCY/RERE5FKY/BAREZFLYfJDRERELoXJDxEREbkUJj9ERETkUqrZOwBnl5GhRnb2VUREBCIyMtDe4RAREbk8Jj9WolYXIjFxPVJTT+i2xcWFIimpLwIDve0XGBERkYtjs5eVJCauR1raSb1taWknkZCwzk4REREREcDkxyoyMtRITT2B0lKht720VCA19QQyM3PtFBkREREx+bGC7OyrRp/PymLyQ0REZC9MfqwgPDzA6PMREez4TEREZC9MfqygadNaiIsLhbu7Sm+7u7sKcXGhHPVFRERkR0x+rCQpqS9iY0P0tsXGhiApqa+dIiIiIiKAQ92tJjDQGykpg5CZmYusrFzO80NEROQgmPxYWWQkkx4iIiJHwmYvIiIicilMfoiIiMilsNlLBly/i4iISDkUV/kpKipCmzZtoFKpcODAAbvGolYXIj4+GVFRX6F379Vo2nQx4uOTkZt7065xERERkWGKS37eeOMNNGjQwN5hAOD6XUREREqkqORn48aN+OWXXzBnzhx7h8L1u4iIiBRKMX1+Lly4gNGjR2PNmjXw8fEx6ZiioiIUFRXpHufn58sWjynrd7H/DxERkeNRROVHCIERI0bg+eefR/v27U0+bubMmfD399fdgoODZYuJ63cREREpk12Tn8mTJ0OlUhm9HTlyBPPmzUNBQQGmTJli1vmnTJmCvLw83e306dOyxc71u4iIiJRJJYQQle9mHZcuXcKVK1eM7hMWFobBgwfj559/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\n", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "X_train, y_train = generate_data(expanded=True)\n", + "\n", + "from sklearn.neural_network import MLPRegressor\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.metrics import mean_squared_error\n", + "\n", + "if True: \n", + " regressor = MLPRegressor(hidden_layer_sizes=(5,5,), random_state=1, \n", + " activation='identity', #\n", + " #activation='logistic', #\n", + " #activation='tanh', #\n", + " #activation='relu', # ‘identity’, ‘logistic’, ‘tanh’, ‘relu’\n", + " max_iter=500)\n", + "else: \n", + " regressor = LinearRegression()\n", + " \n", + "regressor.fit(X_train, y_train)\n", + "\n", + "#print( regressor.coefs_ )\n", + "#print( regressor.intercepts_ )\n", + "\n", + "y_predicted = regressor.predict(X_train)\n", + "mse = mean_squared_error(y_train, y_predicted)\n", + "\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "data_frame = pd.DataFrame({'input': X_train[:,0], 'output': y_train})\n", + "ax1 = data_frame.plot.scatter(x='input', y='output', c='DarkBlue')\n", + "ax1.plot( X_train[:,0], y_predicted, color='red')\n", + "_ = ax1.set_title(f\"Mean squared error = {mse:.3f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "bd94af80-46cd-4e65-8b1f-ed2df11bdddd", + "metadata": {}, + "source": [ + "Wir sehen, dass mit einem linearen Modell die Linearitätsbeschränkung des Modells überwunden werden kann, indem die nichtlinearen Komponenten bei der Entwicklung zusätzlicher Merkmale hinzufügen. Hier wurden neue Merkmale erstellt, indem man wusste, wie das Ziel generiert wurde bzw. welche gestzmäßigkeit dahinter stand.\n", + "\n", + "Anstatt solche polynomialen Merkmale manuell zu erstellen, kann man direkt `sklearn.preprocessing.PolynomialFeatures` verwenden.\n", + "\n", + "Um die Verwendung der Klasse `PolynomialFeatures` zu demonstrieren, verwenden wir eine Scikit-Learn-`Pipeline`, die zunächst die Merkmale transformiert und dann das Regressionsmodell anpasst.\n", + "Hierbei wird `include_bias=False` gesetzt, da wir sonst eine Spalte erstellen würden, die perfekt mit dem durch die LinearRegression eingeführten intercept_ korreliert. \n", + "Ob dieses Verfahren der manuellen Erstellung der Merkmale bis zum numerischen Fehler gleichwertig ist, kann überprüft werden, indem das Maximum der absoluten Werte der Differenzen zwischen den von beiden Methoden erzeugten Merkmalen beurteilt wird." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "75709f30-925f-4170-97f5-c255b20abffd", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/png": "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5WLyYwUc6k5ERKRcTH6sgEPdiYiIlIvJj5VwqDsREZEyOcQMz44oMNALKSn9kZmZj6ysfERFBbLFh4iISAGY/FhZdDSTHiIiIiVhtxcRERG5FCY/RERE5FKY/BAREZFLYfJDRERELoXJDxEREbkUJj9ERETkUpj8EBERkUth8kNEREQuhckPERERuRQmP0RERORSmPwQERGRS2HyQ0RERC6FyQ8RERG5FCY/RERE5FKY/BAREZFLYfJDRERELoXJDxEREbkUJj9ERETkUpj8EBERkUth8kNEREQuhckPERERuRQmP0RERORSmPwQERGRS2HyQ0RERC6FyQ8RERG5lBr2DsDZZWTkITu7AFFRgYiODrR3OERERC6PyY+V5OUVY/DgVUhNPaHblpAQjuTkXggM9LJfYERERC6O3V5WMnjwKqSl5ehtS0vLQVLSSjtFRERERACTH6vIyMhDauoJlJUJve1lZQKpqSeQmZlvp8iIiIiIyY8VZGcXGH08K4vJDxERkb0w+bGCyMgAo49HRbHwmYiIyF6Y/FhBkya1kZAQDrVapbddrVYhISGco76IiIjsiMmPlSQn90J8fJjetvj4MCQn97JTRERERARwqLvVBAZ6ISWlPzIz85GVlc95foiIiBSCyY+VRUcz6SEiIlISdnsRERGRS2HyQ0RERC6F3V4y4PpdREREjsPhWn5KSkrQqlUrqFQq7N+/366x5OUVIzFxCWJifkTPnsvQpMksJCYuQX7+DbvGRURERIY5XPLz1ltvITg42N5hAOD6XURERI7IoZKfNWvWYO3atZgyZYq9Q+H6XURERA7KYWp+zp8/j5EjR2L58uXw8fEx6ZiSkhKUlJTo7hcVFckWjynrd7H+h4iISHkcouVHCIHhw4fj+eefR9u2bU0+bvLkyfD399fdQkNDZYuJ63cRERE5JrsmP+PGjYNKpTJ6O3LkCKZPn44rV67g7bffNuv8b7/9NgoLC3W3U6dOyRY71+8iIiJyTCohhKh6N+u4ePEiLl++bHSfiIgIDBw4EL///jtUqtuJRllZGdRqNYYMGYK5c+ea9HxFRUXw9/dHYWEh/Pz8qhU7AOTn30BS0kqkpp7QbUtICEdyci8EBnpV+/xEREQk//e3XZMfU508eVKvXufs2bNISEjAkiVL0L59ezRs2NCk88h98bS4fhcREZH1yP39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\n", + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "X_train, y_train = generate_data(expanded=False)\n", + "\n", + "from sklearn.pipeline import make_pipeline\n", + "from sklearn.preprocessing import PolynomialFeatures\n", + "\n", + "regressor = make_pipeline(\n", + " PolynomialFeatures(degree=2, include_bias=False),\n", + " LinearRegression(),\n", + ")\n", + "\n", + "regressor.fit(X_train, y_train)\n", + "\n", + "y_predicted = regressor.predict(X_train)\n", + "mse = mean_squared_error(y_train, y_predicted)\n", + "\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "data_frame = pd.DataFrame({'input': X_train[:,0], 'output': y_train})\n", + "ax1 = data_frame.plot.scatter(x='input', y='output', c='DarkBlue')\n", + "ax1.plot( X_train[:,0], y_predicted, color='red')\n", + "_ = ax1.set_title(f\"Mean squared error = {mse:.3f}\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Semester_2/Einheit_12/Pics/.ipynb_checkpoints/Training-checkpoint.png b/Semester_2/Einheit_12/Pics/.ipynb_checkpoints/Training-checkpoint.png new file mode 100644 index 0000000000000000000000000000000000000000..269c5099c0980556881c25dde81c8a45d9dec138 Binary files /dev/null and b/Semester_2/Einheit_12/Pics/.ipynb_checkpoints/Training-checkpoint.png differ diff --git a/Semester_2/Einheit_12/Pics/AufbauNeuron.png b/Semester_2/Einheit_12/Pics/AufbauNeuron.png new file mode 100644 index 0000000000000000000000000000000000000000..9d40d1e20be907fa1d3bb62667661205ccaa3410 Binary files /dev/null and b/Semester_2/Einheit_12/Pics/AufbauNeuron.png differ diff --git a/Semester_2/Einheit_12/Pics/Bluete.png b/Semester_2/Einheit_12/Pics/Bluete.png new file mode 100644 index 0000000000000000000000000000000000000000..79ceeacd18bd90e6e91b26eccea237da91262a3a Binary files /dev/null and b/Semester_2/Einheit_12/Pics/Bluete.png differ diff --git a/Semester_2/Einheit_12/Pics/Entscheidungsbaum.png b/Semester_2/Einheit_12/Pics/Entscheidungsbaum.png new file mode 100644 index 0000000000000000000000000000000000000000..77adb2c7af79b77ec664d7e3c326a1ad0e7290da Binary files /dev/null and b/Semester_2/Einheit_12/Pics/Entscheidungsbaum.png differ diff --git a/Semester_2/Einheit_12/Pics/Konfusionsmatrix.png b/Semester_2/Einheit_12/Pics/Konfusionsmatrix.png new file mode 100644 index 0000000000000000000000000000000000000000..ed2341911657019df4f1c2a1ee03414d7985d69f Binary files /dev/null and b/Semester_2/Einheit_12/Pics/Konfusionsmatrix.png differ diff --git a/Semester_2/Einheit_12/Pics/Methoden.png b/Semester_2/Einheit_12/Pics/Methoden.png new file mode 100644 index 0000000000000000000000000000000000000000..93c9f922f5d26fe1c67d5d68676445a4b8339c18 Binary files /dev/null and b/Semester_2/Einheit_12/Pics/Methoden.png differ diff --git a/Semester_2/Einheit_12/Pics/Netzwerk.png b/Semester_2/Einheit_12/Pics/Netzwerk.png new file mode 100644 index 0000000000000000000000000000000000000000..3a6884df38a74a201c1a6b2880dc29ad14d93046 Binary files /dev/null and b/Semester_2/Einheit_12/Pics/Netzwerk.png differ diff --git a/Semester_2/Einheit_12/Pics/Neuron.png b/Semester_2/Einheit_12/Pics/Neuron.png new file mode 100644 index 0000000000000000000000000000000000000000..c632b9eb0b6617aaa5912816a2e194d8c48abb10 Binary files /dev/null and b/Semester_2/Einheit_12/Pics/Neuron.png differ diff --git a/Semester_2/Einheit_12/Pics/QRCode.png b/Semester_2/Einheit_12/Pics/QRCode.png new file mode 100644 index 0000000000000000000000000000000000000000..6747198dd58e8e4f1c753a0a1b04ea39023647da Binary files /dev/null and b/Semester_2/Einheit_12/Pics/QRCode.png differ diff --git a/Semester_2/Einheit_12/Pics/Training.png b/Semester_2/Einheit_12/Pics/Training.png new file mode 100644 index 0000000000000000000000000000000000000000..269c5099c0980556881c25dde81c8a45d9dec138 Binary files /dev/null and b/Semester_2/Einheit_12/Pics/Training.png differ diff --git a/Semester_2/Einheit_12/Pics/decision_tree.png b/Semester_2/Einheit_12/Pics/decision_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..43e668f06e662c2b72b78df253e858ccde8ff245 Binary files /dev/null and b/Semester_2/Einheit_12/Pics/decision_tree.png differ diff --git a/Semester_2/Einheit_12/iris.csv b/Semester_2/Einheit_12/iris.csv new file mode 100644 index 0000000000000000000000000000000000000000..fa85845b76a0a20252e05faefb5f4f0df1ba4c02 --- /dev/null +++ b/Semester_2/Einheit_12/iris.csv @@ -0,0 +1,151 @@ +sepal length,sepal width,petal length,petal width,species +5.1,3.5,1.4,0.2,Iris-setosa +4.9,3,1.4,0.2,Iris-setosa +4.7,3.2,1.3,0.2,Iris-setosa +4.6,3.1,1.5,0.2,Iris-setosa +5,3.6,1.4,0.2,Iris-setosa +5.4,3.9,1.7,0.4,Iris-setosa +4.6,3.4,1.4,0.3,Iris-setosa +5,3.4,1.5,0.2,Iris-setosa +4.4,2.9,1.4,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +5.4,3.7,1.5,0.2,Iris-setosa +4.8,3.4,1.6,0.2,Iris-setosa +4.8,3,1.4,0.1,Iris-setosa +4.3,3,1.1,0.1,Iris-setosa +5.8,4,1.2,0.2,Iris-setosa +5.7,4.4,1.5,0.4,Iris-setosa +5.4,3.9,1.3,0.4,Iris-setosa +5.1,3.5,1.4,0.3,Iris-setosa +5.7,3.8,1.7,0.3,Iris-setosa +5.1,3.8,1.5,0.3,Iris-setosa +5.4,3.4,1.7,0.2,Iris-setosa +5.1,3.7,1.5,0.4,Iris-setosa +4.6,3.6,1,0.2,Iris-setosa +5.1,3.3,1.7,0.5,Iris-setosa +4.8,3.4,1.9,0.2,Iris-setosa +5,3,1.6,0.2,Iris-setosa +5,3.4,1.6,0.4,Iris-setosa +5.2,3.5,1.5,0.2,Iris-setosa +5.2,3.4,1.4,0.2,Iris-setosa +4.7,3.2,1.6,0.2,Iris-setosa +4.8,3.1,1.6,0.2,Iris-setosa +5.4,3.4,1.5,0.4,Iris-setosa +5.2,4.1,1.5,0.1,Iris-setosa +5.5,4.2,1.4,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +5,3.2,1.2,0.2,Iris-setosa +5.5,3.5,1.3,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +4.4,3,1.3,0.2,Iris-setosa +5.1,3.4,1.5,0.2,Iris-setosa +5,3.5,1.3,0.3,Iris-setosa +4.5,2.3,1.3,0.3,Iris-setosa +4.4,3.2,1.3,0.2,Iris-setosa +5,3.5,1.6,0.6,Iris-setosa +5.1,3.8,1.9,0.4,Iris-setosa +4.8,3,1.4,0.3,Iris-setosa +5.1,3.8,1.6,0.2,Iris-setosa +4.6,3.2,1.4,0.2,Iris-setosa +5.3,3.7,1.5,0.2,Iris-setosa +5,3.3,1.4,0.2,Iris-setosa +7,3.2,4.7,1.4,Iris-versicolor +6.4,3.2,4.5,1.5,Iris-versicolor +6.9,3.1,4.9,1.5,Iris-versicolor +5.5,2.3,4,1.3,Iris-versicolor +6.5,2.8,4.6,1.5,Iris-versicolor +5.7,2.8,4.5,1.3,Iris-versicolor +6.3,3.3,4.7,1.6,Iris-versicolor +4.9,2.4,3.3,1,Iris-versicolor +6.6,2.9,4.6,1.3,Iris-versicolor +5.2,2.7,3.9,1.4,Iris-versicolor +5,2,3.5,1,Iris-versicolor +5.9,3,4.2,1.5,Iris-versicolor +6,2.2,4,1,Iris-versicolor +6.1,2.9,4.7,1.4,Iris-versicolor +5.6,2.9,3.6,1.3,Iris-versicolor +6.7,3.1,4.4,1.4,Iris-versicolor +5.6,3,4.5,1.5,Iris-versicolor +5.8,2.7,4.1,1,Iris-versicolor +6.2,2.2,4.5,1.5,Iris-versicolor +5.6,2.5,3.9,1.1,Iris-versicolor +5.9,3.2,4.8,1.8,Iris-versicolor +6.1,2.8,4,1.3,Iris-versicolor +6.3,2.5,4.9,1.5,Iris-versicolor +6.1,2.8,4.7,1.2,Iris-versicolor +6.4,2.9,4.3,1.3,Iris-versicolor +6.6,3,4.4,1.4,Iris-versicolor +6.8,2.8,4.8,1.4,Iris-versicolor +6.7,3,5,1.7,Iris-versicolor +6,2.9,4.5,1.5,Iris-versicolor +5.7,2.6,3.5,1,Iris-versicolor +5.5,2.4,3.8,1.1,Iris-versicolor +5.5,2.4,3.7,1,Iris-versicolor +5.8,2.7,3.9,1.2,Iris-versicolor +6,2.7,5.1,1.6,Iris-versicolor +5.4,3,4.5,1.5,Iris-versicolor +6,3.4,4.5,1.6,Iris-versicolor +6.7,3.1,4.7,1.5,Iris-versicolor +6.3,2.3,4.4,1.3,Iris-versicolor +5.6,3,4.1,1.3,Iris-versicolor +5.5,2.5,4,1.3,Iris-versicolor +5.5,2.6,4.4,1.2,Iris-versicolor +6.1,3,4.6,1.4,Iris-versicolor +5.8,2.6,4,1.2,Iris-versicolor +5,2.3,3.3,1,Iris-versicolor +5.6,2.7,4.2,1.3,Iris-versicolor +5.7,3,4.2,1.2,Iris-versicolor +5.7,2.9,4.2,1.3,Iris-versicolor +6.2,2.9,4.3,1.3,Iris-versicolor +5.1,2.5,3,1.1,Iris-versicolor +5.7,2.8,4.1,1.3,Iris-versicolor +6.3,3.3,6,2.5,Iris-virginica +5.8,2.7,5.1,1.9,Iris-virginica +7.1,3,5.9,2.1,Iris-virginica +6.3,2.9,5.6,1.8,Iris-virginica +6.5,3,5.8,2.2,Iris-virginica +7.6,3,6.6,2.1,Iris-virginica +4.9,2.5,4.5,1.7,Iris-virginica +7.3,2.9,6.3,1.8,Iris-virginica +6.7,2.5,5.8,1.8,Iris-virginica +7.2,3.6,6.1,2.5,Iris-virginica +6.5,3.2,5.1,2,Iris-virginica +6.4,2.7,5.3,1.9,Iris-virginica +6.8,3,5.5,2.1,Iris-virginica +5.7,2.5,5,2,Iris-virginica +5.8,2.8,5.1,2.4,Iris-virginica +6.4,3.2,5.3,2.3,Iris-virginica +6.5,3,5.5,1.8,Iris-virginica +7.7,3.8,6.7,2.2,Iris-virginica +7.7,2.6,6.9,2.3,Iris-virginica +6,2.2,5,1.5,Iris-virginica +6.9,3.2,5.7,2.3,Iris-virginica +5.6,2.8,4.9,2,Iris-virginica +7.7,2.8,6.7,2,Iris-virginica +6.3,2.7,4.9,1.8,Iris-virginica +6.7,3.3,5.7,2.1,Iris-virginica +7.2,3.2,6,1.8,Iris-virginica +6.2,2.8,4.8,1.8,Iris-virginica +6.1,3,4.9,1.8,Iris-virginica +6.4,2.8,5.6,2.1,Iris-virginica +7.2,3,5.8,1.6,Iris-virginica +7.4,2.8,6.1,1.9,Iris-virginica +7.9,3.8,6.4,2,Iris-virginica +6.4,2.8,5.6,2.2,Iris-virginica +6.3,2.8,5.1,1.5,Iris-virginica +6.1,2.6,5.6,1.4,Iris-virginica +7.7,3,6.1,2.3,Iris-virginica +6.3,3.4,5.6,2.4,Iris-virginica +6.4,3.1,5.5,1.8,Iris-virginica +6,3,4.8,1.8,Iris-virginica +6.9,3.1,5.4,2.1,Iris-virginica +6.7,3.1,5.6,2.4,Iris-virginica +6.9,3.1,5.1,2.3,Iris-virginica +5.8,2.7,5.1,1.9,Iris-virginica +6.8,3.2,5.9,2.3,Iris-virginica +6.7,3.3,5.7,2.5,Iris-virginica +6.7,3,5.2,2.3,Iris-virginica +6.3,2.5,5,1.9,Iris-virginica +6.5,3,5.2,2,Iris-virginica +6.2,3.4,5.4,2.3,Iris-virginica +5.9,3,5.1,1.8,Iris-virginica \ No newline at end of file