Maschinenlernen ohne Python, Anaconda und andere Kriechtiere

Nein, ich meine das natürlich nicht ernst. Es muss eine Grenze geben, wie weit man ein Thema vereinfachen kann. Aber für die ersten Schritte, um die grundlegenden Konzepte zu verstehen und schnell in das Thema hineinzufinden, könnte es vielleicht in Ordnung sein. Wie wir dieses Material richtig benennen (Optionen: "Maschinelles Lernen für Einsteiger", "Datenanalyse von Grund auf", "Algorithmen für die Kleinsten") werden wir am Ende besprechen.

Zur Sache. Ich habe einige Anwendungsprogramme in MS Excel geschrieben, um die Prozesse zu visualisieren und anschaulich darzustellen, die in verschiedenen Methoden des maschinellen Lernens bei der Datenanalyse ablaufen. Seeing is believing, schließlich, wie die Träger der Kultur sagen, die die meisten dieser Methoden entwickelt hat (übrigens sind nicht alle Methoden aus dieser Kultur. Die leistungsstarke "Support Vector Machine", oder SVM, ist eine Erfindung unseres Landsmanns Vladimir Vapnik, vom Moskauer Management-Institut. 1963, wohlgemerkt! Er lehrt und arbeitet jetzt jedoch in den USA).

Drei Dateien zur Einsichtnahme

1. K-Means-Clustering

Diese Art von Aufgaben gehört zum "unüberwachten Lernen", bei dem wir die Rohdaten in eine vorher festgelegte Anzahl von Kategorien unterteilen müssen, wobei wir keine "richtigen Antworten" haben, die wir aus den Daten extrahieren müssen. Die grundlegende klassische Aufgabe, die Unterarten von Irisblüten zu finden (Ronald Fisher, 1936!), die als das erste Beispiel dieses Wissensbereichs gilt, hat genau diese Natur.

Die Methode ist ziemlich einfach. Wir haben eine Menge von Objekten, die als Vektoren (Sammlungen von N Zahlen) dargestellt sind. Bei den Iris handelt es sich um Sammlungen von 4 Zahlen, die die Blume charakterisieren: Länge und Breite der äußeren und inneren Blütenblätter, jeweils (Iris von Fisher - Wikipedia). Als Abstand oder Maß für die Nähe zwischen den Objekten wird die gewöhnliche euklidische Metrik gewählt.

Dann werden zufällig (oder nicht zufällig, siehe unten) die Zentrum der Cluster ausgewählt, und die Abstände von jedem Objekt zu den Clusterzentren werden berechnet. Jedes Objekt wird in diesem Iterationsschritt dem nächsten Zentrum zugeordnet. Dann wird das Zentrum jedes Clusters zu dem arithmetischen Mittel der Koordinaten seiner Mitglieder verschoben (analog zur Physik wird es auch "Schwerpunkt" genannt), und das Verfahren wiederholt sich.

Der Prozess konvergiert relativ schnell. In den zweidimensionalen Bildern sieht das so aus:

1. Zufällige Verteilung der Punkte auf der Ebene und die Anzahl der Cluster

Maschinenlernen ohne Python, Anaconda und andere Kriechtiere

2. Festlegung der Clusterzentren und Zuordnung der Punkte zu ihren Clustern

Maschinenlernen ohne Python, Anaconda und andere Kriechtiere

3. Verschiebung der Koordinaten der Clusterzentren, Neuberechnung der Zuordnung der Punkte, bis die Zentren stabil sind. Die Bewegung des Clusterzentrums in die endgültige Position ist sichtbar.

Maschinenlernen ohne Python, Anaconda und andere Kriechtiere

Jederzeit können neue Clusterzentren festgelegt werden (ohne eine neue Punktverteilung zu generieren!) und man sieht, dass der Aufteilungsprozess nicht immer eindeutig ist. Mathematisch bedeutet dies, dass wir bei der zu optimierenden Funktion (der Summe der quadrierten Abstände der Punkte zu den Zentren ihrer Cluster) kein globales, sondern ein lokales Minimum finden. Dieses Problem kann entweder durch eine gezielte Auswahl der Startclusterzentren oder durch das Durchprobieren möglicher Zentren gelöst werden (es kann vorteilhaft sein, sie genau in eine der Punkte zu setzen, sodass man zumindest die Garantie hat, keine leeren Cluster zu erhalten). In jedem Fall gibt es für eine endliche Menge immer eine genaue untere Grenze.

Hier kann man mit dieser Datei experimentieren (vergessen Sie nicht, die Makros zu aktivieren. Die Dateien wurden auf Viren überprüft)

Eine Beschreibung der Methode auf Wikipedia — K-Means-Methode

2. Approximation durch Polynome und Datenaufteilung. Überanpassung

Der bemerkenswerte Wissenschaftler und Popularisierer der Datenwissenschaft K.V. Woronczow spricht kurz über die Methoden des maschinellen Lernens als „Wissenschaft des Durchziehens von Kurven durch Punkte“. In diesem Beispiel werden wir mit der Methode der kleinsten Quadrate Muster in den Daten finden.

Die Technik der Aufteilung der Ausgangsdaten in „Trainings- und Testdaten“ wird gezeigt, sowie das Phänomen der Überanpassung oder „Neuanpassung“ an die Daten. Bei richtiger Approximation werden wir einen bestimmten Fehler bei den Trainingsdaten und einen etwas größeren Fehler bei den Testdaten haben. Bei falscher Approximation tritt eine genaue Anpassung an die Trainingsdaten und ein enormer Fehler bei den Testdaten auf.

(Es ist bekannt, dass durch N Punkte eine eindeutige Kurve n-1. Grades gezogen werden kann, und diese Methode gibt im Allgemeinen nicht das gewünschte Ergebnis.) Interpolationspolynom von Lagrange auf Wikipedia)

1. Wir legen die ursprüngliche Verteilung fest

Maschinenlernen ohne Python, Anaconda und andere Kriechtiere

2. Wir teilen die Punkte im Verhältnis 70 zu 30 in „Trainings- und Testdaten“ auf.

Maschinenlernen ohne Python, Anaconda und andere Kriechtiere

3. Wir führen eine approximierende Kurve durch die Trainingspunkte und sehen den Fehler, den sie bei den Testdaten gibt.

Maschinenlernen ohne Python, Anaconda und andere Kriechtiere

4. Wir zeichnen eine exakte Kurve durch die Trainingspunkte, und sehen den monströsen Fehler bei den Testdaten (und null bei den Trainingsdaten, aber was nützt das?).

Maschinenlernen ohne Python, Anaconda und andere Kriechtiere

Es wird natürlich die einfachste Variante mit einer einzigen Aufteilung in „Trainings“- und „Test“-Mengen gezeigt, im allgemeinen Fall wird dies mehrfach gemacht, um die Koeffizienten besser anzupassen.

Die Datei ist hier verfügbar, antivirusgescannt. Aktivieren Sie die Makros für eine korrekte Funktion.

3. Gradientensenkung und Dynamik der Fehleränderung.

Hier wird der 4-dimensionale Fall und die lineare Regression behandelt. Die Koeffizienten der linearen Regression werden schrittweise mit der Methode der Gradientensenkung bestimmt, anfangs sind alle Koeffizienten Null. Auf einem separaten Diagramm sieht man die Dynamik der Fehlerreduzierung, während die Koeffizienten immer genauer angepasst werden. Es gibt die Möglichkeit, alle vier 2-dimensionalen Projektionen zu betrachten.

Wenn der Schritt der Gradientensenkung zu groß gewählt wird, sieht man, dass wir jedes Mal den Minimum überschreiten und das Ergebnis in einer größeren Anzahl von Schritten erreichen, obwohl wir letztendlich trotzdem ankommen (es sei denn, wir wählen den Schritt zu hoch – dann wird der Algorithmus "außer Kontrolle geraten"). Und das Diagramm der Fehlerabhängigkeit vom Iterationsschritt wird nicht glatt, sondern „ruckhaft“ sein.

1. Wir generieren Daten, legen den Schritt der Gradientensenkung fest.

Maschinenlernen ohne Python, Anaconda und andere Kriechtiere

2. Bei richtiger Wahl des Schrittes der Gradientensenkung erreichen wir ruhig und schnell das Minimum.

Maschinenlernen ohne Python, Anaconda und andere Kriechtiere

3. Bei falscher Wahl des Schrittes der Gradientensenkung überschießen wir das Maximum, das Fehlerdiagramm ist „ruckhaft“, die Konvergenz dauert mehr Schritte.

Maschinenlernen ohne Python, Anaconda und andere Kriechtiere
und

Maschinenlernen ohne Python, Anaconda und andere Kriechtiere

4. Bei völlig falscher Wahl des Schrittes der Gradientensenkung entfernen wir uns vom Minimum.

Maschinenlernen ohne Python, Anaconda und andere Kriechtiere

(Um den Prozess bei den in den Bildern gezeigten Wert des Schrittes der Gradientensenkung zu reproduzieren, setzen Sie ein Häkchen bei „Referenzdaten“).

Die Datei ist über diesen Link verfügbar, Sie müssen die Makros aktivieren, es gibt keine Viren.

Wie denkt die geschätzte Gemeinschaft, ist eine solche Vereinfachung und Methodik der Materie zulässig? Sollte der Artikel ins Englische übersetzt werden?

Quelle: habr.com

60GB SSD 8Gb DDR4