Erstellen handschriftlicher Ziffernerkennungsmodelle ohne neuronale Netze | von Dallin Stewart | Juni 2023

0
28


Ein Okay-Nearest Neighbor-Ansatz für maschinelles Lernen für das klassische handschriftliche Ziffernklassifizierungsproblem | Code anzeigen.

„Du bist der Durchschnitt der fünf Menschen, mit denen du die meiste Zeit verbringst.“

– Jim Rohn

Das Schreiben eines Programms zur Klassifizierung handgeschriebener Ziffern ist eine der klassischen Einführungsherausforderungen für Studierende, die noch keine Erfahrung mit künstlicher Intelligenz und neuronalen Netzen haben. Das Drawback erfordert, dass das Programm ein kleines (28×28) Graustufenbild einer einzelnen Ziffer betrachtet und die richtige Zahl ausgibt, was eine Herausforderung darstellt, da ein Pc Daten und Bilder nicht auf die gleiche Weise verarbeitet wie wir.

Ein 28x28 großes Bild einer handgeschriebenen Ziffer
Ein 28×28 großes Bild einer handgeschriebenen Ziffer

Maschinelles Lernen ist ein Zweig der künstlichen Intelligenz, der sich auf jeden Algorithmus bezieht, der sich selbst modifiziert, um eine bestimmte Aufgabe oder ein bestimmtes Ziel zu optimieren. Heutzutage basieren die beliebtesten KI-Implementierungen auf Algorithmen wie neuronalen Netzen (AlphaGo) und Transformatoren (ChatGPT), aber es gibt viele andere Methoden wie die, die wir heute untersuchen werden. Wir können diese spezielle Klasse von Problemen tatsächlich ohne komplizierte neuronale Netze lösen, indem wir das Drawback geschickt umstrukturieren und stattdessen einen viel (mathematisch) einfacheren Algorithmus namens Okay-Nearest Neighbors anwenden. Mit einer Genauigkeit von etwa 90 % ist es zwar nicht die leistungsstärkste Technik, liefert aber für eine so grundsätzlich einfache Idee eine überraschend gute Leistung.

Heuristisch speichert der Algorithmus Darstellungen der Bilder und ihrer Lösungsziffern aus den Trainingsdaten im Speicher. Wenn ein neues Bild eingegeben wird, findet der Algorithmus die ähnlichsten Bilder in seinen Trainingsdaten, weist sie an, darüber abzustimmen, welche Ziffer das Bild darstellt, und gibt die Gewinnerziffer als Antwort aus.

Das erste, was wir tun müssen, bevor wir mit der Klassifizierung von Bildern beginnen können, ist die Definition des Abstands, auch bekannt als Auswahl einer „Metrik“. Das fühlt sich vielleicht etwas albern und völlig irrelevant an – Entfernung ist schließlich nur der Abstand zwischen zwei Objekten! Ein großer Teil der Leistungsfähigkeit und des Nutzens der Mathematik liegt jedoch darin, selbst die komplexesten Ideen rigoros zu definieren und dabei alle semantischen Mehrdeutigkeiten zu beseitigen. Dieser Ansatz ermöglicht es uns, konsistent und zuverlässig Theoreme zu erstellen und anzuwenden, die zu erstaunlichen Ergebnissen wie dieser Klassifizierungslösung führen.

Die obige einfache Definition des Abstands könnte in dem dreidimensionalen Raum, an den wir gewöhnt sind, funktionieren, aber wie sieht es mit dem vierdimensionalen Raum aus? Was passiert, wenn wir es mit hundert oder sogar einer Million Dimensionen zu tun haben? Wir können die Länge einer geraden Linie vom Punkt „x“ zum Punkt „z“ mit berechnen Euklidische Metrik:

Die euklidische Metrik

Ein Teil des Issues des nächsten Nachbarn besteht darin, aus einer Menge verstreuter Punkte oder Objekte den Datenpunkt oder das Objekt zu finden, das einem bestimmten Referenzpunkt am nächsten liegt. Das Ziel besteht darin, die ähnlichste oder am nächsten liegende Entität basierend auf der soeben definierten Metrik zu bestimmen. Beispielsweise könnten wir auf einem überfüllten Markt nach dem Freund suchen, der uns am nächsten steht, entscheiden, welche Früchte in einem Korb die ähnlichste Farbe haben, oder die beiden nächstgelegenen Vektoren in einem abstrakten Vektorraum identifizieren.

Eine Möglichkeit, den engsten Freund zu finden, besteht darin, jeden einzelnen Punkt oder Freund zu überprüfen, die Entfernung zu berechnen und den nächstgelegenen Freund zurückzugeben. Dieser umfassende Suchansatz dauert so lange, dass er nur bei relativ kleinen Datensätzen funktioniert. Glücklicherweise haben wir mit KD-Bäumen eine Different.

Ein großer Baum
Nein, nicht so ein Baum

Ein KD-Baum (kurz für Okay-Dimensional Tree oder ein Baum in der Okay-ten Dimension) ist eine Datenstruktur, die Punkte in einem mehrdimensionalen Raum organisiert. Es ermöglicht ein effizientes Suchen und Abrufen von Punkten basierend auf ihrer Nähe zu einem Abfragepunkt. Der Prozess der Konstruktion und Anwendung eines KD-Baums kann wie folgt verstanden werden:

  1. Konstruktion: Zunächst wählt der Algorithmus einen Drehpunkt aus dem gegebenen Datensatz aus. Der Pivot teilt den Raum entlang einer gewählten Dimension in zwei Bereiche. Punkte hyperlinks vom Pivot werden dem linken Teilbaum zugewiesen, während Punkte rechts vom rechten Teilbaum zugewiesen werden.
  2. Rekursive Partitionierung: Der Prozess wird in jedem Teilbaum rekursiv fortgesetzt, wobei ein neuer Pivot ausgewählt und der Raum weiter entlang einer anderen Dimension aufgeteilt wird. Dieser Dimensionswechsel sorgt für eine ausgewogene und effiziente Aufteilung.
  3. Baumstruktur: Der resultierende KD-Baum bildet eine hierarchische Struktur, wobei jeder Knoten einen Drehpunkt darstellt und zwei untergeordnete Knoten aufweist, die dem linken und rechten Teilbaum entsprechen.
  4. Effiziente Suche: Um den nächsten Nachbarn oder Punkte innerhalb eines bestimmten Bereichs zu finden, folgt eine Suchabfrage einem Pfad entlang des Baums, der auf Vergleichen zwischen dem Abfragepunkt und den Drehpunkten basiert. Es erkundet selektiv Bereiche des Baumes und beschneidet Äste, die wahrscheinlich nicht die gewünschten Punkte enthalten. Durch den Vergleich von Entfernungen und das intelligente Durchlaufen des Baums schränkt der Suchalgorithmus die potenziellen Kandidaten effizient ein.
  5. Ausgleich: Um die Effizienz aufrechtzuerhalten, können während des Baus Ausgleichstechniken wie Median- oder Mittelaufteilung angewendet werden. Diese stellen sicher, dass der Baum ausgewogen bleibt, verhindern die Degeneration in eine lange lineare Struktur und optimieren die Suchleistung.
Eine grafische Darstellung eines mathematischen KD-Baums
(OpenDSA)

Kurz gesagt, KD-Bäume organisieren Punkte in einer hierarchischen Struktur und teilen den Raum rekursiv entlang verschiedener Dimensionen auf. Diese Struktur ermöglicht eine effiziente Suche durch gezielte Erkundung relevanter Regionen. Indem wir uns die Struktur von KD-Bäumen zunutze machen, können wir schnell die Okay nächsten Nachbarn zu jedem Bild einer Ziffer finden und auswählen, was related sein wird, sobald wir beginnen, die Funktionsweise des eigentlichen Algorithmus zu untersuchen. Um es klarzustellen: Das „ok“ im KD-Baum bezieht sich auf die Dimension der Daten (728 in unserem Fall), während sich das „ok“ in k-nächste Nachbarn auf die Anzahl der Nachbarn bezieht, die wir vergleichen werden (wir verwenden 4). für unsere Demonstration).

Endlich sind wir beim Sinn all der Mathematik angelangt, die wir überprüft haben. Der k-Nearest-Neighbor-Algorithmus ist eine einfache, aber leistungsstarke Technik, die für Klassifizierungsprobleme wie unseres verwendet wird. Es basiert auf dem Prinzip, dass Objekte oder Datenpunkte mit ähnlichen Eigenschaften dazu neigen, im Merkmalsraum nahe beieinander zu existieren. Hier ist eine kurze Erklärung, wie der Okay-NN-Algorithmus funktioniert:

  1. Datenvorbereitung: Zunächst benötigt der Algorithmus einen beschrifteten Datensatz, in dem jeder Datenpunkt einer Klasse oder einem Wert zugeordnet ist. Außerdem ist ein Abfragepunkt erforderlich, für den wir die Klasse oder den Wert ermitteln möchten. Wir werden den MNIST-Datensatz von 3000 28×28-Graustufenbildern handgeschriebener Ziffern verwenden.
  2. Erstellen des KD-Baums: Um die nächsten Nachbarn einer neuen handgeschriebenen Ziffer effizient zu finden, erstellen wir einen KD-Baum aus dem beschrifteten Datensatz. Dieser Schritt ermöglicht eine effiziente Suche, indem große Teile des Merkmalsraums eliminiert werden, die keine relevanten Nachbarn enthalten.
  3. Abfragen des KD-Baums: Wenn ein Abfragebild bereitgestellt wird, durchläuft der Algorithmus den KD-Baum, um nach den ok nächsten Nachbarn zu suchen. Ausgehend vom Wurzelknoten vergleicht es die Merkmale des Abfragebilds mit den in jedem Knoten gespeicherten Merkmalen und wählt mithilfe der zuvor definierten Entfernungsmetrik den Zweig aus, der näher am Abfragebild liegt. Durch iteratives Abwärtsbewegen im Baum erreicht es schließlich Blattknoten, die potenzielle nächste Nachbarn enthalten.
  4. Nachbarnauswahl: Der k-NN-Algorithmus wählt die „ok“ nächsten Nachbarn zum Abfragepunkt basierend auf den berechneten Entfernungen aus. Diese Nachbarn sind die Datenpunkte mit den geringsten Abständen zum Abfragepunkt.
  5. Abstimmung oder Mittelung: Bei Klassifizierungsaufgaben bestimmt der Algorithmus die Klasse des Abfragepunkts durch Mehrheitsabstimmung unter den ok nächsten Nachbarn. Die Klasse jedes Nachbarn hat eine Stimme entsprechend ihrer Bezeichnung, und die Klasse mit den meisten Stimmen wird zur vorhergesagten Klasse für den Abfragepunkt.
  6. Ausgabe: Der Algorithmus gibt die vorhergesagte Klasse oder den vorhergesagten Wert für den Abfragepunkt basierend auf den Ergebnissen des Abstimmungsschritts aus.

Der k-NN-Algorithmus ist flexibel und kann an verschiedene Szenarien angepasst werden. Die Wahl des Wertes für ok, die Anzahl der zu berücksichtigenden Nachbarn, ist entscheidend und hängt vom vorliegenden Datensatz und Drawback ab. Ein kleinerer k-Wert führt zu mehr lokalen und potenziell verrauschten Entscheidungen, während ein größerer k-Wert mehr globale Informationen erfasst, aber möglicherweise lokale Muster übersieht.

Den kompliziertesten Teil des Programms habe ich unten aufgeführt. Ich werde für ein wenig Kontext erklären, wie der Code zu dieser Methode gelangt. Wenn wir ein neues Bild klassifizieren möchten, übergeben wir es an die Methode „predict“ der Klasse KNeighborsClassifier. Diese Klasse verfügt bereits über den erstellten KD-Baum als Attribut. Die Vorhersagemethode gibt das beste Ergebnis zurück, indem sie die Abfragemethode des Baums aufruft, die unten ausführlich beschrieben wird.

 def question(self, z):
"""Discover the worth within the tree that's nearest to z.
Parameters:
z ((ok,) ndarray): a k-dimensional goal level.
Returns:
((ok,) ndarray) the worth within the tree that's nearest to z.
(float) The Euclidean distance from the closest neighbor to z.
"""

def KDSearch(present, nearest, dStar):
# base case
if present is None:
return nearest, dStar

# initialize search values
x = present.worth
i = present.pivot

# if the norm of x-z is lower than d* replace nearest and d*
if la.norm(x - z) < dStar:
nearest = present
dStar = la.norm(x - z)

# replace nearest and d* recursively with the suitable youngster
if z[i] < x[i]:
nearest, dStar = KDSearch(present.left, nearest, dStar)
if z[i] + dStar >= x[i]:
nearest, dStar = KDSearch(present.proper, nearest, dStar)

else:
nearest, dStar = KDSearch(present.proper, nearest, dStar)
if z[i] - dStar <= x[i]:
nearest, dStar = KDSearch(present.left, nearest, dStar)

return nearest, dStar

# return the outcomes of the KD search ranging from the basis
node, dStar = KDSearch(self.root, self.root, la.norm(self.root.worth - z))
return node.worth, dStar

Ein 28x28 großes Bild einer handgeschriebenen Ziffer
7!

Bei meiner Erkundung der handschriftlichen Ziffernklassifizierung mithilfe des k-Nearest-Neighbors-Algorithmus warfare ich von den bemerkenswerten Möglichkeiten fasziniert, mit denen die Mathematik sinnvolle Muster in Bildern und Daten aufdecken kann. Es ist wirklich erstaunlich zu sehen, wie mathematische Konzepte angewendet werden können, um handgeschriebene Ziffern genau zu erkennen und zu unterscheiden. Diese Erfahrung zeigt das Potenzial der Mathematik, neue Erkenntnisse zu gewinnen und Fortschritte in der Datenanalyse zu erzielen. Ich bin gespannt, wie die Mathematik bei Anwendungen wie dieser weiterhin eine wichtige Rolle spielen wird, unser Verständnis erweitert und die Welt um uns herum auf bemerkenswerte Weise gestaltet. Bitte besuchen Sie mich GitHub Repository, wenn Sie das vollständige Programm sehen möchten.



Source link

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here