KI für Alle: Programmierung: k-nächste Nachbarn (k-NN) mit Scikit-Learn HeiCAD https://www.youtube.com/watch?v=kdHySv_HInM Transkript (automatisch erstellt) 0:00 [Musik] unter K nearest neighbors oder auf Deutsch K nächste Nachbarn abgekürzt knn 0:11 versteht man ein klassifikationsverfahren das nach dem Prinzip arbeitet sag mir wer deine Nachbarn sind und ich sage dir wer du 0:19 bist denn der K nächste nachbarnalgorithmus ordnet eine neue Beobachtung der Klasse zu zu der die meisten RK Nachbarn mit bekannter 0:27 Klassenzugehörigkeit gehören dabei wird die Nachbarschaft durch den Abstand zwischen den Datenpunkten bestimmt am Anfang importieren wir alle 0:35 Module die wir in unserem Programm brauchen werden als erstes siehst du ein neues pyenmodul Namens seborn seborn ist eigentlich ein visualisierungsmodul zur 0:44 Erstellung statistischer Grafiken es bietet aber die Funktion load DataSet an mit deren Hilfe man einige referenzdatensätze aus einem Online 0:53 Repository laden kann in diesem Video arbeiten wir mit dem Parma archipelago Antarctica Penguin Datensatz dieser Datensatz enthält Informationen über 344 1:04 Pinguine die auf drei Inseln des parmaarchipels in der Antarktis beheimatet sind die Merkmale des Datensatzes enthalten verschiedene 1:12 Messdaten die über die Pinguine gesammelt wurden wie Länge und Höhe des Schnabels Länge der Flosse und die Körpermasse bzw das Gewicht das 1:23 zielmerkmal beschreibt die entsprechende Pinguinart dabei gehören die Beobachtungen bzw die Pinguine im Datensatz zu einer der drei Arten 1:32 Adli chinstrap zu deutsch zügelpinguin und gentu zu deutsch eselspinguin Wir laden den Datensatz und speichern ihn in der Variable penguins 1:45 der Datensatz wird in einer Datenstruktur namens dataframe gespeichert wir gehen auf diese Datenstruktur nicht weiter ein lassen 1:52 uns aber mit der Funktion head die ersten fünf Zeilen des Datensatzes mit den merkmalsbezeichnungen Anzeigen in der Ausgabe sehen wir bereits dass 2:00 einige Beobachtung fehlende Werte enthalten dazu kommen wir später noch mal zuerst wandeln wir die Datenstruktur dataframe in der unser Datensatz 2:09 momentan vorliegt in die Datenstruktur ndarray um dafür verwenden wir die Funktion tumpai für die weitere Analyse 2:18 konzentrieren wir uns nur auf die Merkmale Schnabellänge schnabelhöhe flossenlänge und die Körpermasse also wählen wir diese aus 2:26 dem away penguins a aus und Speich die Werte im ND Array xraw ab die erste Spalte des Arrays penguins A enthält die entsprechenden Pinguinarten also wählen 2:38 wir diese aus und speichern die Pinguinarten im zalway y war ab wie wir vorhin gesehen haben fehlen bei einigen Beobachtungen die Werte genau genommen 2:48 betrifft es zwei Beobachtungen da man zwischen diesen und den vollständigen Beobachtungen keine Distanzen berechnen kann bekommt der 2:56 klassifikationsalgorithmus Probleme deshalb entfernen wir die unvollständigen Beobachtungen aus dem Datensatz mach dir keine Sorgen wenn du 3:04 die Befehle dafür nicht verstehst das wird von dir an dieser Stelle nicht erwartet nach Bereinigung verbleiben im Datensatz noch 342 Beobachtungen um sich 3:15 ein besseres Bild über die Verteilung der Beobachtung zu machen visualisieren wir Sie in einem Diagramm da es schwierig ist die Datenpunkte durch alle 3:24 vier Merkmale grafisch darzustellen beschränken wir uns auf die Darstellung der Beobachtung durch die Werte der Merkmale Schnabellänge schnabelhöhe und 3:32 die flossenlänge in einem dreidimensionalen Diagramm dabei markieren wir die Zugehörigkeit zur Pinguinart durch unterschiedliche Farben 3:40 der Datenpunkte die Adel Pinguine werden durch blaue die ginstrap Pinguine durch rote und die gentu Pinguine durch grüne Punkte 3:49 dargestellt im Diagramm sehen wir dass die adeli Pinguine zwar durchschnittlich einen längeren Schnabel als die chinstrap Pinguine haben aber eine klare 3:59 Trennung zwischen diesen beiden Pinguinarten anhand der drei gewählten Merkmale nicht zu beobachten ist dagegen lassen sich die gen 2 Pinguine durch 4:07 eine längere Flosse von den anderen Arten besser trennen bevor wir ein kN näste nachbarnmodell erstellen zerlegen wir 4:15 die Datenmatrix in eine Trainings und eine testmenge dafür benutzen wir die Funktion train Test Split des untermoduls model selection von cyced 4:24 learn diese Funktion erwartet als Eingabe die Datenmatrix mit dem entsprechenden zielmerk mal mit dem Wert 0,1 für den Parameter testsiz legen wir 4:34 fest dass die testmenge 10% aller Beobachtung enthalten soll in den Voreinstellungen der Funktion ist festgelegt dass die Beobachtungen vor 4:43 der Zerlegung gemischt werden für diesen Datensatz ist es besonders wichtig diese Voreinstellung beizubehalten weil die Beobachtung in der ursprünglichen 4:52 Datenmatrix nach dem zielmerkmal sortiert sind würden wir auf das Mischen verzichten wäre die resultierende trainingsmenge für die gesamte 5:00 Datenmenge nicht repräsentativ da eine Art der Pinguine entweder unterrepräsentiert oder gar nicht in der trainingsmenge vertreten wäre mit der 5:09 Wertzuweisung des Parameters random state stellen wir aber sicher dass die Beobachtung im Datensatz auf eine bestimmte Weise durchmischt werden damit 5:18 sichern wir auch die Reproduzierbarkeit unserer Zerlegung beim Parma archipelago Antarctica Penguin datatensatz besteht 5:27 unsere Aufgabe darin ein knneste nach Modell zu entwickeln das anhand der Merkmale eines Pinguins prognostizieren kann zu welcher Pinguinart dieser gehört 5:36 ein K nachbarmodell wird mit der Funktion K neighbors classifier des pycet learn untermoduls nearest neighbors erstellt mit dem Parameter n 5:47 neighbors wird die Anzahl der nächsten Nachbarn festgelegt deren Klassenzugehörigkeit bei der Zuordnung einer neuen Beobachtung herangezogen 5:54 wird wir speichern den Wert dieses Parameters in der Variable K und weisen ihren Wert den Parameter n neighbors zu auf diese Weise findest du die Stelle im 6:05 programmchneller die verändert werden muss wenn du den K nächste nachbarnklassifikator für einen anderen Wert von K ausprobieren 6:12 möchtest neben der nachbarzahl kannst du durch einige andere Parameter der Funktion die distanzfunktion vordefinieren mit deren Hilfe die 6:20 Nachbarn bestimmt werden in den Voreinstellungen ist die euklidische distanzfunktion festgelegt die du sicherlich noch aus der Schule 6:27 kennst das anpassende Modells an die Trainingsdaten erfolgt mit der Funktion fit bei diesem Modell findet kein richtiges Training statt stattdessen 6:37 werden die Beobachtung der trainingsmenge intern in einer speziellen Datenstruktur gespeichert die das schnelle Finden der knächsten 6:44 Nachbarn für eine gegebene distanzfunktion ermöglicht mit der Funktion predict kannst du die Klasse für neue 6:50 Beobachtung prognostizieren wir prognostizieren die klassenzuordnung für alle Beobachtungen der testmenge um sehen zu können wie gut das 6:59 knä nachbarmodell die Klasse für neue Beobachtung schätzen kann geben wir exemplarisch für die erste Beobachtung der testmenge die tatsächliche und die 7:08 durch das knn klassifikationsmodell geschätzte Klasse bzw Pinguinart aus in der Ausgabe sehen wir dass die durch das klassifikationsmodell prognostizierte 7:19 Klasse mit der tatsächlichen Klasse für diese eine Beobachtung übereinstimmt um die Leistung eines klassifikationsmodells zu bewerten 7:27 reicht es nicht aus die tatsächliche und die prognostizierte Klasse für eine Beobachtung miteinander zu vergleichen vielmehr werden diese beiden Werte für 7:35 alle Beobachtung der testmenge miteinander verglichen und zu einem gütemaß zusammengefasst eins dieser gütemaße ist accuracy die auf Deutsch 7:44 auch Genauigkeit oder korrekt klassifizierungsrate genannt wird accuracy ist die Anzahl der richtigen Vorhersagen im Verhältnis zur Gesamtzahl 7:53 aller gemachten Vorhersagen im untermodul Matrix von pycet learn steht die Funktion Score für die Berechnung der accuracy zur 8:02 Verfügung diese Funktion erwartet zwei eindimensionale Arrays als Eingabe dabei soll das erste away die tatsächlichen und das zweite away die geschätzten 8:12 Klassen der Beobachtung enthalten als Ergebnis liefert die Funktion den genauigkeitswert für die Schätzung die tatsächlichen 8:20 klassenzugehörigkeiten der Beobachtung der testmenge sind im a test gespeichert die prognostizierten Klassen haben wir im a PR abgelegt wir übergeben diese 8:31 beiden as der Funktion accuracy Score umuracy für unser K näste nachbarmodell mit K =3 zu berechnen wie du in der Ausgabe sehen 8:41 kannst erreicht unser klassifikationsmodell ein accuracy Wert von 0,77 das heißt für 77% der Beobachtung 8:49 wurde die Klasse richtig prognostiziert wir erhöhen jetzt den Wert für K und schauen wie sich die accuracy verändert für k= 5 fät die 8:58 accuracy auf 0, 66 rter für k= 9 steigt die accuracy wieder auf 0,77 du kannst selbst ausprobieren wie sich die accuracy für unterschiedliche 9:08 Werte von K verändert beim kN nachbarnklassifikator findet zwar keine Anpassung des Modells auf die Trainingsdaten statt dafür kannst du 9:17 durch Ausprobieren unterschiedlicher Werte für den Parameter k und die Wahl der distanzfunktion dein klassifikationsmodell für einen 9:24 bestimmten Datensatz selbst optimieren zum Schluss stellen wir noch die beobacht der testmenge in einem dreidimensionalen Diagramm graphisch da 9:33 dafür verwenden wir wieder nur die ersten drei Merkmale die Schnabellänge die schnabelhöhe und die flossenlänge wir markieren die 9:42 Pinguinarten der Beobachtung durch unterschiedliche Farben dabei stellen wir die tatsächlichen Klassen der Beobachtung durch Rauten und die 9:50 prognostizierten durch Kreuze da im Diagramm kannst du sehen welche Beobachtungen richtig und welche falsch klassifiziert wurden bei den 9:59 klassifizierten Beobachtung stimmen die Farben der Rauten mit den Farben der kreuzen überein bei den falsch klassifizierten Beobachtungen sind Raute 10:07 und Kreuze unterschiedlich eingefärbt die meisten Fehler passieren bei den Beobachtungen die zwischen den Beobachtungen unterschiedlicher Klassen 10:16 liegen in diesem Video hast du gelernt wie man ein knächste nachbarnklassifikationsmodell erstellt und mit seiner Hilfe die 10:23 Klassenzugehörigkeit für neue Beobachtung prognostiziert außerdem weißt du jetzt wie wie man das gütemaß accuracy für ein 10:31 klassifikationsmodell berechnet um die Leistungsfähigkeit des Modells zu [Musik] bewerten