English Русский 中文 Español 日本語 Português
preview
Neuronale Netze leicht gemacht (Teil 14): Datenclustering

Neuronale Netze leicht gemacht (Teil 14): Datenclustering

MetaTrader 5Beispiele | 11 Juli 2022, 09:48
337 0
Dmitriy Gizlyk
Dmitriy Gizlyk

Inhalt

Einführung

In dieser Artikelserie haben wir bereits erhebliche Fortschritte bei der Untersuchung verschiedener Algorithmen für neuronale Netze gemacht. Alle bisher betrachteten Algorithmen basierten jedoch auf den Prinzipien des überwachten Modelllernens. Das bedeutet, dass wir einige historische Daten in das Modell eingegeben und die Gewichte so optimiert haben, dass das Modell Werte liefert, die den Referenzergebnissen sehr nahe kommen. In der Praxis führt dieser Ansatz in der Regel zu maximalen Ergebnissen. Um diesen Lernprozess zu implementieren, benötigen wir jedoch neben den historischen Daten für die Trainingsstichprobe auch Referenzergebnisse für jeden Zustand des Systems. Wie Sie wissen, ist die Erstellung von Referenzwerten mit zusätzlichen Arbeitskosten verbunden, wenn eine Lehrprobe erstellt wird. Außerdem ist es nicht immer möglich, für jeden Systemzustand ein eindeutiges Referenzergebnis anzugeben. Dies hat zur Folge, dass die mögliche Größe der Trainingsstichprobe eingeschränkt wird.

Es gibt noch einen weiteren Ansatz für Lernmethoden der künstlichen Intelligenz - das unüberwachte Lernen. Mit dieser Methode kann das Modell nur anhand der Originaldaten trainiert werden, ohne dass Referenzwerte zur Verfügung gestellt werden müssen. Dadurch werden die Arbeitskosten für die Vorbereitung der Schulungsmuster reduziert. Dies wiederum ermöglicht die Verwendung von mehr Eingabedaten zum Trainieren des Modells. Allerdings wird auch die Zahl der möglichen Aufgaben begrenzt sein.

In diesem Artikel werden Sie nicht die bisher verwendete vertikale Struktur eines neuronalen Netzes sehen, die aus mehreren neuronalen Schichten besteht. Aber das Wichtigste zuerst. Betrachten wir die möglichen Algorithmen und sehen wir, wie sie im Handel eingesetzt werden können.

1. Unüberwachtes Lernen

Bei der Entwicklung von KI-Algorithmen werden in der Regel drei verschiedene Bereiche unterschieden:

  • Überwachtes Lernen
  • Unüberwachtes Lernen
  • Verstärktes Lernen.

Wie aus den Namen hervorgeht, unterscheiden sie sich vor allem in den Ansätzen für das Training der Modelle. Die erste Methode, das überwachte Lernen, wurde in früheren Artikeln dieser Reihe ausführlich behandelt. Um diese Methode zu implementieren, benötigen wir eine Trainingsmenge mit Paaren von gelabelten Werten "Systemzustand - korrekte Ausgabe". In der Praxis führt dieser Ansatz in der Regel zu maximalen Ergebnissen. Es erfordert jedoch auch zusätzliche Ressourcen (einschließlich Personal) und Zeit für die Vorbereitung eines beschrifteten Trainingssatzes. Außerdem ist es nicht immer möglich, für jeden Systemzustand ein eindeutiges Referenzergebnis zu finden. Gleichzeitig müssen wir den menschlichen Faktor mit einer gewissen Wahrscheinlichkeit berücksichtigen. Manchmal stellen diese Gründe die größten Einschränkungen bei der Erstellung eines Trainingsdatensatzes dar.

Was können wir also tun, wenn es viele Ausgangsdaten, aber wenig Wissen über sie gibt? Oder wenn es nicht möglich ist, einen bestimmten Referenzwert für jeden Zustand des Lernprozesses anzugeben? Oder wenn wir gar nicht wissen, wie hoch dieser Referenzwert sein soll? Diese Fälle sind bei der ersten Bekanntschaft mit einer großen Datenmenge recht häufig. Anstatt Ressourcen für die Suche nach der korrekten Referenzausgabe für jeden Systemzustand aufzuwenden, werden wir zum unüberwachten Lernen übergehen. Je nach Aufgabe kann das unüberwachte Modelllernen entweder dazu verwendet werden, eine Lösung für das Problem zu finden oder die Ausgangsdaten vorzuverarbeiten.

Bitte beachten Sie, dass die Probleme, die mit überwachten und unüberwachten Lernmethoden gelöst werden, sehr unterschiedlich sind. Zum Beispiel ist es unmöglich, Regressionsprobleme mit unüberwachtem Lernen zu lösen. Man könnte Klassifizierungsaufgaben, die mit der Methode des überwachten Lernens gelöst werden, mit Clustering-Problemen vergleichen, die mit unüberwachten Lernalgorithmen gelöst werden. Hinter der ähnlichen Bedeutung dieser beiden Wörter verbirgt sich jedoch eine völlig andere Logik. Häufig führen diese beiden Methoden zu völlig unterschiedlichen Ergebnissen. Bei der überwachten Klassifizierung soll das Modell lernen, welcher Zustand des Systems welcher Klasse entspricht. Beim unüberwachten Clustering (Datengruppierung, cluster = Haufen) kann das Modell auf der Grundlage einer Reihe von Merkmalen, die diesen Zustand beschreiben, selbständig bestimmen, welchem Cluster der Zustand des Systems zuzuordnen ist. In diesem Fall kann es sein, dass wir zu Beginn der Arbeit nicht einmal die Anzahl dieser Cluster kennen. Diese Zahl ist ein Hyperparameter des Systems, der während des Modelltrainings ausgewählt werden kann.

Das zweite Problem, das durch unüberwachte Lernalgorithmen gelöst wird, ist die Suche nach Anomalien. Das bedeutet, dass das Modell nach Zuständen suchen sollte, die für ein bestimmtes System nicht charakteristisch sind, die aber aufgrund verschiedener externer Faktoren mit einer geringen Wahrscheinlichkeit auftreten können.

Ein weiteres Problem, das durch unüberwachte Lernalgorithmen gelöst wird, ist die Reduzierung der Dimensionalität der Daten. Erinnern Sie sich, dass wir in einem früheren Artikel ein ähnliches Problem mit Hilfe von Faltungsnetzen (convolutional networks) gelöst haben. Beim überwachten Lernen haben wir jedoch nach spezifischen Merkmalen gesucht, die für diese spezielle Aufgabe charakteristisch sind. Im Gegensatz dazu müssen wir beim unüberwachten Lernen die Daten so komprimieren, dass möglichst wenig Informationen verloren gehen.

Wenn wir uns alle Probleme ansehen, die von Algorithmen des unüberwachten Lernens gelöst werden, können wir sagen, dass die Hauptaufgabe eines solchen Ansatzes darin besteht, die in den Eingabedaten gefundenen Merkmale zu untersuchen und zu verallgemeinern. Mit diesem Ansatz kann das Modell unabhängig die Merkmale untersuchen, die den Systemzustand beschreiben. Dies wird auch häufig bei der Lösung von Problemen des überwachten Lernens verwendet. In diesem Fall wird zunächst ein Modell mit unüberwachten Lernalgorithmen auf einer großen Datenmenge trainiert. Das System sollte die Funktionen des Systems so gut wie möglich erlernen. Im nächsten Schritt wird das Modell mit einer kleinen Menge markierter Daten für die Lösung eines bestimmten Problems trainiert.

Wie Sie sehen, können unüberwachte Lernalgorithmen zur Lösung verschiedener Probleme eingesetzt werden. Aber wie können sie im Handel eingesetzt werden? Lasst uns nachdenken. Grafische Analysemethoden beinhalten fast immer bestimmte Chartmuster: Double Top / Double Bottom, Kopf und Schultern, Flahne, verschiedene harmonische Muster, usw. Darüber hinaus gibt es viele kleinere Muster, die aus 1 bis 3 Kerzen bestehen. Wenn wir aber versuchen, ein bestimmtes Muster in mathematischer Sprache zu beschreiben, müssen wir uns mit einer großen Anzahl von Konventionen und Toleranzen auseinandersetzen. Dies erschwert ihre Verwendung im algorithmischen Handel. Selbst wenn ein menschlicher Händler die Muster bestimmt, gibt es eine Menge Subjektivität. Deshalb finden verschiedene Händler bei der Analyse ein und desselben Chartmuster, die oft gegenläufige Vorhersagebewegungen aufweisen. Nun, vielleicht ist dies die Grundregel des gesamten Handels. Einige machen Gewinn, andere verlieren. Im Handelsprozess werden keine neuen Warenwerte geschaffen, während die Geldmenge unverändert bleibt. Sie wird nur von einer Brieftasche zur anderen verschoben. Wie können wir also Verluste vermeiden?

Kopf-Schulter-Muster

Werfen wir noch einmal einen Blick auf die oben erwähnten Chartmuster. Ja, sie haben alle ihre Varianten. Aber gleichzeitig hat jedes Muster seine eigene spezifische Struktur, die es von der allgemeinen Kursbewegungsgrafik unterscheidet. Wie wäre es also, wenn wir unüberwachte Datencluster-Algorithmen verwenden, damit das Modell alle möglichen Variationen in den Daten über einen bestimmten Zeitraum identifizieren kann. Da wir unüberwachtes Lernen verwenden, müssen die Daten nicht gekennzeichnet werden, und der Zeitraum kann recht groß sein. Vergessen Sie jedoch nicht, dass eine Vergrößerung des Zeitraums der Historie die Kosten der Modellschulung erhöht.

2. Der Algorithmus k-means

Um das oben vorgeschlagene Clustering-Problem zu lösen, werden wir eine der einfachsten und verständlichsten Methoden verwenden: k-means. Trotz ihrer Einfachheit ist die Methode bei der Lösung von Daten-Clustering-Problemen wirksam und kann entweder allein oder zur Datenvorverarbeitung eingesetzt werden.

Um die Methode anwenden zu können, muss jeder Zustand des Systems durch einen bestimmten Satz von Daten beschrieben werden, die in einem einzigen Vektor zusammengefasst werden. Jeder dieser Vektoren stellt die Koordinaten eines Punktes im N-dimensionalen Raum dar. Die Raumdimension ist gleich der Dimension des Systemzustandsbeschreibungsvektors.

Anfangsdaten auf dem Flugzeug

Die Idee der Methode besteht darin, solche Zentren (Vektoren) zu finden, um die herum alle bekannten Zustände des Systems zu Clustern zusammengefasst werden können. Der durchschnittliche Abstand aller Zustände des Systems zum Zentrum des entsprechenden Clusters sollte minimal sein. Daher rührt der Name der Methode k-means. Die Anzahl solcher Cluster ist ein Hyperparameter des Modells. Sie wird in der Phase der Modellentwicklung oder -validierung festgelegt.

Die Formulierung "... in der Phase des Modellentwurfs oder der Modellvalidierung festgelegt" mag etwas seltsam klingen. Diese Konzepte scheinen zeitlich und nach Phasen der Modellerstellung und -ausbildung getrennt zu sein. Aber die Fälle sind unterschiedlich. Manchmal wird die Anzahl solcher Cluster bei der Problemstellung angegeben. Dies ist der Fall, wenn der Kunde die Anzahl der Cluster aufgrund früherer Erfahrungen oder der geplanten Nutzung genau kennt. Oder die Anzahl der unterschiedlichen Cluster ist bei der Datenvisualisierung deutlich zu erkennen. In solchen Fällen können wir dem Modell sofort die Anzahl der gesuchten Cluster angeben.

In anderen Fällen, in denen wir nicht über ausreichende Kenntnisse verfügen, um die Anzahl der Cluster eindeutig zu bestimmen, müssen wir eine Modelltrainingsreihe durchführen, um die optimale Anzahl von Clustern zu ermitteln. Wir werden etwas später darauf zurückkommen. Analysieren wir nun den Algorithmus der Methode.

Die Abbildung oben zeigt die Visualisierung von 100 zufälligen Punkten auf einer Ebene. Die Visualisierung der Daten hilft, ihre Struktur zu verstehen, ist jedoch für diese Methode nicht erforderlich. Wie Sie sehen können, sind die Punkte recht gleichmäßig über die gesamte Ebene verteilt, und wir können visuell keine eindeutigen Cluster erkennen. Daher können wir ihre Zahl nicht kennen. Für das erste Experiment werden wir zum Beispiel 5 Cluster verwenden.

Nun, da wir die Zahl kennen, wo sollten wir ihre Zentren ansiedeln? Erinnern Sie sich, dass wir bei der Initialisierung der Gewichte die Matrizen mit Zufallswerten gefüllt haben? Wir werden hier in etwa das Gleiche tun. Wir werden jedoch keine Zufallsvektoren generieren, da sie in unseren Ausgangsdaten nicht berücksichtigt werden können. Wir werden einfach 5 zufällige Punkte aus unserem Trainingssatz nehmen. Sie sind in der nachstehenden Abbildung mit X gekennzeichnet.

Hinzufügen von Cluster-Zentren

Als Nächstes müssen wir die Entfernung von jedem Punkt zu jedem Zentrum berechnen. Ich denke, dass es nicht so schwierig ist, den Abstand zwischen zwei Punkten auf einer Linie (1-dimensionaler Raum) zu bestimmen. Um den Abstand zwischen zwei Punkten in einer Ebene zu bestimmen, verwenden wir den Satz des Pythagoras, den wir aus der Schulmathematik kennen. Das Theorem besagt, dass die Summe der Quadrate der Schenkel gleich dem Quadrat der Hypotenuse ist. Daher ist der Abstand zwischen zwei Punkten in der Ebene gleich der Quadratwurzel aus der Summe der quadrierten Abstände zwischen den Projektionen der Punkte auf die Koordinatenachsen. Einfach ausgedrückt, ist es die Summe der Quadrate der Differenz der entsprechenden Koordinaten. Wenn wir einen ähnlichen Ansatz für die Projektion eines Punktes auf eine N-1-Ebene anwenden, erhalten wir eine ähnliche Gleichheit für einen N-dimensionalen Raum.

Formel für die Bestimmung des Abstands zwischen Punkten

Wir kennen den Abstand zu jedem der Cluster-Zentren, und das nächstgelegene von ihnen bestimmt, dass der Punkt zu diesem Cluster gehört. Wiederholen Sie die Iterationen, um die Abstände und das Cluster für alle Punkte unserer Trainingsstichprobe zu bestimmen. Bestimmen Sie anschließend für jeden Cluster ein neues Zentrum mit Hilfe eines einfachen arithmetischen Mittels. Die folgende Abbildung zeigt die Ergebnisse der ersten Iteration. Die Punkte eines jeden Clusters sind in einer eigenen Farbe eingefärbt.

Erste Iteration 

Wie Sie sehen können, sind die Punkte nach der ersten Iteration ungleichmäßig auf die Cluster verteilt. Die Cluster-Zentren haben sich jedoch im Vergleich zum vorherigen Diagramm verschoben. Daher wird sich bei wiederholten Neuberechnungen der Abstände zu den Cluster-Zentren, bei denen wir auch feststellen, ob ein Punkt zu diesem oder jenem Cluster gehört, die Verteilung der Punkte auf die Cluster ändern.

Wir wiederholen solche Iterationen, bis sich die Cluster-Zentren nicht mehr bewegen. Auch die Cluster, zu denen die Punkte gehören, werden nicht mehr geändert.

Nach mehreren Iterationen für unsere Datenstichprobe kommen wir zu folgendem Ergebnis. Wie Sie sehen können, haben wir eine ziemlich gleichmäßige Verteilung der Trainingssequenzpunkte über die Cluster.

Endgültige Verteilung  

Fassen wir den besprochenen Algorithmus zusammen:

  1. Bestimmen von k zufälligen Punkten aus der Trainingsstichprobe als Cluster-Zentren.
  2. Organisieren eines Arbeitszyklus:
    • Bestimme den Abstand von jedem Punkt zu jedem Zentrum.
    • Finde das nächstgelegene Zentrum und weise dieses Clusters einen Punkt zu.
    • Bestimme anhand des arithmetischen Mittels ein neues Zentrum für jedes Cluster.
  3. Wiederhole die Vorgänge in einer Schleife, bis die Cluster-Zentren „stehen bleiben“.

In diesem Beispiel sind wir nicht an der spezifischen Entfernung von einem Punkt zum Zentrum interessiert, sondern wir müssen nur die kürzeste Entfernung finden. Um Ressourcen zu sparen, wird daher bei der Berechnung des Abstands nicht die Quadratwurzel der sich ergebenden Summe berechnet, da dies absolut keinen Einfluss auf das Ergebnis der Datenclustering haben wird.

In diesem Stadium haben wir unsere Trainingsdaten in Cluster aufgeteilt. Wie lässt sich nun feststellen, dass diese Anzahl von Clustern optimal ist? Wie beim überwachten Lernen führen wir eine Verlustfunktion ein, mit deren Hilfe wir die Qualität des trainierten Modells bewerten und die Leistung des Modells bei Verwendung verschiedener Hyperparameter vergleichen können. Bei Clustering-Problemen ist eine solche Verlustfunktion die durchschnittliche Abweichung der Punkte vom entsprechenden Clusterzentrum. Er wird nach der folgenden Formel berechnet:

Verlustfunktion

Wobei:

  • m die Anzahl der Elemente in der Trainingsstichprobe,
  • N die Größe des Beschreibungsvektors eines Elements aus der Trainingsstichprobe,
  • Xi jistder i-te Wert des Beschreibungsvektors des j-ten Elements aus der Trainingsstichprobe und
  • Ci x jistder i-teWert des zentralen Vektors der Klasse ist, zu der das j-teElement aus der Trainingsstichprobe gehört.

Aus der obigen Formel ist ersichtlich, dass der Wert der Verlustfunktion gleich 0 ist, wenn die Anzahl der Cluster gleich der Anzahl der Elemente in der Trainingsstichprobe ist. Wir wollen aber nicht die gesamte Trainingsstichprobe in unsere Matrix der Clusterzentren kopieren. Im Gegenteil, wir wollen einen Weg finden, die Daten zu verallgemeinern, um dann nach möglichen Mustern für jedes Cluster zu suchen.

Ich wiederholte das Clustering desselben Trainingssatzes mit einer anderen Anzahl von Clustern. Die folgende Abbildung zeigt die Abhängigkeit der Verlustfunktion von der Anzahl der Cluster. Ich habe die Werte der Verlustfunktion nicht angegeben, da sie für verschiedene Eingabedaten sehr unterschiedlich sein können. Gleichzeitig hängt die Anzahl der Cluster auch von der Trainingsstichprobe ab, so dass Sie sich nicht auf die angegebenen Werte verlassen sollten. Sie werden hier nur zur Erläuterung des Diagramms angegeben. Es ist wichtig, die Prinzipien der Chartinterpretation zu verstehen.

Abhängigkeit des Fehlers von der Anzahl der Cluster

Das obige Diagramm zeigt deutlich, dass der Wert der Fehlerfunktion stark abnimmt, wenn die Anzahl der Cluster von 2 auf 4 steigt. Wenn die Anzahl der Cluster weiter auf 6 ansteigt, nimmt die Rate der Abnahme des Fehlerfunktionswertes allmählich ab. Wenn sich die Anzahl der Cluster von 6 auf 7 ändert, ändert sich der Wert der Fehlerfunktion praktisch nicht. Dies ist eine geglättete Änderung der Verlustfunktion. Aber manchmal kann es an einem bestimmten Punkt zu einer unterbrochenen Grafikänderung kommen. Dieses Phänomen tritt häufig auf, wenn die Trainingsdaten eindeutig trennbar sind.

Die allgemeine Regel für die Interpretation des Diagramms lautet wie folgt:

  • Wenn ein Diagramm eine gestrichelte Linie aufweist, liegt die optimale Anzahl von Clustern an der Bruchstelle.
  • Wenn das Diagramm geglättet ist, finden Sie das Gleichgewicht zwischen Qualität und Leistung in der gebogenen Zone.  

Angesichts der geringen Stichprobengröße und der Anzahl der Cluster würde ich für unser Beispiel 5 oder 6 Cluster empfehlen.

3. Python-Implementierung

Wir haben die theoretischen Aspekte der Methode k-means am Beispiel von abstrakten Daten erörtert. Und die berechtigte Frage lautet: Wie funktioniert die Methode bei realen Daten? Um diese Frage zu beantworten, werden wir die Integration von MetaTrader 5 und Python nutzen. Python bietet eine große Anzahl von Bibliotheken, die fast jeden Bedarf abdecken können.

Die Integrationswerkzeuge wurden bereits mehrfach auf dieser Website erwähnt, während die Installation der Bibliothek in der Dokumentation beschrieben ist.

3.1. Bibliotheken einbeziehen

Zur Umsetzung dieser Aufgabe werden wir mehrere Bibliotheken verwenden. Zunächst die MetaTrader5-Bibliothek. Diese Bibliothek implementiert alle Punkte der MetaTrader 5 Terminal-Integration mit Python.

Die zweite Bibliothek, die wir verwenden werden, ist Scikit-Learn. Diese Bibliothek bietet einfache und effektive Werkzeuge für die Datenanalyse. Es implementiert insbesondere mehrere Algorithmen zur Datenclustering. Eine davon ist die Methode k-means, die wir hier besprechen.

Die Datenvisualisierung wird mit der Bibliothek Matplotlib durchgeführt.

Mit Hilfe von MetaTrader 5 und Python-Integrationstools können Informationen über den Kontostatus, Handelsoperationen und die Marktsituation an Skripte übertragen werden. Sie erlauben jedoch nicht die Verwendung von programminternen Daten, wie z. B. Indikatoren. Daher müssen wir die gesamte Implementierung der Indikatoren auf der Python-Seite nachbilden. Um die Aufgabe zu erleichtern, werden wir die Bibliothek TA-Lib verwenden, die verschiedene technische Analysetools bietet.

Bevor wir mit der Erstellung des Skripts fortfahren, installieren wir alle diese Bibliotheken und den Python-Interpreter auf Ihrem Computer. Dieser Prozess würde den Rahmen dieses Artikels sprengen. Sollten Sie dennoch Schwierigkeiten haben, werde ich in den Kommentaren zu diesem Artikel antworten. 

3.2. Erstellen eines Skripts

Nun, da wir uns für die Liste der zu verwendenden Bibliotheken entschieden haben, können wir mit dem Schreiben des Skripts beginnen. Speichern Sie den Skriptcode als "clustering.py".

Fügen Sie am Anfang des Skripts die erforderlichen Bibliotheken ein.

# Import Libraries
import numpy as np
import matplotlib.pyplot as plt
import MetaTrader5 as mt5
from talib import abstract as tl
import sklearn.cluster as cluster
from datetime import datetime as dt

Als Nächstes organisieren wir die Verbindung zum Terminal, überprüfen den korrekten Ablauf, um im Falle eines Fehlers eine entsprechende Meldung anzuzeigen und das Programm zu beenden.

# Connect to the MetaTrader 5 terminal
if not mt5.initialize():
    print("initialize() failed, error code =",mt5.last_error())
    quit()

Nach erfolgreicher Verbindung mit dem Terminal laden wir die historischen Daten für den analysierten Zeitraum herunter und trennen die Verbindung zum Terminal.

# Downloading quotes
rates=mt5.copy_rates_range('EURUSD',mt5.TIMEFRAME_H1,dt(2006,1,1),dt(2022,1,1))
mt5.shutdown()

Da nun die historischen Daten vorliegen, können wir zur Bestimmung der Indikatorwerte übergehen. In diesem Block berechnen wir die Werte der gleichen Indikatoren, die wir beim Testen verschiedener Modelle mit überwachtem Lernen verwendet haben. Dies sind klassische Oszillatoren: RSI, CCI und MACD.

# Calculate indicator values
rsi=tl.RSI(rates['close'])
cci=tl.CCI(rates['high'],rates['low'],rates['close'])
macd,macdsignal,macdhist=tl.MACD(rates['close'])

Jetzt haben wir Quelldaten, aber sie sind in 6 Tensoren aufgeteilt. Sie müssen für die Analyse zu einem Tensor zusammengefasst werden. Bitte beachten Sie die folgenden Hinweise. Die Clustering-Funktion ist so aufgebaut, dass sie ein 2-dimensionales Array als Eingabe erhält; die Zeilen dieses Arrays werden als separate Muster betrachtet. Wenn man alle Tensoren zu einem zusammenfasst, erhält man ein zweidimensionales Array, in dem jede Zeile Informationen über einen einzelnen Kerzenständer enthält. Er könnte in dieser Form verwendet werden. Dies wäre jedoch eine Anhäufung einzelner Kerzen. Werden diese Informationen nützlich sein? Wenn wir nach Mustern suchen wollen, die aus mehreren Kerzen bestehen, müssen wir die Dimension des Tensors ändern. Aber eine einfache Änderung der Dimensionen genügt unseren Ansprüchen nicht ganz. Dies entspricht der Verwendung eines rollenden Fensters mit einem Verschiebungsschritt, der seiner Größe entspricht. Aber wir müssen das Muster bei jeder Kerze kennen. Daher müssen wir den Tensor durch Kopieren von Daten neu formatieren. Das folgende Beispiel zeigt den Code zum Kombinieren eines Tensors und zum anschließenden Kopieren der Daten, um ein Muster aus 20 Kerzen zu erstellen. Beachten Sie die Abgrenzung der historischen Daten, bei denen die Indikatorwerte nicht definiert sind.

# Group the training sample
data=np.array([rates['close']-rates['open'],rates['high']-rates['close'],rates['close']-rates['low'],
                                                                   rsi,cci,macd,macdsignal,macdhist]).T
s=data.shape[0]
data=np.hstack([data[40+k:s-20+k] for k in range(0,20)])

Damit ist der Prozess der Datenaufbereitung abgeschlossen. Nun können wir mit dem Clustering der Daten fortfahren. Um jedoch die erforderliche Anzahl von Clustern zu ermitteln, müssen wir mehrere Tests mit einer unterschiedlichen Anzahl von Clustern durchführen. In diesem Beispiel habe ich das Clustering für einen Bereich von 50 bis 1000 Clustern durchgeführt, in Schritten von 50 Clustern.

# Perform clustering with a different number of clusters
R=range(50,1000,50)
KM = (cluster.KMeans(n_clusters=k).fit(data) for k in R)

Dann wird der Fehler für jeden Fall bestimmt und die erhaltenen Daten visualisiert.

distance=(k.transform(data) for k in KM)                      
dist = (np.min(D, axis=1) for D in distance)
avgWithinSS = [sum(d) / data.shape[0] for d in dist]
# Plotting the model training results
plt.plot(R, avgWithinSS)
plt.xlabel('$Clasters$')
plt.title('Loss dynamic')
# Display generated graphs
plt.show()

Damit ist die Arbeit mit dem Skriptcode abgeschlossen. Als Nächstes steht die Prüfung an. Der vollständige Code des Skripts ist dem Artikel beigefügt.

4. Tests

Wir haben ein Python-Skript erstellt und können es testen. Alle Testparameter werden im Skriptcode angegeben:

  • Symbol: EURUSD.
  • Zeitrahmen H1
  • Historischer Zeitraum: 16 Jahre vom 01/01/2006 bis 01/01/2022
  • Anzahl der Cluster: von 50 bis 1000 in Schritten von 50

Das nachstehende Diagramm zeigt die Abhängigkeit der Verlustfunktion von der Anzahl der Cluster. 

Einfluss der Anzahl von Clustern auf den Modellfehler

Wie Sie in der Grafik sehen können, erwies sich der Übergang als ziemlich lang. Die optimale Anzahl von Clustern scheint zwischen 400 und 500 zu liegen. Insgesamt haben wir 98.641 Zustände des Systems analysiert.

Schlussfolgerung

Dieser Artikel führt den Leser in die k-means Datencluster-Methode ein, die zu den unüberwachten Lernalgorithmen gehört. Wir haben ein Skript mit Python-Bibliotheken erstellt und das Modell mit einer unterschiedlichen Anzahl von Clustern trainiert. Anhand der Testergebnisse können wir feststellen, dass das Modell etwa 500 Muster erkennen konnte. Natürlich werden nicht alle von ihnen klare Signale für den Handel geben. In den folgenden Artikeln werden wir darüber sprechen, wie die erzielten Ergebnisse in der Praxis genutzt werden können.


Liste der Referenzen

  1. Neuronale Netze leicht gemacht
  2. Neuronale Netze leicht gemacht (Teil 2): Netzschulung und -prüfung
  3. Neuronale Netze leicht gemacht (Teil 3): Faltungsnetzwerke
  4. Neuronale Netze leicht gemacht (Teil 4): Rekurrente Netzwerke
  5. Neuronale Netze leicht gemacht (Teil 5): Multithreading-Berechnungen in OpenCL
  6. Neuronale Netze leicht gemacht (Teil 6): Experimentieren mit der Lernrate des neuronalen Netzes
  7. Neuronale Netze leicht gemacht (Teil 7): Adaptive Optimierungsverfahren
  8. Neuronale Netze leicht gemacht (Teil 8): Aufmerksamkeitsmechanismen
  9. Neuronale Netze leicht gemacht (Teil 9): Dokumentieren der Arbeit
  10. Neuronale Netze leicht gemacht (Teil 10): Multi-Head Aufmerksamkeit
  11. Neuronale Netze leicht gemacht (Teil 11): Ein Blick auf GPT
  12. Neuronale Netze leicht gemacht (Teil 12): Aussteiger
  13. Neuronale Netze leicht gemacht (Teil 13): Batch-Normalisierung

Programme, die im diesem Artikel verwendet werden

# Ausgeben für Typ Beschreibung
1 clustering.py Skript Daten-Clustering - Python-Skript



Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/ru/articles/10785

Beigefügte Dateien |
clustering.py (2.97 KB)
Datenwissenschaft und maschinelles Lernen (Teil 05): Entscheidungsbäume Datenwissenschaft und maschinelles Lernen (Teil 05): Entscheidungsbäume
Entscheidungsbäume imitieren die Art und Weise, wie Menschen denken, um Daten zu klassifizieren. Schauen wir mal, wie man so einen Baum erstellt und ihn zur Klassifizierung und Vorhersage einiger Daten verwenden kann. Das Hauptziel des Entscheidungsbaum-Algorithmus ist es, die Daten mit Fremdanteilen und die reinen oder knotennahen Daten abzutrennen.
Lernen Sie, wie man ein Handelssystem mit Williams PR entwirft Lernen Sie, wie man ein Handelssystem mit Williams PR entwirft
Ein neuer Artikel in unserer Serie über das Lernen, wie man ein Handelssystem durch die beliebtesten technischen Indikatoren von MQL5 zu entwerfen, um in den MetaTrader 5 verwendet werden. In diesem Artikel lernen wir, wie man ein Handelssystem mit Hilfe des Indikators Williams' %R entwickelt.
Einen handelnden Expert Advisor von Grund auf neu entwickeln (Teil 14): Hinzufügen des Volumens zum Preis (II) Einen handelnden Expert Advisor von Grund auf neu entwickeln (Teil 14): Hinzufügen des Volumens zum Preis (II)
Heute werden wir unserem EA weitere Ressourcen hinzufügen. Dieser interessante Artikel kann einige neue Ideen und Methoden zur Präsentation von Informationen liefern. Gleichzeitig kann es Ihnen helfen, kleinere Fehler in Ihren Projekten zu beheben.
Indikatoren mit interaktiven Steuerelementen auf dem Chart Indikatoren mit interaktiven Steuerelementen auf dem Chart
Der Artikel bietet eine neue Perspektive auf Indikatorschnittstellen. Ich werde mich auf die Bequemlichkeit konzentrieren. Nachdem ich im Laufe der Jahre Dutzende verschiedener Handelsstrategien ausprobiert und Hunderte verschiedener Indikatoren getestet habe, bin ich zu einigen Schlussfolgerungen gekommen, die ich Ihnen in diesem Artikel mitteilen möchte.