Maschinelles Lernen: K-Means-Clustering | Lazy Programmer Inc | Skillshare

Playback-Geschwindigkeit


1.0x


  • 0.5x
  • 0.75x
  • 1x (normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Maschinelles Lernen: K-Means-Clustering

teacher avatar Lazy Programmer Inc

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

    • 1.

      K-Means-Clustering-Einführungsvideo

      3:03

    • 2.

      Eine einfache Einführung in K-Means-Clustering

      6:55

    • 3.

      Übung: Clusterzentren finden

      9:03

    • 4.

      Lösung: Cluster-Center finden

      10:59

    • 5.

      Übung: Cluster-Zuweisungen finden

      4:54

    • 6.

      Lösung: Cluster-Zuordnungen finden

      6:59

    • 7.

      Übung: K-Means in voller Länge

      6:45

    • 8.

      Lösung: K-Means in voller Länge

      16:13

    • 9.

      K-Means-Ziel (Theorie)

      12:52

    • 10.

      K-Means-Ziel (Code)

      5:04

  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Jedes Niveau

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

81

Teilnehmer:innen

--

Projekte

Über diesen Kurs

Cluster-Analyse ist ein Grundbestandteil für unbeaufsichtigtes maschinelles Lernen und Datenwissenschaft.

Es ist sehr nützlich für Data Mining und Big Data, weil es automatisch Muster in den Daten findet, ohne dass Labels erforderlich sind, im Gegensatz zu überwachtem maschinellem Lernen.

In einer realen Umgebung kannst du dir vorstellen, dass ein Roboter oder eine künstliche Intelligenz nicht immer Zugriff auf die optimale Antwort hat, oder dass es vielleicht keine optimale richtige Antwort gibt. Dieser Roboter sollte in der Lage sein, die Welt auf eigene Faust zu erkunden und Dinge zu lernen, indem er einfach nach Mustern sucht.

Hast du dich jemals gefragt, woher wir die Daten bekommen, die wir in unseren überwachten maschinellen Lernalgorithmen verwenden?

Wir scheinen immer eine schöne CSV oder eine Tabelle zu haben, komplett mit Xs und entsprechenden Ys.

Wenn du selbst nicht an der Datenerfassung beteiligt warst, hast du vielleicht nicht darüber nachgedacht, aber jemand muss diese Daten erstellen!

Diese „Y“ müssen von irgendwo her kommen, und das erfordert meistens manuelle Arbeit.

Manchmal hast du keinen Zugang zu dieser Art von Informationen oder es ist nicht machbar oder teuer, sie zu beschaffen.

Aber du möchtest trotzdem eine Vorstellung von der Struktur der Daten haben. Wenn du Datenanalyse machst, wäre die Automatisierung der Mustererkennung in deinen Daten von unschätzbarem Wert.

Hier kommt unbeaufsichtigtes maschinelles Lernen ins Spiel.

In diesem Kurs werden wir zuerst über Clustering sprechen. Hier versuchen wir, statt auf Etiketten zu trainieren, unsere eigenen Etiketten zu erstellen! Wir tun dies, indem wir Daten gruppieren, die ähnlich aussehen.

In diesem Kurs lernen Sie, wie Sie den k-means-Clustering-Algorithmus erstellen.

Voraussetzungen:

  • Grundlegende Mathematik
  • Grundlegende Python-Programmierung

Triff deine:n Kursleiter:in

Teacher Profile Image

Lazy Programmer Inc

Kursleiter:in
Level: Beginner

Kursbewertung

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen auf Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

Transkripte

1. K-Means Clustering Einführungsvideo: Alle und willkommen zu meinen neuesten Cores Machine Learning mit K-Means Clustering in Python. Also wer bin ich und warum solltest du auf mich hören? Nun, mein Name ist der faule Programmierer und ich bin Autor von über 30 Online-Kursen in Data Science, maschinellem Lernen in der Finanzanalyse. Ich habe zwei Master-Abschlüsse in Ingenieurwesen und Statistik. Meine Karriere in diesem Bereich erstreckt sich über 15 Jahre. Ich habe bei mehreren Unternehmen gearbeitet, die wir heute Big Tech nennen , und mehreren Startups. Mithilfe von Data Science habe ich den Umsatz mit den Teams, die ich geleitet habe, um Millionen von Dollar gesteigert. Aber am wichtigsten ist, dass ich sehr leidenschaftlich daran interessiert bin , Ihnen diese entscheidende Technologie zur Verfügung zu stellen. Worum geht es in diesem Kurs? In diesem Kurs geht es darum, Ihnen einen der grundlegenden Algorithmen und maschinelles Lernen beizubringen , als K-Means-Clustering bekannt ist. Dies ist ein Beispiel für einen unbeaufsichtigten Algorithmus für maschinelles Lernen. heißt , es ist für Datensätze gedacht , die keine Beschriftungen haben. Dieser Kurs konzentriert sich darauf, Ihnen die Funktionsweise des Algorithmus beizubringen und Ihnen zu helfen , ein solides Verständnis zu indem Sie ihn selbst bei k-means implementieren. Diese Fähigkeiten sind entscheidend, wenn Sie Data Science und maschinelles Lernen in der realen Welt betreiben möchten. Wer sollte diesen Kurs belegen und wie sollten Sie sich vorbereiten? Dieser Kurs richtet sich an Studierende, die sich für Data Science und maschinelles Lernen interessieren und bereits Erfahrung mit numerischen Computerbibliotheken wie NumPy und Matplotlib haben numerischen Computerbibliotheken wie . Beachten Sie, dass dies auch impliziert, dass Sie einige Erfahrungen mit Vektor- und Matrixmathematik haben , die in diesem Kurs verwendet werden. Die zweite Fähigkeit, die Sie benötigen, ist eine grundlegende Programmierung. Jede Sprache ist in Ordnung, aber da dieser Kurs Python verwendet , wäre das ideal. Zum Glück ist Python eine sehr einfach zu erlernende Sprache. Wenn Sie also bereits eine andere Sprache beherrschen, sollten Sie kein Problem damit haben, nachzuholen. Und für beide Themen sollte das Verständnis auf High-School-Niveau ausreichend sein und ein Grundverständnis wäre noch besser. also in Bezug auf Ressourcen, Was benötigen Sie also in Bezug auf Ressourcen, um an diesem Kurs teilzunehmen? Zum Glück nicht viel. Sie benötigen einen Computer, einen Webbrowser und die Verbindung zum Internet. Und wenn Sie sich dieses Video ansehen, erfüllen Sie diese Bedingungen bereits. Lassen Sie uns nun darüber sprechen, warum Sie diesen Kurs belegen sollten und was Sie davon erwarten sollten. Einfach ausgedrückt, K-Means-Clustering ist einer der wichtigsten Algorithmen, die in jedem Lehrplan für maschinelles Lernen behandelt werden. Es ist grundlegend, egal ob Sie in den Bereichen Finanzen, Biologie oder in einem anderen Bereich arbeiten , in dem Daten analysiert werden. K-Means-Clustering wird ein nützliches Werkzeug sein. Am Ende dieses Kurses haben Sie genug gelernt, um das Gelernte in realen Datensätzen zu verwenden . Ich hoffe, Sie freuen sich genauso wie ich darauf, etwas über diesen erstaunlichen Algorithmus zu erfahren. Danke fürs Zuhören und wir sehen uns in der nächsten Vorlesung. 2. Eine einfache Einführung in das K-Means Clustering: In diesem Vortrag werde ich Ihnen die Intuition hinter dem K-Means-Clustering vorstellen und wie es funktioniert. Zunächst wissen wir also, dass wir an Daten arbeiten werden, da es sich um einen Algorithmus für maschinelles Lernen handelt . Versuchen wir also, einige Daten zu visualisieren, die wir möglicherweise erhalten. Das Erste, was Sie an diesen Daten bemerken werden , ist, dass alle diese Punkte dieselbe Farbe haben. Das liegt daran, dass wir unbeaufsichtigt lernen. Es gibt also keine Klassen für diese Punkte. Jeder Punkt ist nur der Vektor, und das ist alles, was wir über jeden Punkt wissen. Wir wissen nicht, ob es rot, blau oder anders sein sollte. Es gibt jedoch ein wichtiges Merkmal dieses Datensatzes. Was fällt dir daran auf? Nun, unsere Fähigkeiten zur Erkennung menschlicher Muster ermöglichen es uns, sofort zu erkennen, dass es hier drei Datengruppen zu geben scheint. Mit anderen Worten, wir brauchen den Datensatz nicht, um uns mitzuteilen, dass diese drei Gruppen unterschiedlich sind. Unsere eigenen Fähigkeiten zur Mustererkennung ermöglichen es uns, dies sehr deutlich zu erkennen. Das meinen wir mit unbeaufsichtigtem Lernen. Es ist unbeaufsichtigt, weil uns niemand die Antwort geben muss. Dies ist auch ein Schlüsselkonzept hinter künstlicher allgemeiner Intelligenz. Wenn wir eine KI aufbauen wollen , die sich in der realen Welt zurechtfindet. Praktisch gesehen muss es wahrscheinlich über eine gewisse allgemeine Intuition und Mustererkennungsfähigkeit verfügen gewisse allgemeine Intuition und , da es nicht möglich wäre , ihm Trainingsdaten für jede mögliche Situation zur Verfügung zu stellen . Begegnung. Das ist also ein sehr wichtiger Punkt. Wir nutzen unsere eigenen Mustererkennungsfähigkeiten , um diese Cluster voneinander zu unterscheiden. Es steht nicht in den Daten selbst. Aber jetzt haben Sie vielleicht bemerkt , dass das, was wir uns gerade angesehen eine sehr einzigartige und sehr spezifische Situation war. Die erste Einschränkung dieser Daten ist, dass sie zweidimensional waren. Dies ist natürlich notwendig, denn wenn wir beispielsweise einen 100-dimensionalen Datensatz hätten, könnten Sie ihn nicht sehen. Das Universum selbst hat nur drei Raumdimensionen. Das ist also alles was du sehen kannst. Manchmal habe ich Studenten, die von dieser Tatsache nicht überzeugt sind. Wenn Sie also überzeugt sind, dass Sie über drei Dimensionen hinaus sehen können, versuchen Sie, einen zehndimensionalen Würfel zu zeichnen und zu sehen, was passiert. Jetzt. Warum erwähne ich das? Nun, die meisten realen Datensätze sind nicht zweidimensional. Daher können Sie die meisten realen Daten nicht sehen. Daher sind Ihre eigenen Mustererkennungsfähigkeiten in diesem Szenario nicht nützlich. Es wäre schön, wenn wir einen Algorithmus hätten , um herauszufinden, dass Cluster Datengruppen sind, die unabhängig von der Dimensionalität der Daten funktionieren könnten . Natürlich, darum geht es in diesem gesamten Kurs. Sie können also sicher sein, dass Sie die Antwort auf diese Frage am Ende dieses Kurses kennen . Hier ist ein anderes Problem. In den Originaldaten, die ich dir gezeigt habe. Ich habe es so generiert , dass es drei verschiedene Cluster sehr deutlich zeigt. Aber was ist, wenn unsere Daten so aussehen? Oder was ist, wenn unsere Daten so aussehen? Jetzt können Sie sehen, dass die Cluster nicht so eindeutig sind. Im Allgemeinen würden wir gerne wissen, ist der Cluster, den ich gefunden habe, gut oder nicht? In diesem Kurs beantworten wir auch diese Frage. Als ersten Schritt zum Verständnis des K-Means-Clusterings betrachten wir zwei Arten grundlegender Wahrheiten über die Cluster im Datensatz. Angenommen, mir wurde gesagt, dass diese gelben, violetten und grünen Punkte die Zentren einiger Cluster sind. Und ich würde gerne wissen , zu welchem Center dieser neue Blue Point gehört? Und ich denke, es macht intuitiv Sinn , dass dieser Punkt natürlich zu dem Zentrum gehört, dem es am nächsten liegt. Um zu entscheiden, zu welchem Cluster ein Datenpunkt gehört, wähle ich das nächstgelegene Clusterzentrum aus. Ziemlich intuitiv. Betrachten wir nun die zweite grundlegende Tatsache über Cluster. Angenommen, mir wurde gesagt, dass diese Datenpunkte, die Sie hier sehen, alle zum selben Cluster gehören. Nennen wir sie X1 bis X C. Wir möchten wissen, was das Zentrum dieses Clusters ist. Das ist natürlich nur der Mittelwert all dieser Datenpunkte. Dies wird auch als Zentroid bezeichnet , wenn Sie geometrisch denken. Und wie Sie wissen, besteht der Weg, den Mittelwert einer Reihe von Vektoren zu ermitteln , darin, sie zu addieren und durch die Anzahl der Vektoren zu dividieren. So finden Sie das Clusterzentrum. Die große Frage, wir haben diese beiden grundlegenden Fakten über Cluster. Gibt es eine Möglichkeit , diese beiden Ideen zu kombinieren , um uns einen Clustering-Algorithmus zu geben? Ob Sie es glauben oder nicht, diese beiden grundlegenden Fakten sind alles, was Sie brauchen, um K-Means-Clustering zu implementieren. Es stellt sich heraus, wenn ich die Clusterzentren zufällig initialisiere Wenn ich diese beiden Schritte immer wieder wiederhole, konvergiere ich zu einer Antwort. Um es noch einmal zusammenzufassen: Wir beginnen damit, einige zufällige Punkte als Clusterzentren auszuwählen . Dann kann ich die Tatsache nutzen , dass jeder Punkt in meinem Datensatz einfach zu dem Cluster gehört , dessen Mittelpunkt am nächsten liegt. Also weise ich alle meine Datenpunkte dem nächstgelegenen Clusterzentrum zu. Jetzt, da ich weiß, dass jeder Datenpunkt zu einem Cluster gehört, kann ich neue Clusterzentren basierend auf allen dazugehörigen Punkten berechnen . Dann gehe ich zurück zum ersten Schritt, nämlich der Zuweisung von Datenpunkten zu den neuen Clusterzentren. Schon wieder. Später in diesem Abschnitt werden wir visuelle Demonstrationen sehen, wie die Clusterzuweisungen und Clusterzentren über jede Iteration hinweg entwickeln. Lassen Sie uns diesen Vortrag zusammenfassen. Seitdem war es ziemlich sicher, dass einige sehr wichtige Ideen eingeführt wurden. Zuerst haben wir darüber gesprochen, dass es manchmal sehr einfach für uns ist, Cluster zu erkennen. Wir brauchen den Datensatz nicht, um uns die Bezeichnung für jeden Datenpunkt mitzuteilen. Wir können leicht erkennen , welcher Datenpunkt zu welchem Cluster gehört. Das heißt, wir haben gelernt, die Daten unbeaufsichtigt zu verstehen . Zweitens ist es wichtig zu verstehen, wie dieses Beispiel begrenzt war. Manchmal sind die Grenzen zwischen den Daten möglicherweise nicht so klar definiert. Und in den meisten Fällen können wir unsere Daten nicht betrachten weil unsere Daten nicht zweidimensional sind. Was wir also gerne hätten, ist ein automatischer Algorithmus, Cluster für uns bei jedem beliebigen Datensatz finden kann. Schließlich haben wir uns zwei grundlegende Fakten über Cluster angesehen . Die Tatsache, dass jeder Punkt dem Cluster zugewiesen werden sollte , dem er am nächsten liegt. Und die Tatsache, dass jedes Clusterzentrum nur das Zentrum jedes Punktes sein sollte , der zu ihm gehört. Wir haben gesehen, dass wir, wenn wir diese beiden Fakten miteinander kombinieren, den k-means-Clustering-Algorithmus erhalten. 3. K-Means Übung Prompt 1: In dieser Vorlesung werden wir direkt einsteigen und Ihre Programmierkenntnisse trainieren. Dieser Kurs ist als praktischer Kurs konzipiert . Für jedes Thema, über das Sie lernen, implementieren Sie es in Code. Wie mein Sprichwort sagt, wenn du es umsetzen kannst, dann verstehst du es nicht. Tatsächlich habe ich kürzlich herausgefunden, dass der berühmte Physiker Richard Feynman etwas sehr Ähnliches gesagt hat. Er sagte: Was ich nicht erschaffen kann, verstehe ich nicht. Wenn Sie mir also nicht zustimmen, Sie auch nicht mit einem der berühmtesten Physiker aller Zeiten überein. Okay, also wie kannst du üben, was du gerade gelernt hast? Nun, in dieser Vorlesung wird Ihre Übung darin bestehen einen Teil des K-Means-Clusterings zu implementieren. Also hier ist die Übung. Zuerst generieren Sie einen zufälligen synthetischen Datensatz namens x. Wie Sie sich erinnern, sollte x für maschinelles Lernen zweidimensional sein, n mal d als Anzahl der Stichproben und d ist die Zahl von Funktionen. Sie werden auch ein eindimensionales Array von Cluster-Identitäten erstellen ein eindimensionales Array von , das als Warum bezeichnet wird. Warum sollte auch die Größe n sein, die Anzahl der Proben. Das liegt daran, dass Sie ihm für jedes der Beispiele eine Clusteridentität geben . Denken Sie daran, dass dies ganze Zahlen von Null bis k minus eins einschließlich sein müssen , was darauf hinweist, dass Sie insgesamt K Cluster haben. So könnte z.B. das erste X zu Cluster Null gehören, das zweite X könnte zu Cluster eins gehören und so weiter. Wie Sie diese Daten erstellen, liegt ganz bei Ihnen. Sie können die Daten zufällig erstellen oder versuchen, Daten zu generieren, die für das Clustering geeignet sind. Persönlich würde ich mich für Letzteres entscheiden , da das Ergebnis sinnvoller und am Ende optisch ansprechender sein wird . Nehmen wir für unser Beispiel an , dass n gleich 300, d gleich zwei und k gleich drei ist. Das bedeutet, dass Ihre Cluster-Identitäten die Werte 01.2 annehmen. Ich würde vorschlagen, es so zu gestalten, dass Ihre Daten gleichmäßig auf die drei Cluster aufgeteilt werden . Sie haben also 100 Datenpunkte zu Cluster 1100 Datenpunkte gehören, die zu Cluster 2.100 Datenpunkte gehören, die zu Cluster 3 gehören. Okay? Was machen Sie damit, wenn Sie die Daten generiert haben? Um es noch einmal zusammenzufassen: Was wir bisher haben, ist x, das die Größe n mal d hat, und y, das die Größe n hat. Der nächste Schritt, der das Herzstück dieser Übung ist, besteht darin, den Mittelwert jedes Clusters zu berechnen. Was bedeutet das also? Nehmen wir an, ich habe drei Cluster, also ist k gleich drei. Dann müssen Sie die einzelnen Clusterwerte durchgehen . Das ist 01.2. für jeden dieser Cluster Suchen Sie für jeden dieser Cluster jeden Datenpunkt, der zu diesem Cluster gehört. für dieses Beispiel an, Nehmen wir für dieses Beispiel an, Sie wählen Cluster Null. Sie möchten also alle Datenpunkte in x finden , die zu Cluster Null gehören. Wie Sie sich erinnern, werden diese Informationen in y gespeichert, dann möchten Sie den Mittelwert all dieser Datenpunkte ermitteln. Denken Sie als Übung über die Größe des Ergebnisses nach. Ich gebe dir eine Minute, um darüber nachzudenken, oder du kannst dieses Video pausieren, bis du die Antwort hast. Okay, also was ist die Größe des mittleren Vektors aller Datenpunkte, die zu einem bestimmten Cluster gehören. Denken Sie daran, dass alle unsere Datenpunkte Merkmalsvektoren sind , die in einem d-dimensionalen Raum leben. In unserem Beispiel ist d gleich, einfach ausgedrückt, der Mittelwert einer Reihe von d-dimensionalen Vektoren ist immer noch d-dimensional. Mit anderen Worten bedeutet dies einfach, dass Sie eine Reihe von Datenpunkten haben und den Datenpunkt finden möchten, der sich am Schwerpunkt oder Massenschwerpunkt befindet. Und dabei geht es natürlich nur darum, alle Vektoren zu addieren und durch die Gesamtzahl der Vektoren zu dividieren . Okay? Nehmen wir nun an, dass Sie für jeden der k Cluster die Vektoren des d-dimensionalen Mittelwerts berechnen. Das bedeutet, dass Sie k Vektoren haben, jeder der Größe d. Natürlich können Sie dies in einem zweidimensionalen Array der Größe k mal d speichern . Das sollte also das Ergebnis dieser Übung sein. Eine k-mal-d-Matrix, die die d-dimensionalen Mittelwert-Vektoren für jeden der k-Cluster enthält , ist unsere gewünschte Ausgabe. Stellen wir uns dieses Problem anders vor, nur für den Fall, dass Sie es beim ersten Mal nicht verstanden haben. Okay, nehmen wir an, wir haben n Datenpunkte, X1, X2, bis hin zu x n. Jede dieser Achsen ist ein d-dimensionaler Vektor. Darüber hinaus haben wir n, die entsprechenden Clusteridentitäten Y1 und Y2, bis hin zu YN. Jedes dieser y ist eine Ganzzahl , die null bis k exklusiv sein kann. Denken Sie daran, dass, wenn wir all diese Xs zu einer einzigen Matrix kombinieren , einem großen X, dies die n-mal-d-Matrix war, auf die ich mich zuvor bezogen habe. Wir können dasselbe mit allen y machen, um einen großen Vektor y der Länge n zu erhalten. Lassen Sie uns dieses Beispiel etwas konkreter machen. Angenommen, Y nimmt die Werte an, die Sie hier sehen. Also ist Y1 gleich Null, Y2 ist gleich Eins, Y3 ist gleich y vier gleich eins, y ist gleich zwei, y ist gleich Null, Y sieben ist gleich Null, y ist gleich eins und y neun ist gleich zwei. Es sollte klar sein, dass n gleich neun ist. Jetzt ist es Ihre Aufgabe, den Mittelwert aller Xs zu ermitteln , die zu jedem der Cluster gehören. Für Cluster Null müssen Sie den Mittelwert von X1, X6, X7 ermitteln. liegt daran, dass E1, E6 und E7 Null sind. Für Cluster eins müssen Sie den Mittelwert von x2, x4 Anhang 8 finden . Das liegt daran, dass Y2, y vier und y gleich eins sind. Für Cluster zwei müssen Sie den Mittelwert von X3, x5, X9 ermitteln. Das liegt daran, dass Y3, Y fünf und Y neun oder gleich zwei sind. Nennen wir diese Mittel m1, m2 und m3. Logischerweise sollten dies alles d-Längenvektoren sein, da sie nur der Durchschnitt von D-Längenvektoren sind. Schließlich sollten Sie diese drei mittleren Vektoren zu einer einzigen Matrix der Größe k mal d kombinieren diese drei mittleren Vektoren zu , wobei in diesem Beispiel k gleich drei ist. Und denken Sie daran, dass die Daten, die wir für diese Übung verwenden , zufällig von Ihnen generiert werden. Wie bereits erwähnt, können Sie es völlig zufällig machen oder es wie Daten aussehen lassen, was für das Clustering geeignet ist. Jetzt fragen Sie sich vielleicht, warum wir für diese Übung keine echten Daten verwenden können ? Dies ist eine wichtige Frage für Anfänger. Denken Sie daran, dass alle Daten gleich sind. Daher wäre diese Übung dieselbe , unabhängig davon, welche Art von Daten wir verwenden. die Daten selbst generieren, stellen Sie sicher, dass Sie die Form und Beschaffenheit der Daten verstehen, anstatt sie einfach in eine CSV-Datei zu laden. Daher erfordert dies ein besseres Verständnis, was gut ist. Darüber hinaus haben wir viele reale praktische Datensätze an anderer Stelle im Kurs verwendet werden. Jetzt ist nicht die Zeit dafür. Jetzt möchte ich klarstellen, dass wir noch kein maschinelles Lernen betreiben. Dies ist nur eine sehr einfache Programmierübung , um Sie aufzuwärmen. Wir machen nur ein bisschen Geometrie, und ich hoffe, du stimmst mir darin zu. Wir sagen, hier sind eine Reihe von Datenpunkten, und jeder der Datenpunkte gehört zu einer anderen Gruppe. Ermitteln Sie nun den Durchschnitt jedes Datenpunkts innerhalb jeder Gruppe. Okay, ich hoffe, Sie stimmen mir zu, dass dies nur eine einfache geometrische Programmierübung ist . Und im Moment gibt es nichts, wovor man Angst haben müsste. Da unsere Daten zweidimensional sind, können wir sie als Bonus auch in einem zweidimensionalen Raster darstellen. Ihr zweiter Job ist also dieser. Erstes Diagramm, alle Daten in einem zweidimensionalen Raster unter Verwendung des Streudiagramms. In diesem Streudiagramm sollten Sie auch jeden Datenpunkt entsprechend den im Array y gespeicherten Cluster-Identitäten farblich codieren entsprechend den im Array y gespeicherten Cluster-Identitäten . Es spielt keine Rolle, was die tatsächlichen Farben sind, nur das Jeder Datenpunkt im selben Cluster sollte dieselbe Farbe haben. Schließlich sollten Sie jetzt, da Sie über die Mittelwerte jedes Clusters verfügen, auch die Mittelpunkte jedes Clusters auf demselben Streudiagramm plotten. Sie sollten einen anderen Stil verwenden, damit Sie die Clusterzentren von den tatsächlichen Datenpunkten unterscheiden können . Wie Sie in dieser Handlung sehen können, habe ich Sterne verwendet. Okay, das ist Übung Nummer eins für K-Means-Clustering. Viel Glück und wir sehen uns in der nächsten Vorlesung. 4. K-Means Exercise 1 (Finding finden): In dieser Vorlesung werden wir uns mit der Lösung der vorherigen Übung befassen , der K-Means-Übung Nummer eins. Beachten Sie, dass ich den Code für diese Übung derzeit nicht bereitstellen werde , da er sehr kurz ist. Und weil Ihre Aufgabe in diesem Kurs darin besteht, zu lernen, wie man selbst programmiert, beinhaltet das Tippen, Entwerfen und die richtige Syntax. Zumindest sollten Sie in der Lage sein, zu kopieren, was ich tue, obwohl ich das nicht empfehle. Wenn Sie die Übungen wie angegeben durchführen, sollten Sie keine Codedatei benötigen, die die Lösungen für diese Übungen enthält. Tippen auf der Tastatur baut das Muskelgedächtnis auf, was eine unschätzbare Fähigkeit beim Programmieren ist. Wenn Sie einen legitimen Grund haben, warum Sie den Code nicht selbst eingeben können, lassen Sie es mich bitte wissen und ich werde mein Bestes tun , um Ihnen entgegenzukommen. Okay, lass uns anfangen. Zuerst werden wir numpy und matplotlib in Standardbibliotheken für numerisches Rechnen in Python importieren matplotlib in Standardbibliotheken . Als Nächstes legen wir unsere Konfigurationsparameter fest. Wie bereits erwähnt. Dies bedeutet, dass die Dimensionalität der Daten Bezug auf die Anzahl der Cluster drei beträgt und die Anzahl der Datenpunkte 300 beträgt. Als Nächstes erstellen wir die Daten. Dies ist vielleicht der schwierigste Teil des Drehbuchs. Lassen Sie uns also darüber sprechen, was wir auf hohem Niveau tun wollen. Zunächst ist die Grundidee, dass ich drei Clouds von Datenpunkten haben möchte , damit jede Cloud als ein anderer Cluster betrachtet werden kann. Dies ist das Bild, das Sie im Kopf haben sollten , wenn Sie über Clustering nachdenken. Wie können wir also solche Wolken erzeugen? Nun, eine mögliche Idee besteht darin, Proben aus drei verschiedenen Gaußschen Verteilungen zu ziehen , jede mit einem anderen Mittelwert. Wie Sie sich erinnern, ist eine Gaußsche Verteilung durch ihren Mittelwert und ihre Kovarianz gekennzeichnet. Der Mittelwert wird uns sagen, wo sich der Gauß befindet. Und die Kovarianz wird uns sagen, wie die Datenpunkte aus dem Gaußschen verteilen würden. Beginnen wir also damit, drei Mittel zu definieren , die den drei Gaußschen entsprechen. Will sagen, dass mein Eins 00 ist, was am Ursprung ist, wird sagen, dass meine beiden 55 sind. Und wir sagen, dass meine drei 05 sind. Als nächstes erstelle ich ein N mal D Array namens x. Hier werden wir die Daten speichern, um x zu füllen, wir beginnen mit den ersten 100 Punkten, wie Sie sich erinnern, dem Doppelpunkt. Und dann bedeutet 100, wählen Sie die Indizes von Null bis 100 aus. Dann sage ich auf der rechten Seite, generiere ein Array der Größe 100 mal d aus dem Standardnormal, und dann füge ich ein mu1 hinzu. Dies führt zu 100 Datenpunkten mit Dimension zwei bei mu eins mit Identitätskovarianz zentriert ist. Als Nächstes mache ich dasselbe. Aber für die nächsten 100 Datenpunkte werden die Indizes diesmal zwischen 100 und 200 liegen. Und auf der rechten Seite werden die Datenpunkte auf mu zwei zentriert. Schließlich machen wir dasselbe für die letzten 100 Datenpunkte, für die Indizes 200, 300. Diese Datenpunkte werden auf mu drei zentriert. Als nächstes erstelle ich das Array y, das uns die Clusteridentität angibt , die jeder der Achsen entspricht. Da wir gerade die Achse erstellt haben und sie alle in Ordnung sind, ist die Struktur von Y sehr einfach. Es sind nur 100 Nullen gefolgt von 100 Einsen gefolgt von 100 Zweien. Wie Sie sich erinnern, wird, wenn Sie eine Liste erstellen und mit einer Ganzzahl multiplizieren , dieses Element der Liste einfach so oft wiederholt . Wenn wir dann die Plus-Operation für diese Listen verwenden, ist das Ergebnis die Verkettung der Listen. Und schließlich übertragen wir das Ergebnis in ein NumPy-Array. Da es einfacher ist, mit NumPy-Arrays zu arbeiten , vergleichen Sie zwei Listen. Beachten Sie, dass unsere Daten zwar eine spezielle Struktur mit allen Clustern haben, der nachfolgende Code dies jedoch nicht voraussetzt. Mit anderen Worten, der Code, den wir schreiben werden, funktioniert mit Daten mit beliebiger Struktur. Okay, der nächste Schritt besteht darin, die Daten zu visualisieren, die wir gerade erstellt haben. Dazu erstellen wir ein Streudiagramm, indem wir die Scatter-Funktion aufrufen. Das erste Argument übergeben wir in der ersten Spalte von x. Im zweiten Argument übergeben wir die zweite Spalte von x. Im dritten benannten Argument geben wir die Farbe an, die unserem entspricht Datenpunkte und wir übergeben y. Beachten Sie, dass y nur ein Bündel von Nullen, Einsen und Zweien ist. Mit diesem Schema entscheidet matplotlib, welche tatsächlichen Farben unseren Datenpunkten zugewiesen werden sollen. Natürlich können Sie eine feinkörnigere Kontrolle haben wenn Sie die Farben selbst auswählen möchten. Aber das ist gut genug für uns. Okay, hoffentlich ist es das , was du erwartet hast. Wir können sehen, dass wir drei Wolken von Datenpunkten haben, und jede von ihnen ist entsprechend y gefärbt. Als nächstes betrachten wir die Frage, ein zweidimensionales Array der Größe n mal d geben, indem Konvention, wie bekomme ich die D-Größe, diesen mittleren Vektor dieses Arrays? Das heißt, ich wollte den Mittelwert für jede der n Proben nehmen . Jetzt musst du hier vorsichtig sein, denn wenn du nur dot mean von selbst aufrufst, bekommst du einen einzelnen Skalar, was der Mittelwert jedes einzelnen Elements von X ist wollen wir nicht, seit dem, was wir sollte mit ist ein Mittelwertvektor, kein Skalar. Um zu bekommen, was wir wollen, müssen wir das Argument axis ist gleich Null übergeben, was besagt, dass wir den Mittelwert entlang der n-Dimension nehmen. Wenn Sie eine Achse übergeben, die gleich eins ist, erhalten Sie den Mittelwert entlang der d-Dimension. Wie immer werden Sie ermutigt, diese Dinge selbst auszuprobieren , damit Sie ein besseres Gefühl dafür bekommen, wie sie funktionieren. Verlassen Sie sich nicht einfach auf mein Wort. Okay, also wenn wir das ausführen und die Form des Ergebnisses überprüfen, erhalten wir zwei wie erwartet. Als Nächstes verwenden wir das, was wir gerade entdeckt haben, um den Mittelwert jedes Clusters anhand der im Array y bereitgestellten Cluster-Identitäten zu berechnen jedes Clusters anhand der im Array y bereitgestellten Cluster-Identitäten . Zu Beginn erstellen wir ein Array der Größe K mal D heißt Mittel. Als Nächstes berechnen wir den Mittelwert jedes Clusters nacheinander, beginnend mit Cluster Null. Okay, dieser Code ist also ziemlich kompakt, aber tatsächlich passieren viele Dinge gleichzeitig. Wenn Sie das auf den ersten Blick nicht verstehen, haben Sie die Übung hoffentlich auf eine Weise gemacht , die für Sie keinen Sinn ergab. Sie müssen also nie die gleiche Lösung finden wie ich. Sie müssen sich nur die gleiche Antwort einfallen lassen. Ihr Code kann völlig anders sein als meiner. Wie Sie wissen, kann Code von innen heraus gelesen werden. Beginnen wir also mit dem innersten Ding, das y ist gleich, gleich Null. Wenn Sie nicht wissen, was das bewirkt, würde ich empfehlen, dies zu isolieren und selbst auszudrucken , damit Sie ein besseres Verständnis erhalten. Im Wesentlichen gibt dies ein boolesches Array zurück. Wie Sie wissen, muss gleich, gleich wahr oder falsch zurückgeben. Aber da wir es für ein Array verwenden , wird das Ergebnis auch ein Array sein. Da wir sagen gleich, gleich Null, das resultierende Array an jeder Stelle wahr, an der y gleich Null ist und andernfalls falsch. Okay, was passiert also, wenn wir x mit diesem booleschen Array indizieren ? Nun, wie Sie vielleicht erraten haben, werden bei der Übung, die wir machen, alle Elemente von X ausgewählt , bei denen der Index wahr ist. Okay, hoffentlich ergibt das Sinn. Wie Sie sich erinnern, ist X ein Array mit n Zeilen. Warum ist auch ein Array mit n Elementen? Wenn wir sagen, dass y gleich Null ist, ein boolesches Array mit n Elementen zurückgegeben. dann x mit diesem booleschen Array indizieren, erhalten wir nur die Teile von X zurück, in denen der Index wahr war. Das heißt, wir erhalten nur die Zeilen von x, die dem Zeitpunkt entsprechen, an dem y gleich Null ist. Äquivalent erhalten wir nur die Zeilen von X, die zu Cluster Null gehören. Schließlich nehmen wir den Mittelwert mit der Mittelwertfunktion, wobei das Übergeben einer Achse gleich Null ist. Dann weisen wir den resultierenden Mittelwert-Vektor unserem Mittelwert-Array auf der linken Seite bei Index Null zu. Als nächstes machen wir dasselbe, um die Mittelwerte für Cluster eins und Cluster zwei zu berechnen . Okay, also technisch gesehen ist das das Ende der Übung. Obwohl es schön wäre, wenn wir uns vorstellen könnten , was wir gerade gefunden haben. Der nächste Schritt besteht also darin, unser Streudiagramm neu zu zeichnen. Aber mit den Clustermitteln haben wir vorher berechnet. Zunächst zeichnen wir dasselbe Streudiagramm, das wir zuvor hatten. Als nächstes rufen wir erneut scatter auf, diesmal jedoch mit dem Mittelwert-Array, das wir gerade erstellt haben. Wie zuvor. Das erste Argument ist die erste Mittelwertspalte, die sich auf die erste Dimension bezieht. Und das zweite Argument ist die zweite Mittelspalte, die sich auf die zweite Dimension bezieht. Als nächstes werde ich einige zusätzliche Argumente weitergeben einige zusätzliche Argumente damit die Handlung leichter zu erkennen ist. Zuerst gebe ich S gleich 500 ein, was die Größe der Datenpunkte steuert. Dadurch ist der Mittelwert viel größer als die Daten. Zweitens übergebe ich und C ist gleich Rot, um jedes der Clusterzentren rot zu machen. Dadurch werden diese Punkte weiter von meinen Daten unterschieden . Als Randnotiz ist dies ein Beispiel dafür, wie wir die Farbe der Datenpunkte im Streudiagramm manuell einstellen können , während wir die Farben im vorherigen Streudiagramm nicht ausgewählt haben. Schließlich setzen wir eine Markierung gleich Stern, sodass die Mittelwerte nicht nur als Kreis erscheinen, sondern wie Sterne aussehen, wodurch sie leichter zu sehen sind. Okay, lass uns das machen. Okay, hoffentlich ist es das, was du erwartest. Jeder Mittelwertvektor erscheint ungefähr in der Mitte jedes Clusters. Wie bereits erwähnt, stellen diese die Massenschwerpunkte oder die Zentroide jedes Clusters dar. Außerdem können wir sehen, dass sie sich ungefähr in den ursprünglichen Gaußschen Zentren befinden. Einer der Sterne ist bei 00, ein anderer bei 05, ein anderer bei 55. 5. K-Means Übung Prompt 2: In dieser Vorlesung beginnen wir direkt mit Ihrer zweiten Übung für diesen Abschnitt. Zuvor bestand Ihre Übung darin, eine Reihe von Datenpunkten und eine Reihe von Clusteridentitäten zu verwenden. Dann mussten Sie den Mittelwert der Datenpunkte für jeden Cluster ermitteln. Dieses Mal gehst du in die entgegengesetzte Richtung. Jetzt erhalten Sie eine Reihe von Mitteln zusammen mit einer Reihe von Datenpunkten. Ihre Aufgabe wird es sein, diese Mittel und diese Datenpunkte zu nutzen und herauszufinden, zu welchem Cluster jeder Datenpunkt gehört. Denken Sie also daran, dass dies entsprechend der euklidischen Entfernung oder entsprechend der quadratischen euklidischen Entfernung erfolgt. Beachten Sie, dass die Quadrate der monoton zunehmenden Funktion, unabhängig davon, ob Sie das Quadrat nehmen oder nicht, die Antwort nicht ändern. Das heißt, wenn Sie Entfernungen vergleichen, sagen wir 2,4, wenn Sie diese quadrieren, erhalten Sie 4,16. Die Beziehung, dass zwei weniger als vier sind, bleibt also erhalten, weil vier auch weniger als 16 ist. Und es sind nur die relativen Entfernungen, die wichtig sind, denn alles, was Sie versuchen, ist den nächsten Mittelwert zu finden. Die tatsächliche Entfernung selbst kommt in der Antwort nicht zum Vorschein. Okay, also wie zuvor, lassen Sie uns ein sehr einfaches Beispiel dafür vorstellen wie das funktionieren wird. Angenommen, wir haben drei Mittelwerte, m , Null, M1 und M2. Wir haben auch neun Datenpunkte, x1, x2, x3, bis hin zu X9. Was können wir also sehen? Was wir sehen können, dass X1, X2 und X3 alle näher an Null liegen als an M1 und M2. Daher gehören X1, X2 und X3 zu Cluster Null. In ähnlicher Weise können wir sehen, dass X4, X5 und X6 näher an M1 liegen als an Null oder M2. Daher gehörten X4, X5 und X6 zu Cluster Eins. Schließlich sind X7, X8 und X9 näher an M2 als an m Null oder m1. Daher gehört X7, X8, X9 zu Cluster zwei. Hoffentlich macht das Sinn. Die Herausforderung besteht darin, diese visuelle Intuition in den Code zu integrieren. So sollte Ihr Code auf hohem Niveau funktionieren. Zuerst werden Sie einen Satz von Mittelwerten in einer Matrix der Größe k mal d generieren , genau wie in der vorherigen Übung. Sie können auch dieselben Werte für n und d und k verwenden wie zuvor. Also ist n gleich 300, d ist gleich zwei und k ist gleich drei. Denken Sie daran, dass d gleich zwei hilfreich ist , weil wir es visuell sehen können. Zweitens werden Sie auch eine Datenmatrix der Größe n mal d erzeugen . Wie zuvor können Sie diese Matrizen zufällig erstellen, aber es kann hilfreich sein, sie auf eine Weise zu generieren , die aus einem Clustering sinnvoll ist perspektive. Wie auch immer du es tust, liegt an dir. Persönlich. Ich denke, es ist nützlicher , die Daten strukturiert zu generieren , sodass Sie, nachdem Sie die Antwort gefunden haben, die Ergebnisse als Plausibilitätsprüfung darstellen können. Apropos Bonus: Ich würde Sie ermutigen, die Ergebnisse mit dem Ergebnis der Übung darzustellen. Als Ausgabe sollten Sie einen n-Längenvektor haben, der uns die Clusteridentität jedes Datenpunkts angibt. Wenn also z.B. das erste x zu Cluster Null gehört, dann sollte der erste Wert Ihres Ausgabearrays Null sein. Abschließend möchte ich darauf hinweisen, dass es viele Möglichkeiten gibt , diese Übung durchzuführen. Sie haben vielleicht gehört, dass NumPy nicht für Loops geeignet ist, wenn Sie NumPy verwenden, weil es für Loops oder langsam ist. Stattdessen wurde Ihnen vielleicht gesagt, dass es besser ist vektorisierte Operationen zu verwenden. Das heißt, normalerweise möchten Sie eine Numpy-Funktion finden , die gleichzeitig tun kann , was Sie wollen. Persönlich denke ich, dass es für diese Übung lehrreicher ist, sie mit For-Loops zu machen weil man dadurch darüber nachdenkt was algorithmisch vor sich geht. Letztlich liegt es an Ihnen, ob Sie sich für Loops entscheiden oder nicht. Abschließend möchte ich wiederholen, dass dies genau wie bei Übung Nummer eins noch nicht ganz maschinelles Lernen ist. In der Tat ist es nur ein weiterer einfacher Programmier-Warm-up in der Geometrie. Was wir tun, ist eine Menge Datenpunkte und eine Reihe von Zentren zu nehmen . Und wir versuchen nur, für jeden Datenpunkt herauszufinden , welches Zentrum am nächsten ist. Ich hoffe, Sie stimmen mir zu, dass diese Übung nur eine weitere einfache Übung zur geometrischen Programmierung ist . Okay, also viel Glück bei Übung Nummer zwei, und wir sehen uns in der nächsten Vorlesung. 6. K-Means Exercise 2 (Finding finden): In dieser Vorlesung werden wir uns die Lösung für K-Means-Übung Nummer zwei ansehen . Bitte stellen Sie nach wie vor sicher , dass Sie die Übung abgeschlossen haben , bevor Sie sich diese Vorlesung ansehen. Beachten Sie, dass ich den Code für diese Übung derzeit nicht bereitstellen werde , da er sehr kurz ist. Und weil es Ihre Aufgabe in diesem Kurs ist , selbst zu lernen , wie man programmiert. Dazu gehören die Eingabe, das Entwerfen und die richtige Syntax. Zumindest sollten Sie in der Lage sein, zu kopieren, was ich tue, obwohl ich das nicht empfehle. Wenn Sie die Übungen wie angegeben durchführen, sollten Sie keine Codedatei benötigen, die die Lösungen für diese Übungen enthält. Tippen Sie auf der Tastatur und bauen Sie das Muskelgedächtnis auf, was eine unschätzbare Fähigkeit beim Programmieren ist. Wenn Sie einen legitimen Grund haben, warum Sie den Code nicht selbst eingeben können, lassen Sie es mich bitte wissen und ich werde mein Bestes tun, um Ihnen entgegenzukommen. Okay, lass uns anfangen. Zuerst werden wir also mit dem Import von numpy und matplotlib beginnen , genau wie zuvor. Als Nächstes initialisieren wir unsere Konfigurationsparameter. Das ist n, die Anzahl der Samples entspricht 300, d, die Anzahl der Features ist gleich zwei und k, die Anzahl der Cluster gleich drei. Als Nächstes initialisieren wir drei Mittel , mit denen wir unsere Clusterzentren definieren. Der Einfachheit halber habe ich die gleichen Mittel verwendet wie zuvor. Als Nächstes werden wir die Daten generieren. Wir beginnen mit der Initialisierung eines Arrays aller Nullen, das X der Form N durch D genannt wird. Als nächstes setzen wir die ersten 100 Punkte, die normalverteilt sind, zentriert auf dem Mittelwert mit Identitätskovarianz. Diese werden also in den Indizes Null auf 100 steigen. Als nächstes legen wir die nächsten 100 Datenpunkte normalverteilt werden sollen, zentriert auf dem zweiten Mittelwert, ebenfalls mit Identitätskovarianz. Diese werden auf die Indizes 100 bis 200 gehen. Schließlich legen wir fest, dass die letzten 100 Datenpunkte normalverteilt sind, zentriert auf dem dritten Mittelwert, ebenfalls mit Identitätskovarianz. Diese werden auf die Indizes 200 bis 300 steigen. Als nächstes haben wir unsere Hauptschleife, die das Herzstück dieser Übung ist. Dies ist die Schleife, in der wir die Cluster-Identitäten zuweisen werden . Wir beginnen damit, ein Array namens Y zu erstellen , das mit allen Nullen der Größe n gefüllt ist. Natürlich muss dieses Array die Größe n haben, weil wir eine Clusteridentität benötigen für jeden unserer N Datenpunkte in x eine Clusteridentität benötigen. Natürlich muss dieses Array die Größe n haben, weil wir für jeden unserer N Datenpunkte in x eine Clusteridentität benötigen. y ist das Array, das unsere Clusteridentität speichert. Als nächstes durchlaufen wir alle n Datenpunkte. Wie in der vorherigen Übungsaufforderung erwähnt, gibt es viele Möglichkeiten, dies zu tun, auch ohne dass Sie selbst For-Loops schreiben müssen. Dies ist jedoch für diese Übung nicht wirklich hilfreich, da Schreiben von Dingen auf diese Weise Ihnen hilft klarer über den Algorithmus nachzudenken. Okay, es sollte also klar sein, dass wir, da wir alle n Datenpunkte durchlaufen, nacheinander für jeden Datenpunkt die beste Clusteridentität finden werden. Die Grundidee ist folgende. Für jeden Datenpunkt, x sub little n, durchlaufen wir jede der Cluster-Mittelwerte. Für jedes dieser Mittel überprüfen wir den Abstand von x von Little n Two. Das heißt. Wir werden all diese Entfernungen im Auge behalten damit wir die minimale finden können. Wenn also Null am nächsten ist, bedeutet das, dass die Clusteridentität Null ist. Wenn Mittelwert eins am nächsten ist, bedeutet das, dass die Clusteridentität eins ist und so weiter. Okay, also beginnen wir mit der Initialisierung einer Variablen am nächsten k zu minus eins genannt wird. Wir verwenden minus eins als Sentinel-Wert. Dies wird überschrieben, wenn wir durch die innere Schleife iterieren. In ähnlicher Weise initialisieren wir eine Variable namens min dist bis unendlich. Diese Variable speichert eindeutig den Mindestabstand von x von n zu allen Mittelwerten. Wenn wir es auf unendlich initialisieren, jede Entfernung, die wir innerhalb der Schleife finden, kleiner. Okay, also als nächstes schleifen wir durch kleines k gleich Null bis hin zu Big K. Das heißt, wir werden durch jedes Clusterzentrum schleifen. Innerhalb der Schleife finden wir den quadratischen Abstand zwischen x von kleinem n und dem Mittelwert von k, dem k-eth-Mittelwert. Wenn Sie nicht erkennen, warum dies die Formel für die Quadratentfernung ist , würde ich empfehlen, die Definition der quadratischen euklidischen Entfernung zu überprüfen . Wir nennen diese Variable D. Als nächstes prüfen wir, ob d kleiner als min dist ist oder nicht. Wenn wir diese Schleife zum ersten Mal durchlaufen, ist dies natürlich garantiert wahr, da Mendez als unendlich beginnt und jede endliche Zahl kleiner als unendlich ist. Wenn diese Bedingung zutrifft, tun wir zwei Dinge. Zuerst aktualisieren wir min dist auf die aktuelle Entfernung d. heißt min dist ist die kleinste Entfernung, die wir bisher gefunden haben. Als nächstes weisen wir dem aktuellen k das nächste k zu. Und das bedeutet wiederum, dass das nächste k der Index des nächstgelegenen Clusterzentrums ist der Index des nächstgelegenen Clusterzentrums wir bisher gefunden haben. Sie sollten davon überzeugt sein, dass am Ende dieser Schleife nächste K den Index des nächstgelegenen Clusterzentrums speichert und Min dist die entsprechende Entfernung speichert. Somit können wir an dieser Stelle y das nächste k zuweisen, das kleine n indizieren. Mit anderen Worten, nächste k ist die Clusteridentität für den Datenpunkt x von Little Land. Wenn die äußere Schleife abgeschlossen ist, haben wir die Clusteridentitäten für alle Big N-Datenpunkte gefunden . Als Plausibilitätsprüfung möchten wir unsere Ergebnisse darstellen. Zum Glück wissen Sie bereits, wie das geht, weil wir das in der vorherigen Vorlesung gemacht haben. Lass uns das machen. Okay, hoffentlich ist es das, was du erwartest. Wir können sehen, dass alle Datenpunkte in der richtigen Farbe zugewiesen sind, je nachdem, welchem der Mittel sie am nächsten sind. Das sind alle Punkte, die 00 oder einer Farbe am nächsten liegen, die lila aussieht. Alle Punkte, die am nächsten an 05 liegen, oder einer anderen Farbe, die grün aussieht. Schließlich alle Datenpunkte, die 55 am nächsten liegen, oder eine andere Farbe, die gelb aussieht. 7. K-Means Übung Prompt 3: In diesem Vortrag werden wir unsere Diskussion über K-Means-Clustering fortsetzen . Eine überraschende Tatsache, die Sie lernen werden , ist , dass Sie durch die beiden vorherigen Übungen im Wesentlichen 90% der Arbeit erledigt haben. Sie erinnern sich vielleicht, dass ich gesagt habe, dass die beiden vorherigen Übungen nur sehr einfache Aufwärmübungen sind. Es waren nichts anderes als einfache Programmierübungen um etwas Geometrie zu machen. Und doch werden Sie gleichzeitig sehen, dass K-Means-Clustering nichts anderes ist als diese beiden einfachen geometrischen Übungen immer wieder wiederholt werden. Vorher. Zu Beginn dieses Abschnitts haben wir zwei grundlegende Intuitionen zu Clustern dargelegt. Erinnern wir uns, was sie sind. Fakten Nummer eins sind, dass die Clusteridentität jedes Datenpunkts das Clusterzentrum sein sollte dem das Clusterzentrum am nächsten liegt. Ich meine, das ergibt einfach Sinn. Nehmen wir zum Beispiel an, wir haben zwei Gruppen von Schülern, die sehr groß sind, sagen wir 6 Fuß im Durchschnitt, solche, die sehr klein sind, sagen wir 5 Fuß im Durchschnitt. Wenn Ihre Körpergröße fünf Fuß 10 „beträgt, sollte es offensichtlich sein , dass Sie in den hohen Cluster und nicht in den kurzen Cluster gehören . Warum? Weil Sie näher an 6 ft sind, sind Sie bei 5 ft. Hoffentlich ist das intuitiv. Also hier ist Fakt Nummer zwei. Das Clusterzentrum ist einfach der Durchschnitt oder Mittelwert aller Datenpunkte, die zu diesem Cluster gehören. Das ist auch sinnvoll, wenn wir fünf Personen in unserer Gruppe haben wäre das sogenannte Zentrum die durchschnittliche Größe aller Mitglieder unserer Gruppe. Hoffentlich ist das genauso intuitiv wie Faktor Nummer eins. Darüber hinaus sollten Sie erkennen, dass diese beiden Fakten nichts anderes als die beiden vorherigen Übungen sind . Vorhin sagte ich, dass K-Means-Clustering zufällig eine Schleife ist, die diese beiden Operationen einfach immer wieder wiederholt . Was ist die Implikation davon? Nun, das bedeutet, dass Sie durch die beiden vorherigen Übungen bereits das Clustering von k-means implementiert haben . Das einzige, was übrig bleibt , ist sie zusammenzusetzen. Auf der anderen Seite scheint es ein kleines Problem zu geben. Was man als Hühnchen-Ei-Problem betrachten könnte. Sie sehen, dass jeder der beiden Schritte von den Ergebnissen des anderen abhängt. Um die Mittel zu finden, benötigen Sie die Cluster-Identitäten. Aber um die Clusteridentitäten zu finden, braucht man die Mittel, die zuerst kamen, das Huhn oder das Ei. Die Antwort darauf wird als Initialisierungsschritt bezeichnet . In diesem Fall liefert k-means eine Antwort darauf, ob das Huhn oder das Ei an erster Stelle steht. Im Grunde weisen wir die Clusterzentren zufällig ausgewählten Datenpunkten in x zu. Dies ist also ein Schritt, den wir ausführen, bevor wir die beiden zuvor diskutierten Schritte durchlaufen. Das Endergebnis ist also das. Um K-Means zu initialisieren, wählen wir zunächst k zufällige Punkte in x aus und weisen diese Clusterzentren zu. Dann treten wir in eine Schleife ein. Innerhalb der Schleife verwenden wir Fax Nummer eins. Wir weisen jeden Datenpunkt in x unseren aktuellen Clusterzentren zu. dies zum ersten Mal ausgeführt wird, sind diese Clusterzentren einfach eine Teilmenge der Punkte in x. Die Ausgabe dieses Schritts ist eine neue Gruppe von Cluster-Identitäten. Dann verwenden wir Fakten und Nummer zwei, wir berechnen jedes der Clusterzentren anhand der neuesten Clusteridentitäten neu. Das Ergebnis dieses Schritts ist also ein neuer Satz von Clusterzentren. Dann wiederholen wir diesen Vorgang immer wieder bis der Algorithmus konvergiert. Woher wissen wir also, wann der Algorithmus konvergiert? Nun, dann hören die Clusteridentitäten auf, sich zu ändern. Wenn sich die Clusteridentitäten nicht mehr ändern, natürlich auch die Clusterzentren werden natürlich auch die Clusterzentren aufhören, sich zu ändern. Und es macht keinen Sinn, die Schleife weiter zu laufen, da sich die Antwort nicht mehr ändern wird. Ein entscheidendes Detail, das Sie über K-Means-Clustering wissen müssen, ist dieses. Obwohl der Prozess, den ich gerade beschrieben habe , ziemlich einfach erscheint, führt er nicht jedes Mal zu derselben Antwort, wenn Sie ihn ausführen. Das heißt, k-means findet niemals eine global optimale Lösung. Stattdessen ist es nur möglich , eine lokale Optima zu finden. Eine einfache Lösung besteht darin, k-means einfach mehrmals auszuführen und dann die beste Antwort auszuwählen. Wir werden später in diesem Abschnitt definieren, was am besten bedeutet. Praktisch gesehen ist das so ziemlich alles, was Sie tun können. Und in der realen Welt ist das in Ordnung. Hoffentlich ist die nächste Übung keine Überraschung. Bevor Sie mit der nächsten Vorlesung fortfahren, besteht Ihre Aufgabe darin, K-Means im Code zu implementieren. Denken Sie daran, dass Sie die meiste Arbeit in den Übungen 1.2 dieses Abschnitts bereits erledigt haben. Alles was Sie wirklich tun müssen, ist diese beiden Dinge in eine Schleife zu bringen. Die grundlegende Gliederung Ihres Codes sollte wie folgt aussehen. Zuerst generieren Sie einen Datensatz namens X of shape n by d. Dieses Mal möchten Sie wirklich ein Dataset generieren, das für das K-Means-Clustering geeignet ist. Das heißt, generieren Sie keinen Datensatz nur aus einem einzigen Gaußschen ohne klar erkennbare Cluster. Später in diesem Abschnitt werden wir uns reale Datensätze ansehen. Aber im Moment wollen wir nur sicherstellen, dass Ihre Version von k-means das tut, was sie tun soll. Als Nächstes initialisieren Sie die Clusterzentren, indem Sie k zufällig ausgewählte Punkte aus x auswählen . Da Sie die Daten selbst erstellt haben, können Sie die Werte für N, D, E, und K. Ich würde es immer noch empfehlen, d gleich zwei zu verwenden, damit Sie die Ergebnisse visualisieren können. Als Nächstes treten Sie in eine Schleife ein, die die beiden zuvor besprochenen Schritte ausführt. Innerhalb der Schleife sollten Sie nach Konvergenz suchen. Das heißt, wenn sich die Cluster-Identitäten an diesem Punkt nicht mehr ändern, sollten Sie die Schleife verlassen. Wenn Sie D gleich zwei wählen, sollten Sie die Ergebnisse visualisieren. Sie können dies tun, indem Sie ein Streudiagramm der Daten zusammen mit den gefundenen Cluster-Identitäten zeichnen . Darüber hinaus sollten Sie auch die entsprechenden Clusterzentren zeichnen . Da Sie bereits gelernt haben, wie das geht, sollte es kein großes Problem sein, es noch einmal zu tun. Okay, also viel Glück bei dieser Übung und wir sehen uns in der nächsten Vorlesung. 8. K-Means Exercise 3 K-Means in vollem Umfang): In dieser Vorlesung werden wir K-Means-Clustering und Code implementieren. Wie immer hoffe ich, dass Sie die Gelegenheit hatten, diese Übung zu absolvieren, bevor Sie sich diese Vorlesung angesehen haben. Wenn nicht, dann würde ich empfehlen , dieses Video jetzt zu beenden , bis Sie die Übung abgeschlossen haben. Denken Sie daran, dass dies Ihrem Lernen zugute kommt. Ich hoffe, Sie haben einige Zeit mit der Implementierung dieses Codes verbracht . Eigentlich hätte die dritte Übung viel einfacher sein sollen als die ersten beiden. Da die dritte Übung wirklich nur darin besteht , die ersten beiden Übungen zusammenzusetzen. Hoffentlich haben Sie festgestellt , dass dies der Fall ist. Okay, lass uns anfangen. Zuerst. Wir werden wieder numpy und matplotlib importieren. Inzwischen wissen Sie, wie wir diese Bibliotheken nutzen. Als nächstes setzen wir erneut R-Konfigurationsparameter. Das heißt d ist gleich k gleich drei und n gleich 300. Die Datendimensionalität ist also zwei, die Anzahl der Cluster beträgt drei und die Anzahl der Stichproben beträgt 300. Als Nächstes erstellen wir die Daten. Wir beginnen damit, zuerst die wahren Mittel zu erschaffen, mu eins , mu zwei und mu 31. Ein wichtiger zu beachtender Faktor ist, dass diese wahren Mittelwerte dem K-Means-Algorithmus unbekannt sind. Sie sind uns bekannt, weil wir sie zur Erstellung der Daten verwenden. Aber k-means nutzt diese überhaupt nicht. Möglicherweise möchten Sie den Code selbst durchgehen , um diese Tatsache zu überprüfen. Wie zuvor werden wir die Mittel 0,055,05 verwenden. Als nächstes erstellen wir unsere X-Matrix der Größe n mal d. Wir setzen die ersten 100 Punkte so, dass sie ein Gaußscher der auf mu einer Identitätskovarianz zentriert ist. Wir haben die nächsten 100 Punkte so gesetzt, dass sie ein Gaußscher sind, der auf mu zwei zentriert ist, wiederum mit Identitätskovarianz. Schließlich haben wir die letzten 100 Punkte als Gaußscher Punkt festgelegt , der auf mu drei zentriert ist, wiederum mit Identitätskovarianz. Hoffentlich erinnern Sie sich an all das aus den vorherigen Übungen. Nun, Sie fragen sich vielleicht, warum wir jetzt, da wir den eigentlichen K-Means-Clustering-Code erstellen, immer noch keine echten Daten verwenden? Das ist also eine gute Frage für Anfänger und alle Anfänger sollten in der Lage sein , diese Frage bis zum Ende dieses Kurses zu beantworten , wenn nicht schon. Okay, also Nummer eins, denken Sie daran, dass wir außerhalb dieser Vorlesung eine Reihe von Beispielen für reale Daten gemacht haben . Der Schwerpunkt dieser Vorlesung liegt auf der Implementierung von K-Means. Die Art der Daten, die wir verwenden, ist irrelevant. Warum ist es irrelevant? Denken Sie daran, dass sich dieser Code für K-Means-Clustering unabhängig von den Daten nicht ändern würde. Daher bietet die Verwendung realer Daten derzeit keinen wirklichen Vorteil . In der Tat gibt es nur einen Nachteil. Warum ist das so? Nun, das bringt uns zu Punkt Nummer zwei, nämlich dass wir anhand synthetischer Daten testen können, ob unser Code wie erwartet funktioniert oder nicht. Das ist eine wichtige Sache und maschinelles Lernen, wenn Sie Code schreiben, müssen Sie testen, ob er funktioniert oder nicht. Sie können das jedoch nicht tun, wenn Sie Ihren Code für einen unbekannten hochdimensionalen Datensatz verwenden . Auf der anderen Seite ist dies ein Datensatz, den wir selbst erstellt haben und der zweidimensional ist, sodass wir ihn sehen können. Am wichtigsten ist, dass wir wissen, wie die Antwort lauten sollte. Daher ist es eine gute Möglichkeit zu testen, ob unser Code funktioniert oder nicht. Hoffentlich haben Sie jetzt ein gutes Verständnis dafür, warum synthetische Daten wichtig sind. Und Sie verstehen auch, dass wir uns an anderer Stelle im Kurs immer noch echte Daten ansehen werden. Sie haben also keine Gelegenheit verpasst echte Daten zu betrachten. Okay, also lassen Sie uns an dieser Stelle unsere Daten zeichnen, damit wir uns daran erinnern können , wie sie aussehen. Dieses Mal werden wir nur x zeichnen, weil das das einzige ist, was unserem K-Means-Algorithmus gegeben ist, wie Sie in Kürze sehen werden. Zuvor gingen wir in unseren ersten beiden Aufwärmaufgaben davon aus, dass wir entweder die Clusterzentren erhalten haben oder dass wir die Cluster-Identitäten erhalten haben. Jetzt befinden wir uns in einem realistischeren Szenario , in dem wir keines von beiden kennen, wir kennen nur x. Selbst wenn wir x alleine zeichnen, können wir intuitiv sehen, wo sich die Cluster befinden sollten. Okay, also lasst uns unsere Handlung zeichnen. Hoffentlich stimmen Sie zu, dass die Clustergruppierungen sehr intuitiv sind. Später, wenn Sie fortgeschrittenere Techniken erlernen, werden Sie verstehen, warum die Generierung unserer Daten aus Gaußschen Clouds tatsächlich der ideale Anwendungsfall ist. Als nächstes beginnen wir mit dem Code für K-Means-Clustering. Wir beginnen mit der Initialisierung. Wie Sie sich erinnern, beinhaltet dies die zufällige Zuweisung der Clusterzentren anhand zufällig ausgewählter Punkte aus x. Also beginnen wir damit, ein Array von Clusterzentren der Form K mal D zu erstellen ein Array von Clusterzentren der . sind k Clusterzentren, jede Breitendimension B. Als nächstes machen wir eine Schleife, k mal. Innerhalb der Schleife wählen wir einen zufälligen Index von Null bis n minus eins. Bei Interesse können Sie überprüfen, ob diese aus einer einheitlichen Verteilung ausgewählt wurden. Wir nennen die Ergebnisse dieses I und I ist eine ganze Zahl von Null bis n minus eins. Als Nächstes weisen wir x sub I als KF-Clusterzentrum zu. Also nehmen wir unser Cluster Center-Array und indizieren es bei k. Als nächstes machen wir unsere K-Means-Schleife. Wie Sie sich erinnern, umfasst dies zwei Schritte, die immer wieder wiederholt werden. Und diese beiden Schritte sind einfach die beiden vorherigen Übungen, die Sie bereits gemacht haben. Also beginnen wir damit, eine Variable namens max iterates auf 20 zu setzen . Dadurch wird eine Obergrenze dafür festgelegt wie oft unsere Schleife wiederholt wird. Normalerweise konvergiert K-Means ziemlich schnell. Sie werden also feststellen, dass nicht alle Iterationen benötigt werden. Als Nächstes erstellen wir ein leeres Array , um die Cluster-Identitäten zu speichern. Wie zuvor wird dies ein Array der Länge n sein, das ganze Zahlen von Null bis k minus eins speichert . Als Nächstes starte ich zu Debugging-Zwecken eine leere Liste namens gespeicherte Cluster-Identitäten , um uns zu zeigen, was k-means bei jedem Schritt tut Wir werden die Cluster-Identitäten speichern bei jeder Iteration der Schleife. Als nächstes betreten wir unsere Schleife. Also ich gehe von Null auf Max Iter ist exklusiv. Innerhalb der Schleife erstellen wir zunächst eine Kopie des Clusteridentitäts-Arrays indem wir die Kopierfunktion aufrufen. Wir weisen dies einer Variablen zu, die alte Clusteridentitäten genannt wird. Denken Sie daran, dass wir auf diese Weise überprüfen werden , ob K-Means konvergiert ist oder nicht. Wenn sich die Cluster-Identitäten nicht von einer Iteration zur nächsten geändert haben , macht es keinen Sinn, fortzufahren denn wenn die Cluster-Identitäten gleich sind, die Mittelwerte auch das gleiche. Daher würden beide Schritte zu keiner Änderung führen. Als Nächstes speichern wir auch die alten Cluster-Identitäten unserer Liste „ Cluster-Identitäten speichern“. Als nächstes führen wir Schritt eins aus. Wie Sie sich erinnern, dient dies dazu, festzustellen, dass die Clusteridentitäten den aktuellen Clusterzentren gegeben sind. Beachten Sie, dass beim ersten Ausführen dieser Schleife die Clusterzentren nur zufällige Punkte in X sind. Dies ist Y. den vorherigen Übungen war es nicht notwendig, die Daten gut aussehen zu lassen so wie ich es gemacht habe. K-Means Irgendwann werden wir Cluster-Identitäten berechnen, für die sich die Cluster-Mittelwerte an der falschen Stelle befinden. Deshalb habe ich die Anweisung gegeben , dass Sie jedes x und jede Menge von Clustermitteln erstellen könnten . Es ging nur darum, funktionierenden Code zu schreiben. Okay, also im Grunde solltest du erkennen, dass diese gesamte Schleife genau die gleiche ist wie zuvor. Ich werde es diesmal schneller durchgehen, da du es schon gesehen hast. Zuerst haben wir alle n Datenpunkte durchgesehen. Innerhalb dieser Schleife initialisieren wir k am nächsten zu minus eins, einem Sentinel-Wert. Als nächstes initialisieren wir min dist auf unendlich. Dies ist so, dass jede von uns berechnete endliche Entfernung kleiner ist. Als nächstes durchliefen wir alle k-Cluster-Mittelwerte. Dies liegt daran, dass wir herausfinden möchten, welche davon dem n-ten Datenpunkt am nächsten ist. Innerhalb der Schleife berechnen wir den quadrierten euklidischen Abstand zwischen x sub n und dem KF-Clusterzentrum. Wir nennen das D. Als nächstes prüfen wir, ob d kleiner als das aktuelle Min dest ist. Wenn ja, speichern wir das aktuelle B als unseren neuen Men-Dist und wir speichern k als unser nächstgelegenes k. Wenn wir uns außerhalb der Schleife befinden, weisen wir dem nächsten k die n-te Clusteridentität zu. Als nächstes haben wir Schritt zwei, die andere Übung, die wir gemacht haben. Dies dient dazu, die neuen Clustermittelwerte basierend auf den Clusteridentitäten zu berechnen , die wir gerade gefunden haben. Also nochmal, Sie sollten diesen Code von früher mit ein paar Namensanpassungen erkennen . Wie Sie sich erinnern, arbeiten wir von innen heraus. Zuerst verwenden wir equals equals, um ein boolesches Array zu erhalten, das uns sagt , welche der Datenpunkte zu Cluster 01 oder zwei gehören. Dann verwenden wir dieses boolesche Array als Index für x. Als nächstes rufen wir die Funktion mean auf, um den Mittelwert all dieser Datenpunkte zu ermitteln. Und wir übergeben ihm eine Achse gleich Null, so dass wir den Mittelwert entlang der Zeilen nehmen. Als nächstes weisen wir dies unserem Array zu, das die Clusterzentren enthält. Sobald wir fertig sind, Schritt eins und Schritt zwei, können wir die Konvergenz überprüfen. Auch hier können Sie sehen, dass wir equals-equals verwenden. Wir möchten wissen, ob unsere alten Clusteridentitäten oder gleich den neuen Clusteridentitäten sind, die wir gerade wie zuvor gefunden haben, da die Operanden für gleich unseren NumPy-Arrays Dies gibt ein NumPy-Array von boolesche Werte, die nur Wahr und False enthalten, true, wenn beide Seiten gleich sind und andernfalls falsch. Beachten Sie, dass unser Algorithmus nur konvergiert ist , wenn alle Werte wahr sind. Im Grunde machen wir ein großes Statement. Wir sagen also, ob die erste Position wahr ist und ob die zweite Position wahr ist und ob die dritte Position wahr ist und so weiter. Eine kurze Möglichkeit, dies zu tun, besteht darin, die Funktion np dot all aufzurufen. Dies gibt true zurück, wenn das Array, das Sie übergeben alle Wahrheiten innerhalb der if-Anweisung enthält, was nur auftritt, wenn die Bedingung wahr ist. Wir drucken aus, auf welcher Iteration wir konvergiert haben, und rufen dann break auf , um die äußere Schleife zu beenden. Okay, lass uns das machen. Ordnung, wie Sie sehen können, ist K-Means in viel weniger als 20 Schritten konvergiert. Als nächstes werden wir, genau wie in unserer vorherigen Übung , das Ergebnis unseres Algorithmus darstellen. Denken wir also auf hohem Niveau darüber nach. Am Anfang hatten wir nur das Array x. Ja, wir hatten die wahren Cluster-Mittelwerte, aber wir tun so, als wüssten wir sie nicht. Und wenn Sie darüber nachdenken, was Sie mit einem echten Datensatz haben würden, würden Sie diese nicht kennen. Unser ursprüngliches Diagramm war also ein Diagramm dem nur die Daten ohne Farben und ohne Clusterzentren dargestellt wurden. Jetzt, nachdem wir K-Means ausgeführt haben, haben wir mehr Informationen. Jetzt haben wir Cluster-Identitäten, die es uns ermöglichen, jedem Punkt in jedem Cluster eine andere Farbe zu geben . Darüber hinaus haben wir auch die Clusterzentren, sodass wir diese auch auf unserem Grundstück zeichnen können. Wie Sie sich erinnern, haben wir diese früher als große rote Sterne gezeichnet. Okay, hoffentlich können Sie diesen Code von früher erkennen. Die erste Zeile erstellt ein Streudiagramm der Daten färbt jeden Datenpunkt nach den Clusteridentitäten. Also alle Punkte, die zu Cluster Null gehören, haben wir eine Farbe, alle Punkte, die zu Cluster eins gehören, wir haben eine andere Farbe und so weiter. Als nächstes rufen wir die Scatter-Funktion auf. Aber dieses Mal geben wir nach wie vor S gleich 500, machen diese Datenpunkte größer und wir übergeben Z gleich Rot, um sie rot zu machen. Und wir setzen eine Markierung gleich Stern, sodass sie als Sterne erscheinen. Okay, lass uns das machen. Ordnung, also hoffentlich ist es das, was Sie erwarten. Dies sind die gleichen Daten wie zuvor, aber jetzt haben sie Farben entsprechend den Clusteridentitäten, die durch K-Means gefunden wurden. Außerdem haben wir die Clusterzentren mit roten Sternen markiert . Dies sind alles Informationen, die wir vor dem Ausführen von K-Means nicht hatten , wo wir nur die Daten selbst haben. Als nächstes haben wir eine kurze Schleife , um den Trainingsprozess zu visualisieren. Wie Sie sich erinnern, haben wir die Cluster-Identitäten bei jedem Schritt von k-means gespeichert . Indem wir also die Daten entsprechend den Clusteridentitäten in jedem Schritt darstellen , können wir sehen, wie sich die Cluster entwickeln, wenn der Algorithmus lernt. Okay, also wenn du diesen Code verstehen willst, werde ich ihn sehr schnell durchgehen. Zuerst haben wir die Anzahl der Cluster-Identitäten ermittelt, die wir gespeichert haben. Beachten Sie, dass dies variabel ist, da wir nicht wissen, wie oft die Trainingsschleife durchlaufen wird Wir weisen dies einer Variablen namens m zu. Als nächstes rufen wir die Funktion bei plt.plot subplots auf set die Größe des Grundstücks. Das erste Argument legt die Breite und das zweite Argument gibt die Höhe an. Ich habe die Zahl von fünf willkürlich gewählt, was für mich groß genug ist. Aber der wichtige Teil ist, die Höhe, die m ist, mal die Größe der Breite festzulegen . Das liegt daran, dass wir mir Nebenhandlungen machen werden und wir wollen, dass sie alle passen. Jede der einzelnen Nebenhandlungen wird fünf mal fünf sein. Okay, als nächstes machen wir mal eine Schleife. Innerhalb der Schleife rufen wir plt.show subplot auf. Es gibt drei Argumente für diese Funktion. Erstens ist die Anzahl der Zeilen in unserem Plot und zweitens die Anzahl der Spalten in unserem Plot. Wir werden also m Zeilen und eine Spalte haben. Das heißt, wir machen EM-Pläne und sie werden alle übereinander liegen. Das dritte Argument gibt an, welcher Plot um ein Diagramm außerhalb des m liegt. Im Grunde ist das nur I plus eins, da der erste Wert von i Null sein wird. Als nächstes erhalten wir y, das den Cluster-Identitäten bei der Iteration i zugewiesen wird . Als nächstes rufen wir plt.show scatter auf und übergeben unsere Daten und warum die aktuellen Farbeinstellungen. Okay, lass uns das machen. Ordnung, hoffentlich ist diese Handlung nützlich, damit Sie den Fortschritt von K-Means sehen können. Sie können sehen, dass wir mit allem beginnen , was dieselbe Farbe hat, weil wir die Clusteridentitäten so initialisieren , dass sie ein Array aller Nullen sind. Dann können wir sehen, dass sich die Clustertrennung allmählich verbessert. Schließlich haben wir die endgültigen Cluster-Identitäten, an dem wir das Training beendet haben. ist wichtig zu beachten, wie sich die Clusteridentitäten mit jedem Schritt langsam verbessern. Durch die intelligente Einstellung der Clusteridentitäten werden die Clusteridentitäten nicht schlechter, sondern nur besser. In späteren Vorlesungen werden wir diese Idee quantifizieren. 9. K-Means Ziel (Theorie): In dieser Vorlesung werden wir über die K-Means-Zielfunktion sprechen . Um diese Idee einzuführen, ist es hilfreich, zunächst einige Erfahrungen mit anderen Modellen des maschinellen Lernens zu sammeln, z. B. mit linearer Regression und logistischer Regression. Wenn Sie das tun, wird das sehr hilfreich sein. Aber wenn Sie dies nicht tun, versuchen Sie Ihr Bestes, um mitzumachen. Im Wesentlichen sind lineare Regression, logistische Regression und K-Means-Clustering logistische Regression und K-Means-Clustering Beispiele für maschinelles Lernen. Das Schlüsselwort in diesem Satz ist Lernen. Daher ist die wichtige Frage, die wir uns stellen Was meinen wir mit Lernen? Im Allgemeinen hat unser Modell normalerweise ein gewisses Ziel. Ja, man könnte sagen, unser Ziel ist es zu lernen, aber wir wollen spezifischer und spezifischer sein. Das Ziel ist eine Zahl. Beim überwachten Lernen wie linearer Regression und logistischer Regression ist diese Zahl der Fehler. Sie können sich das Ziel vorstellen, zum Beispiel, wie viele Fehler ich mache. Lernen bedeutet also, Ihr Gehirn so zu konfigurieren , dass Sie immer weniger Fehler machen. Ich hoffe also, dass die Analogie zum menschlichen Lernen klar ist. Lernen ist gleichbedeutend mit der Konfiguration Ihres Gehirns oder Ihres Weltmodells , um weniger Fehler zu machen. Bei der linearen Regression ist unser Ziel die Summe der quadrierten Fehler. Es gibt mehrere Gründe, warum dies sinnvoll ist, aber hier ist ein einfacher Grund. linearen Regression geht es darum, die Linie der besten Anpassung zu finden. Mit anderen Worten, wir möchten, dass die Linie so nah wie möglich an den Punkten liegt. In diesem Diagramm können Sie sehen, dass unsere Best-Fit-Linie manchmal überschätzt, wenn sie eine Vorhersage trifft, und manchmal unterschätzt sie. Somit kann der Fehler tatsächlich positiv oder negativ sein. Natürlich möchten Sie die Bereiche nicht einfach zusammenfügen , denn wenn Sie eine positive Zahl und eine negative Zahl hinzufügen eine positive Zahl und , die gleich sind , erhalten Sie Null. Wenn z.B. einer der Fehler plus fünf und der andere Fehler minus fünf ist, ist plus fünf plus minus fünf Null. Und natürlich möchten Sie nicht, dass der Gesamtfehler Null ist, wenn Ihr Modell tatsächlich einen Fehler ungleich Null gemacht hat. Deshalb quadrieren wir die Fehler so, dass sie alle positiv sind. Um sie in eine einzige Zahl umzuwandeln, addieren wir sie, also die Summe der quadrierten Fehler. Wir nennen diese Summe der quadrierten Fehler oder Kostenfunktion. Beachten Sie, dass es andere Arten von Kostenfunktionen gibt, z. B. die Kreuzentropie, die für die logistische Regression verwendet wird. Für diesen Kurs interessieren wir uns jedoch hauptsächlich für den quadratischen Fehler. Der nächste Schritt beim Trainieren eines linearen Regressions- oder logistischen Regressionsmodells besteht darin, herauszufinden, wie die Modellparameter aktualisiert werden, damit Sie den Fehler verringern können. Wie Sie dies genau tun, liegt außerhalb des Rahmens dieses Kurses, aber Sie sollten sich mit linearer Regression und logistischer Regression vertraut machen, wenn Sie neugierig sind. Wichtig ist zu beachten, dass dies genau wie beim K-Means-Clustering iterativ erfolgt. Das heißt, wir haben eine Schleife. Innerhalb der Schleife aktualisieren wir die Modellparameter. Bei jeder Iteration der Schleife hoffen wir, die Parameter des Modells so zu aktualisieren , dass sich der Fehler immer verbessert. Auch hier liegt die Art und Weise, wie wir dies tun außerhalb des Rahmens dieses Kurses, aber erkennen Sie an, dass dies möglich ist. Beachten Sie, dass die Analogie zum menschlichen Lernen auch in diesem Zusammenhang sinnvoll ist. Sie können sich jede Iteration der Schleife als einen Durchgang durch die Trainingsdaten vorstellen . Das heißt, jedes Mal, wenn Sie die Trainingsdaten sehen, verbessert sich Ihr Verständnis davon sodass Sie die Bereiche, die Sie erstellen, verringern. Dies gilt sowohl für Menschen als auch für Maschinen. Je mehr ich übe, desto intelligenter werde ich. Okay, es stellt sich also heraus, dass viele Algorithmen für maschinelles Lernen auf diese Weise trainiert werden. Die Methode ist, wir denken an eine nützliche Kostenfunktion. Dann leiten wir eine Aktualisierungsregel , sodass das Modell seinen Fehler verbessert, wenn wir diese Aktualisierungsregel weiter anwenden . Schließlich konvergiert der Fehler zu einem Mindestwert. An diesem Punkt können Sie sehen , dass Sie dieses Lernen abgeschlossen haben. In diesen Situationen ist es hilfreich, die Kosten pro Iteration nach Kosten pro Iteration Abschluss des Trainings darzustellen, damit Sie überprüfen können , ob der Trainingsprozess erfolgreich war. Und wieder verwenden viele Algorithmen diese Lernmethode. Wie bereits erwähnt, gilt dies für K-Means-Clustering, lineare Regression und logistische Regression. Es gilt auch für tiefe neuronale Netze, Reinforcement Learning und Matrixfaktorisierung, um nur einige Beispiele zu nennen. Okay, das ist also die Idee von Lern- und Kostenfunktionen im Allgemeinen. Aber was ist die Kostenfunktion oder die Zielfunktion für K-Means? als Randnotiz daran, dass Kosten und Ziel sowie Verlust und Irrtum Synonyme sind. Wenn ich jemals einen dieser Begriffe anstelle des anderen verwende , seien Sie nicht beunruhigt. Sie meinen alle dasselbe. In jedem Fall, wenn Sie mit der Summe der quadrierten Fehler für die lineare Regression vertraut sind , werden Sie auch mit der Kostenfunktion für k-means vertraut sein, die sehr ähnlich aussieht. Okay, lassen Sie uns das langsam durchgehen, damit Sie jede Komponente des Ziels verstehen. Zunächst können Sie sehen, dass es sich eine Summe von quadrierten Fehlern handelt. Wir summieren alle n Datenpunkte und quadrieren das Ding darin. Beachten Sie, dass wir die euklidische Entfernung mit Doppelbalken bezeichnen, da x sub n und m sub k Vektoren sind . Das ist unsere Notation für die Norm. Der Teil, der für manche Leute verwirrend ist, ist die seltsame Notation. Dies wird als Indikatorfunktion bezeichnet. Es hat den Wert eins, wenn das Argument wahr ist , andernfalls Null. Wie Sie sich erinnern, speichert y sub n die Clusteridentität des n-ten Datenpunkts. Daher können wir dies wie folgt interpretieren. Obwohl wir alle Werte von k summieren, trägt nur einer von ihnen zu den Kosten bei. Es ist diejenige, die y von n entspricht. Und das liegt daran, dass y von n X von n einem Cluster zuweist. Daher sind die Kosten die quadratische Entfernung zwischen x sub n und dem Mittelwert des Clusters, zu dem es gehört. Hoffentlich macht das Sinn. Wir summieren alle n Datenpunkte. Für jeden der n Datenpunkte fügen wir eine einzelne Quadratentfernung hinzu. Die quadratische Entfernung, die wir addieren, ist die quadrierte Entfernung zwischen x sub n und dem Mittelwert des Clusters, zu dem er gehört. Wenn also x sub n zum Cluster k gehört, dann addieren wir den quadrierten Abstand zwischen x von n und m sub k. Als Randnotiz können Sie sehen, dass kleine k Summen von eins bis zu großem K im Code. Kleine Fallsummen von Null bis k minus eins. Das liegt nur daran, wie die Programmierung in Python funktioniert. Denken Sie also nur an diesen Unterschied. Wenn wir Gleichungen schreiben, ist es normalerweise einfacher, von eins statt von Null zu zählen. Es lohnt sich auch, darüber zu sprechen warum dieses Ziel sinnvoll ist. Um dies zu verstehen, können wir verschiedene Szenarien in Betracht ziehen. Betrachten wir zunächst das Szenario, in dem die Cluster sehr klar definiert sind. Alle Datenpunkte, die zu einem Cluster gehören , befinden sich sehr nahe am Clusterzentrum. Da dies der Fall ist, werden alle quadratischen Abstände sehr klein sein. Daher wird auch die Gesamtsumme der quadratischen Entfernungen sehr klein sein. Okay, betrachten wir jetzt ein zweites Szenario. Dieses Mal sind die Cluster weniger gut definiert. Jetzt können die Datenpunkte sehr weit vom Clusterzentrum entfernt sein . Aus diesem Grund sind die quadratischen Entfernungen größer und daher ist die Gesamtsumme der quadratischen Entfernungen größer. Die Kostenfunktion begünstigt dieses Szenario nicht , da die Cluster weniger genau definiert sind als zuvor. Betrachten wir nun ein drittes Szenario, bei dem die tatsächlichen Clusterzuweisungen in diesem Fall falsch sind, weil die Datenpunkte nicht dem nächstgelegenen Clusterzentrum zugewiesen sind. Die quadratische Entfernung zwischen jedem Datenpunkt und dem Clusterzentrum, dem er tatsächlich zugewiesen ist , ist sehr groß. Da diese Entfernungen sehr groß sind, die Gesamtsumme der quadratischen Entfernungen auch die Gesamtsumme der quadratischen Entfernungen sehr groß. Also klar, um die Kosten gering zu halten, sollten wir jeden Datenpunkt dem nächstgelegenen Clusterzentrum zuordnen , wodurch die Entfernung minimiert wird. Beachten Sie, dass wir aufgrund des k-means-Algorithmus die Zielfunktion auf alternative Weise schreiben können und diese möglicherweise leichter zu verstehen ist. In diesem Forum müssen wir also nicht mehr über k summieren. Wir wissen, dass x von n zwei Clustern zugewiesen wird , denen es am nächsten ist. Daher ist der innere Teil der Kosten nur die quadratische Entfernung zwischen x von n und dem Mittelwert , der der Verwendung der Quadratwurzel der euklidischen Entfernung am nächsten kommt . In diesem Formular nehmen wir den Mindestabstand direkt mit der Min-Notation an. Eine weitere Möglichkeit, das K-Means-Ziel zu schreiben, ist diese. Wir können eine Größe definieren , die als Verantwortungsmatrix bezeichnet wird mit dem Buchstaben R Im Grunde ist dies dasselbe wie die Indikatorfunktion, die wir zuvor gesehen haben. Aber jetzt ist es eine Matrix anstelle einer Funktion, im Wesentlichen r von n k, das heißt, der Wert in Zeile n, Spalte k ist gleich eins. Wenn x von n zum Cluster k gehört, ist es andernfalls Null. Sie sollten in der Lage sein zu überprüfen, ob jede Zeile unseres , die einem einzelnen Datenpunkt in X entspricht , nur einen einzigen enthält und der Rest der Werte Null sein muss. Das liegt daran, dass x nur zu einem einzigen Cluster gehören kann. Mit anderen Worten, x kann nur eine einzige Clusteridentität haben. Und so haben wir wieder diese Situation, in der, obwohl wir alle Werte von k summieren, technisch gesehen nur einer dieser Begriffe ungleich Null ist und der Rest Null ist, weil der Verantwortungswert ist Null , wenn x nicht zu diesen Clustern gehört. Eine interessante Tatsache ist, dass wir für K-Means den Lernalgorithmus nicht aus der Kostenfunktion abgeleitet haben. Alles, was wir getan haben, war von zwei einfachen Fakten über Clustering auszugehen, die Sinn zu ergeben schienen. Dann entdeckten wir, dass wir, wenn wir diese beiden einfachen Fakten in einer Schleife wiederholen, am Ende K-Means erhalten würden. Zusammenfassend sind diese beiden Fakten wie folgt. Erstens sollten die Clusteridentitäten so zugewiesen werden, dass X von n zu dem Clusterzentrum gehört, dem sich am nächsten befindet. Und Nummer zwei, die Clusterzentren sind nur der Durchschnitt aller Xs, die dazu gehören. Unter Verwendung dessen, was wir über Kostenfunktionen wissen, scheint dies jedoch nicht sehr streng zu sein. Sie fragen sich vielleicht, ob lineare Regression und neuronale Netze ihre Lernregeln aus der Zielfunktion ableiten können , warum können wir das für K-mean tun? Zu diesem Zeitpunkt sind wir noch nicht bereit zu verstehen, wie dieser Algorithmus abgeleitet werden kann. Wenn Sie jedoch mehr erfahren möchten, sollten Sie sich mit Gaußschen Mischungsmodellen, auch bekannt als GMM, vertraut machen. Gmm ist oder ein probabilistisches Modell, das als Verallgemeinerung des K-Means-Clusterings durch die Linse des GMM angesehen werden kann K-Means-Clusterings durch die Linse des GMM Sie können den Aktualisierungsalgorithmus für K-Means in Bezug auf die Probabilistik ableiten Mengen. Wenn Sie also nach einer strengeren Ableitung suchen, wäre dies der nächste Schritt, den Sie untersuchen sollten. Der Hauptpunkt dieser Vorlesung ist es, die Idee zu verstehen , dass K-Means in erster Linie eine objektive Funktion hat. Das hätten Sie nicht nur vom Algorithmus selbst gewusst . Deshalb haben wir es bis jetzt nicht besprochen. Der zweite Punkt ist, dass wir dadurch mehr Code schreiben können. Ihre nächste Übung ist insbesondere diese. Nehmen Sie den K-Means-Code, den wir zuvor hatten, und fügen Sie weiteren Code hinzu, damit wir nach dem Training die Zielfunktion bei jeder Iteration zeichnen können. Wir erwarten, dass bei jeder Iteration des K-Means-Clusterings das Ziel immer kleiner bis es auf einen Mindestwert konvergiert. Schreiben Sie also bitte diesen Code und bestätigen Sie, dass dies wahr ist. Ordnung, das ist also die Übung. Viel Glück und wir sehen uns in der nächsten Vorlesung. 10. K-Means Objektiv (Code): In dieser Vorlesung werden wir die nächste Übung zur Implementierung von k-means abschließen , bei der die Kostenfunktion während des Trainingsprozesses dargestellt wird . Sobald wir dies getan haben, können wir unsere k-means-Implementierung als abgeschlossen betrachten . Wie Sie sehen werden, ist dies nur eine einfache Änderung des Codes, den wir bereits geschrieben haben. Da wir die meisten Arbeiten in der vorherigen Vorlesung abgeschlossen haben. Bitte stellen Sie wie immer sicher, dass Sie diese Übung abgeschlossen haben , bevor Sie sich diese Vorlesung ansehen, da dies Ihre Hausaufgaben für diesen Kurs sind. Mit anderen Worten, schauen Sie sich nicht die Lösungen für die Hausaufgaben an, bevor Sie die Hausaufgaben erledigt haben. Okay, lass uns anfangen. Zunächst können Sie sehen, dass alle Anfangsteile des Codes identisch sind. Die Eingaben sind die gleichen, die Daten sind die gleichen. Was uns interessiert, ist die K-Means-Trainingsschleife. Scrollen wir also nach unten zu diesem Teil des Notizbuches. Nun haben Sie vielleicht angenommen, dass wir eine separate Funktion zur Berechnung der Kosten haben würden , aber es stellt sich heraus, dass die Berechnung innerhalb unserer Trainingsschleife einfacher ist . Beachten Sie, dass wir die Version der Kosten verwenden werden, die den Min-Operator enthält. In diesem Fall ist es nicht erforderlich, eine doppelte Summierung über die n Proben und die k-Cluster durchzuführen . Der wahre Grund, warum Sie die k Cluster summieren müssen , ist, dass Sie herausfinden müssen, zu welchem Cluster jeder Datenpunkt x von n gehört. In K-Mittelwerten ist dies durch den Mindestabstand zwischen x von n und jedem Mittelwert definiert den Mindestabstand zwischen . Sie werden sich jedoch daran erinnern, dass wir dies bereits im Code gefunden haben. Wenn wir also eine Funktion dafür einrichten würden, würden wir die Arbeit wiederholen, die wir bereits geleistet haben, was ineffizient wäre. Okay, schauen wir uns den Code an, damit wir überprüfen können , wo wir diese Berechnung bereits durchgeführt haben. Bevor wir überhaupt in die Trainingsschleife gehen, werden wir zunächst zwei neue Variablen erstellen. Wir haben Min-Discs, das ist Plural , ein Array, das die Mindestabstände für alle n Samples speichert . Als nächstes haben wir eine Liste , um die Kosten zu speichern. Dies ist eine Liste und nicht im Array da die Anzahl der Iterationen variabel ist. Hier werden also die Kosten bei jeder Iteration gespeichert. Okay, also schauen wir uns innerhalb der Schleife Schritt Nummer eins genau an. Sie werden feststellen, dass wir zwei Schleifen durchführen, eine über die n Datenpunkte und eine über die k Cluster. Für jeden der k Cluster berechnen wir den euklidischen Abstand der Quadratwurzel zwischen dem Clustermittelwert, dem n-ten Datenpunkt. Außerdem werden Sie sich daran erinnern, dass wir dies in einer Variablen namens min dist speichern . Das ist genau das, was wir für die Kosten brauchen. Deshalb müssen wir nur noch unsere innere Schleife vollenden. Speichern Sie einfach die Men-Disk in den Array-Min-Disks Sobald wir Schritt eins abgeschlossen haben, haben wir jetzt alle N Min-Discs, die die quadratischen euklidischen Entfernungen zwischen jedem Datenpunkt und dem nächstgelegenen Clusterzentrum darstellen. Wie Sie wissen, sind die Gesamtkosten nur die Summe davon. Deshalb rufen wir die Sum-Funktion Männer auf, um die Kosten zu ermitteln, und wir speichern dies in unserer Liste der Autos. Danach ist der Rest des Codes derselbe. Nachdem wir mit dem Training fertig sind, können wir plt.plot aufrufen, um die Kosten pro Iteration darzustellen. Wie Sie sehen können, sinken die Kosten pro Iteration bei jeder Iteration und konvergieren schließlich wie versprochen auf einen Mindestwert. Erinnern wir uns noch einmal daran, warum das wichtig ist. Dies ist wichtig, wenn Sie ein Modell mit einem iterativen Algorithmus trainieren. In der Regel beinhaltet dies die Minimierung oder Maximierung eines Ziels. Daher möchten Sie dieses Ziel über jede Iteration hinweg zeichnen, um zu überprüfen , ob Ihr Code wie beabsichtigt funktioniert. In der Tat können manchmal, wie beim Deep Learning, selbst wenn Ihr Code korrekt ist Dinge aufgrund einer suboptimalen Auswahl von Hyperparametern immer noch fehlschlagen, selbst wenn Ihr Code korrekt ist. Das ist ein weiterer Grund, warum Sie die Kosten pro Iteration darstellen müssen. Wenn Sie dies nicht tun, haben Sie keine Ahnung, ob Ihr Modell gelernt hat, was es lernen sollte, nur weil Ihr Code korrekt ist. Dies bedeutet nicht, dass die von Ihnen ausgewählten Hyperparameter auch korrekt sind. Die Lektion ist also, wann immer Sie einen iterativen Algorithmus haben, ist es immer wichtig, die Kosten pro Iteration darzustellen.