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.