Trading Strategie Svm
MetaTrader 5 - Trading Machine Learning: Wie Unterstützung Vektor-Maschinen können im Handel verwendet werden Was ist ein Support-Vektor-Maschine Eine Unterstützung Vektor-Maschine ist eine Methode der maschinellen Lernen, die versucht, Eingabedaten zu nehmen und klassifizieren in einer von zwei Kategorien. Damit eine Unterstützungsvektormaschine wirksam sein kann, ist es notwendig, zuerst einen Satz von Trainingsinput - und - ausgabedaten zu verwenden, um das Unterstützungsvektor-Maschinenmodell zu bauen, das zum Klassifizieren neuer Daten verwendet werden kann. Eine Unterstützungsvektormaschine entwickelt dieses Modell, indem sie die Trainingsinputs aufnimmt, sie in den mehrdimensionalen Raum abbildet und dann die Regression benutzt, um eine Hyperebene zu finden (eine Hyperebene ist eine Oberfläche im n-dimensionalen Raum, die sie den Raum in zwei Halbräume trennt), die am besten trennt Die beiden Klassen von Eingängen. Sobald die Support-Vektor-Maschine trainiert wurde, ist es in der Lage, neue Eingaben in Bezug auf die Trenn-Hyperebene zu beurteilen und sie in eine der beiden Kategorien zu klassifizieren. Eine Unterstützungsvektormaschine ist im wesentlichen eine Eingangsausgangsmaschine. Ein Benutzer ist in der Lage, einen Eingang zu setzen, und basierend auf dem Modell entwickelt durch Training, wird es eine Ausgabe zurückgeben. Die Anzahl der Eingänge für eine beliebige Unterstützungsvektormaschine reicht theoretisch von einer bis zur Unendlichkeit, aber in der Praxis bedeutet die Rechenleistung, wie viele Eingaben verwendet werden können. Wenn zum Beispiel N Eingänge für eine bestimmte Unterstützungsvektormaschine verwendet werden (der ganzzahlige Wert von N kann von einem bis unendlich reichen), muss die Unterstützungsvektormaschine jeden Satz von Eingaben in den N-dimensionalen Raum abbilden und einen (N-1 ) - dimensionale Hyperebene, die die Trainingsdaten am besten trennt. Abbildung 1. Unterstützung Vektor-Maschinen sind inputoutput Maschinen Der beste Weg, um zu konzeptualisieren, wie ein Support-Vektor-Maschine funktioniert, ist unter Berücksichtigung der zweidimensionalen Fall. Angenommen, wir wollen eine Support-Vektor-Maschine erstellen, die zwei Eingänge hat und eine einzelne Ausgabe zurückgibt, die den Datenpunkt als zu einer von zwei Kategorien klassifiziert. Wir können dies visualisieren, indem wir es auf einem zweidimensionalen Diagramm wie dem Diagramm unten aufstellen. Abbildung 2. Links: Unterstützung von Vektor-Maschinen-Eingängen, die einem 2D-Diagramm zugeordnet sind. Die roten Kreise und blauen Kreuze werden verwendet, um die beiden Klassen von Eingängen zu bezeichnen. Abbildung 3. Rechts: Unterstützung von Vektor-Maschinen-Eingängen, die einem 2D-Diagramm zugeordnet sind. Die roten Kreise und blauen Kreuze werden verwendet, um die beiden Klassen von Eingaben mit einer schwarzen Linie zu bezeichnen, die die Trennungs-Hyperebene anzeigt. In diesem Beispiel zeigen die blauen Kreuze Datenpunkte an, die zur Kategorie 1 gehören, und die roten Kreise, die Datenpunkte repräsentieren, die zur Kategorie 2 gehören. Jeder der einzelnen Datenpunkte hat einen eindeutigen Eingang 1-Wert (dargestellt durch ihre Position auf der x-Achse ) Und einen eindeutigen Eingang 2 Wert (dargestellt durch ihre Position auf der y-Achse) und alle diese Punkte wurden dem zweidimensionalen Raum zugeordnet. Eine Unterstützungsvektormaschine ist in der Lage, Daten zu klassifizieren, indem sie ein Modell dieser Punkte im zweidimensionalen Raum erzeugt. Die Unterstützungsvektormaschine beobachtet die Daten im 2-dimensionalen Raum und verwendet einen Regressionsalgorithmus, um eine 1-dimensionale Hyperebene (aka line) zu finden, die die Daten genau in ihre zwei Kategorien trennt. Diese Trennlinie wird dann von der Unterstützungsvektormaschine verwendet, um neue Datenpunkte in Kategorie 1 oder Kategorie 2 zu klassifizieren. Die nachfolgende Animation veranschaulicht den Prozess des Trainings einer neuen Unterstützungsvektormaschine. Der Algorithmus beginnt mit einer zufälligen Vermutung, eine Trenn-Hyperplane zu finden, dann iterativ die Genauigkeit der Hyperebene zu verbessern. Wie Sie sehen können, beginnt der Algorithmus ganz aggressiv, aber dann verlangsamt sich, wie es beginnt, sich der Wünsche Lösung zu nähern. Abbildung 4. Eine Animation, die ein Trainings-Vektor-Maschinen-Training zeigt. Die Hyperebene konvergiert allmählich die ideale Geometrie, um die beiden Datenklassen zu trennen. Das oben dargestellte 2-dimensionale Szenario ermöglicht es uns, den Prozess einer Unterstützungsvektormaschine zu visualisieren, aber es ist nur möglich, einen Datenpunkt mit zwei Eingängen zu klassifizieren. Was ist, wenn wir mehr Inputs verwenden möchten. Danke, der Support-Vektor-Maschinen-Algorithmus ermöglicht es uns, dasselbe in höheren Dimensionen zu machen, obwohl es viel schwieriger wird, zu konzeptualisieren. Betrachten Sie dies, Sie möchten Unterstützung Vektor-Maschine, die 20 Eingänge und können Sie jeden Datenpunkt mit diesen Eingaben in Kategorie 1 oder Kategorie 2 zu klassifizieren. Um dies zu tun, muss die Unterstützung Vektor-Maschine, um die Daten im 20-dimensionalen Raum zu modellieren Und verwenden Sie einen Regressionsalgorithmus, um eine 19-dimensionale Hyperebene zu finden, die die Datenpunkte in zwei Kategorien trennt. Das wird sehr schwer zu visualisieren, da es schwer für uns ist, etwas über 3-Dimensionen zu verstehen, aber alles, was du wissen musst, ist das ist genau so wie es für den 2-dimensionalen Fall funktioniert. Wie stützt man Vektor-Maschinen Arbeit Beispiel: Ist es ein Schnick Stellen Sie sich dieses hypothetische Szenario vor, Sie sind ein Forscher, der ein seltenes Tier untersucht, das nur in den Tiefen der Arktis namens Shnicks gefunden wurde. Angesichts der Abgeschiedenheit dieser Tiere ist nur eine kleine Handvoll gefunden worden (sagen wir etwa 5000). Als Forscher steckst du mit der Frage. Wie kann ich einen Schnick identifizieren, was du zu deiner Verfügung hast, sind die Forschungspapiere, die zuvor von der Handvoll von Forschern veröffentlicht wurden, die einen gesehen haben. In diesen Forschungsarbeiten beschreiben die Autoren bestimmte Merkmale über die Schnicks, die sie gefunden haben, d. H. Höhe, Gewicht, Anzahl der Beine usw. Aber alle diese Merkmale variieren zwischen den Forschungspapieren ohne erkennbares Muster. Wie können wir diese Daten verwenden, um ein neues Tier als schnick zu identifizieren Eine mögliche Lösung für unser Problem ist es, eine Unterstützungsvektormaschine zu verwenden, um die Muster in den Daten zu identifizieren und einen Rahmen zu schaffen, der verwendet werden kann, um Tiere als einen schnick oder zu klassifizieren Kein schnick Der erste Schritt ist, einen Satz von Daten zu erstellen, die verwendet werden können, um Ihre Unterstützung Vektor-Maschine zu trainieren, um Schnicks zu identifizieren. Die Trainingsdaten sind ein Satz von Eingängen und passenden Ausgängen für die Unterstützungsvektormaschine, um ein Muster zu analysieren und zu extrahieren. Deshalb müssen wir entscheiden, welche Eingänge verwendet werden und wie viele. Theoretisch können wir so viele Eingaben haben wie wir wollen, aber das kann oft zu langsamen Trainings führen (je mehr Eingaben Sie haben, desto mehr Zeit braucht es die Unterstützungsvektormaschine, um Muster zu extrahieren). Außerdem möchten Sie Eingabewerte auswählen, die über alle Schnicks relativ konsistent sind. Zum Beispiel wäre die Höhe oder das Gewicht des Tieres ein gutes Beispiel für eine Eingabe, weil man erwarten würde, dass dies über alle Schnicks relativ konsistent wäre. Allerdings wäre das Durchschnittsalter eines Tieres eine schlechte Wahl des Inputs, weil man erwarten würde, dass das Alter der Tiere identifiziert würde, würden alle erheblich variieren. Aus diesem Grund wurden folgende Eingaben gewählt: Höhe Gewicht Die Anzahl der Beine Die Anzahl der Augen Die Länge der Tiere Arme Die Tiere Durchschnitt Geschwindigkeit Die Häufigkeit der Tiere Paarung Mit den ausgewählten Eingaben können wir beginnen, unsere Trainingsdaten zu kompilieren . Effektive Trainingsdaten für eine Unterstützungsvektor-Maschine müssen bestimmte Anforderungen erfüllen: Die Daten müssen Beispiele für Tiere haben, die Schnicks sind Die Daten müssen Beispiele für Tiere haben, die nicht Schnicks sind In diesem Fall haben wir die Forschungsarbeiten von Wissenschaftlern, die erfolgreich einen Schnick identifiziert haben Und ihre Eigenschaften aufgeführt. Deshalb können wir diese Forschungsarbeiten lesen und die Daten unter jedem der Eingaben extrahieren und jedem der Beispiele eine Ausgabe von entweder true oder false zuordnen. Die Trainingsdaten können in diesem Fall ähnlich der nachfolgenden Tabelle aussehen. Tabelle 1. Beispieltabelle der Schnickbeobachtungen Sobald wir die Daten für alle unsere Ausbildungs-Inputs und Outputs gesammelt haben, können wir sie nutzen, um unsere Support-Vektor-Maschine zu trainieren. Während des Trainingsprozesses wird die Unterstützungsvektormaschine ein Modell in einem siebendimensionalen Raum erzeugen, der verwendet werden kann, um jedes der Trainingsbeispiele entweder in wahr oder falsch zu sortieren. Die Support-Vektor-Maschine wird dies auch weiterhin tun, bis es ein Modell hat, das die Trainingsdaten genau repräsentiert (innerhalb der vorgegebenen Fehlertoleranz). Sobald das Training abgeschlossen ist, kann dieses Modell verwendet werden, um neue Datenpunkte entweder als wahr oder falsch zu klassifizieren. Ist die Support-Vektor-Maschine tatsächlich mit dem Schnick-Szenario arbeiten, habe ich ein Skript geschrieben, das testet, wie gut ein Support-Vektor-Maschine tatsächlich neue Schnicks identifizieren kann. Um dies zu tun, habe ich die Unterstützung Vector Machine Learning Tool-Funktion Bibliothek, die aus dem Markt heruntergeladen werden können. Um dieses Szenario effektiv zu modellieren, müssen wir zunächst entscheiden, was die tatsächlichen Eigenschaften eines Schnicks sind. Die Eigenschaften, die ich in diesem Fall angenommen habe, sind in der folgenden Tabelle aufgeführt. Wenn ein Tier alle nachfolgenden Kriterien erfüllt, dann ist es ein Schnick. Tabelle 2. Zusammenfassung der Parameter, die einen Schnick definieren Nun, da wir unseren Schnick definiert haben, können wir diese Definition verwenden, um mit Support-Vektor-Maschinen zu experimentieren. Der erste Schritt ist, eine Funktion zu schaffen, die in der Lage ist, die sieben Eingaben für jedes gegebene Tier zu nehmen und die tatsächliche Klassifikation des Tieres als einen Schnick zurückzugeben oder nicht. Diese Funktion wird verwendet, um Trainingsdaten für die Unterstützungsvektormaschine zu erzeugen und deren Leistung am Ende zu beurteilen. Dies kann mit der unten stehenden Funktion erfolgen. Der nächste Schritt des Prozesses besteht darin, eine Funktion zu erstellen, die die Trainings-Ein - und Ausgänge erzeugen kann. Eingaben werden in diesem Fall erzeugt, indem für jeden der sieben Eingabewerte zufällige Zahlen innerhalb eines festgelegten Bereichs erzeugt werden. Dann wird für jede der Sätze von zufälligen Eingaben die isItASchnick () - Funktion oben verwendet, um die entsprechende gewünschte Ausgabe zu erzeugen. Dies geschieht in der folgenden Funktion: Wir haben jetzt eine Reihe von Trainings-Inputs und Outputs, es ist nun Zeit, unsere Support-Vektor-Maschinen mit dem Support Vector Machine Learning Tool im Markt zu erstellen. Sobald eine neue Support-Vektor-Maschine erstellt wird, ist es notwendig, die Ausbildungs-Inputs und Ausgänge an sie weiterzugeben und das Training auszuführen. Wir haben jetzt eine Support-Vektor-Maschine, die erfolgreich bei der Identifizierung von Scnhicks trainiert wurde. Um dies zu überprüfen, können wir die abschließende Unterstützungsvektormaschine testen, indem wir sie bitten, neue Datenpunkte zu klassifizieren. Dies geschieht zuerst durch die Erzeugung von zufälligen Eingaben und dann mit der Funktion isItASchnick (), um festzustellen, ob diese Eingänge einem tatsächlichen Schnick entsprechen, dann verwenden Sie die Unterstützungsvektormaschine, um die Eingaben zu klassifizieren und zu bestimmen, ob das vorhergesagte Ergebnis mit dem tatsächlichen Ergebnis übereinstimmt. Dies geschieht in der folgenden Funktion: Ich empfehle, mit den Werten innerhalb der obigen Funktionen zu spielen, um zu sehen, wie die Unterstützungsvektormaschine unter verschiedenen Bedingungen arbeitet. Warum ist Support-Vektor-Maschine so nützlich Der Vorteil der Verwendung eines Support-Vektor-Maschine zu extrahieren komplexe Muster aus den Daten ist, dass es nicht notwendig ist ein vorheriges Verständnis der Verhalten der Daten. Eine Support-Vektor-Maschine ist in der Lage, die Daten zu analysieren und extrahieren ihre nur Einsichten und Beziehungen. Auf diese Weise funktioniert es ähnlich wie eine Black Box, die eine Eingabe empfängt und eine Ausgabe erzeugt, die sich als sehr nützlich erweisen kann, um Muster in den zu komplexen und nicht offensichtlichen Daten zu finden. Eines der besten Features von Support-Vektor-Maschinen ist, dass sie in der Lage sind, mit Fehlern und Lärm in den Daten sehr gut umzugehen. Sie sind oft in der Lage, das zugrunde liegende Muster innerhalb der Daten zu sehen und herauszufinden Datenausreißer und andere Komplexitäten. Betrachten Sie das folgende Szenario, bei der Durchführung Ihrer Forschung auf Schnicks, kommen Sie auf mehrere Forschungsarbeiten, die Schnicks mit massiv verschiedenen Eigenschaften beschreiben (wie ein Schnick, der 200kg ist und ist 15000mm hoch). Fehler wie diese können zu Verzerrungen führen Ihr Modell, was ein Schnick ist, was könnte dazu führen, dass Sie einen Fehler bei der Klassifizierung neuer Schnick Entdeckungen zu machen. Der Vorteil der Support-Vektor-Maschine ist, dass es ein Modell, das mit dem zugrunde liegenden Muster gegen ein Modell, das passt alle Trainingsdaten Punkte stimmt zu entwickeln. Dies geschieht durch das Ermöglichen eines bestimmten Fehlers im Modell, um die Unterstützung Vektor-Maschine zu ermöglichen, um alle Fehler in den Daten zu übersehen. Im Falle der Schnick-Support-Vektor-Maschine, wenn wir eine Fehlertoleranz von 5 zulassen, dann wird das Training nur versuchen, ein Modell zu entwickeln, das mit 95 der Trainingsdaten übereinstimmt. Dies kann nützlich sein, weil es dem Training erlaubt, den kleinen Prozentsatz der Ausreißer zu ignorieren. Wir können diese Eigenschaft der Unterstützungsvektormaschine weiter untersuchen, indem wir unser Schnick-Skript ändern. Die untenstehende Funktion wurde hinzugefügt, um in unserem Trainingsdatensatz bewusste Zufallsfehler vorzustellen. Diese Funktion wählt Trainingspunkte zufällig aus und ersetzt die Eingänge und die entsprechende Ausgabe mit zufälligen Variablen. Diese Funktion ermöglicht es uns, bewusste Fehler in unsere Trainingsdaten einzuführen. Mit diesem fehlergefüllten Daten können wir eine neue Unterstützungsvektormaschine erstellen und ausbilden und ihre Leistung mit dem Original vergleichen. Wenn das Skript ausgeführt wird, werden folgende Ergebnisse im Expertenprotokoll erstellt. Innerhalb eines Trainingsdatensatzes mit 5000 Trainingspunkten konnten wir 500 zufällige Fehler einführen. Beim Vergleich der Leistung dieser Fehler gefüllten Support-Vektor-Maschine mit dem Original, wird die Leistung nur um lt1 reduziert. Dies liegt daran, dass die Unterstützungsvektormaschine in der Lage ist, die Ausreißer im Datensatz beim Training zu übersehen und ist immer noch in der Lage, ein eindrucksvoll genaues Modell der wahren Daten zu erzeugen. Dies deutet darauf hin, dass Unterstützungsvektor-Maschinen möglicherweise ein nützlicheres Werkzeug sein könnten, um komplexe Muster und Einsichten aus verrauschten Datensätzen zu extrahieren. Abbildung 5. Das daraus resultierende Expertenprotokoll nach dem Ausführen des Schnick-Skripts im MetaTrader 5. Demo-Versionen Eine Vollversion des obigen Codes kann von Code Base heruntergeladen werden, aber dieses Skript kann nur in Ihrem Terminal ausgeführt werden, wenn Sie ein gekauft haben Vollversion des Support Vector Machine Lernwerkzeug aus dem Markt. Wenn du nur eine Demo-Version dieses Tools heruntergeladen hast, wirst du dich auf das Tool über den Strategie-Tester beschränken. Um die Prüfung des Schnick-Codes mit der Demo-Version des Tools zu ermöglichen, habe ich eine Kopie des Skripts in einen Expert Advisor umgeschrieben, der mit dem Strategie-Tester eingesetzt werden kann. Beide dieser Code-Versionen können heruntergeladen werden, indem sie den folgenden Links folgen: Vollversion - Verwenden eines Skripts, das im MetaTrader 5-Terminal bereitgestellt wird (erfordert eine gekaufte Version des Support-Vektor-Maschinen-Lern-Tools) Demo-Version - Verwenden eines Experten-Beraters, der ist Im MetaTrader 5-Strategie-Tester eingesetzt (benötigt nur eine Demo-Version des Support-Vektor-Maschinen-Lern-Tools) Wie kann man Vektor-Maschinen im Markt einsetzen. Das Schnick-Beispiel, das oben diskutiert wurde, ist ganz einfach, aber es gibt noch einige Ähnlichkeiten Kann zwischen diesem Beispiel und mit der Unterstützung Vektor-Maschinen für technische Marktanalyse gezogen werden. Die technische Analyse basiert grundsätzlich darum, historische Marktdaten zu verwenden, um zukünftige Kursbewegungen vorherzusagen. In gleicher Weise wie im schnick-Beispiel nutzten wir die Beobachtungen der vergangenen Wissenschaftler, um vorherzusagen, ob ein neues Tier ein Schnick ist oder nicht. Weiterhin ist der Markt mit Lärm, Fehlern und statistischen Ausreißern geplagt, die den Einsatz einer Support-Vektor-Maschine zu einem interessanten Konzept machen. Die Grundlage für eine beträchtliche Anzahl von technischen Analyse Handelsansätze beinhalten die folgenden Schritte: Überwachung mehrerer Indikatoren Identifizieren, welche Bedingungen für jeden Indikator korreliert mit einem potenziell erfolgreichen Handel Beobachten Sie jeden der Indikatoren und beurteilen, wenn sie alle (oder die meisten) signalisieren einen Handel Es Ist möglich, einen ähnlichen Ansatz zu verwenden, um Unterstützungsvektor-Maschinen zu verwenden, um neue Trades in einer ähnlichen Weise zu signalisieren. Die Unterstützung Vektor Maschine Lern-Tool wurde in diesem Sinne entwickelt. Eine ausführliche Beschreibung der Verwendung dieses Tools finden Sie im Markt, also werde ich nur einen schnellen Überblick geben. Der Prozess für die Verwendung dieses Tools ist wie folgt: Abbildung 6. Das Blockdiagramm, das den Prozess für die Implementierung der Support-Vektor-Werkzeugmaschine in einem Expert Advisor zeigt Bevor Sie das Support Vector Machine Learning Tool verwenden können, ist es wichtig, zuerst zu verstehen, wie das Training Ein - und Ausgänge werden generiert. Wie werden die Trainingsinputs generiert So werden die Indikatoren, die Sie als Eingänge verwenden möchten, bereits als auch Ihre neue Support-Vektor-Maschine initialisiert. Der nächste Schritt ist, die Indikatorgriffe an Ihre neue Support-Vektor-Maschine weiterzugeben und sie darüber zu veranlassen, wie man die Trainingsdaten erzeugt. Dies geschieht durch Aufruf der setIndicatorHandles () - Funktion. Mit dieser Funktion können Sie die Griffe der initialisierten Indikatoren in die Support-Vektor-Maschine übergeben. Dies geschieht durch Übergeben und Integer-Array mit den Griffen. Die beiden anderen Eingänge für diese Funktion sind der Offsetwert und die Anzahl der Datenpunkte. Der Offsetwert bezeichnet den Offset zwischen dem aktuellen Balken und dem Startbalken, der bei der Erstellung der Trainingseingaben verwendet werden soll, und die Anzahl der Trainingspunkte (mit N bezeichnet) setzt die Größe Ihrer Trainingsdaten. Das folgende Diagramm zeigt, wie diese Werte verwendet werden können. Ein Offset-Wert von 4 und ein N-Wert von 6 wird der Support-Vektor-Maschine sagen, nur die in dem weißen Quadrat erfassten Balken zu verwenden, um Trainingseingänge und - ausgänge zu erzeugen. In ähnlicher Weise wird ein Offsetwert von 8 und ein N-Wert von 8 der Unterstützungsvektormaschine sagen, um nur die in dem blauen Quadrat erfassten Stäbe zu verwenden, um Trainings-Eingänge und Ausgänge zu erzeugen. Sobald die setIndicatorHandles () - Funktion aufgerufen wurde, ist es möglich, die Funktion genInputs () aufzurufen. Diese Funktion verwendet die Indikatorhandles, um sie zu übergeben, um ein Array von Eingabedaten zu erzeugen, die für das Training verwendet werden sollen. Abbildung 7. Kerzen-Diagramm zur Darstellung der Werte von Offset und N Wie werden Trainings-Outputs Generierte Trainings-Outputs generiert, indem sie hypothetische Trades anhand historischer Preisdaten simulieren und festlegen, ob ein solcher Handel erfolgreich oder erfolglos gewesen wäre. Um dies zu tun, gibt es ein paar Parameter, die verwendet werden, um die Unterstützung Vektor Maschine Lern-Tool, wie man einen hypothetischen Handel als entweder erfolgreich oder erfolglos zu beurteilen. Die erste Variable ist OPTRADE. Der Wert davon kann entweder BUY oder SELL sein und entspricht entweder hypothetischen Kauf oder Verkauf von Trades. Wenn der Wert davon KAUF ist, dann wird bei der Erstellung der Ausgänge nur der potenzielle Erfolg des hypothetischen Kaufhandels betrachtet. Alternativ, wenn der Wert von diesem ist SELL, dann bei der Erzeugung der Ausgänge wird nur Blick auf den potenziellen Erfolg der hypothetischen Verkauf Trades. Die nächsten Werte sind der Stop Loss und Take Profit für diese hypothetischen Trades. Die Werte werden in Pips gesetzt und setzen die Stopp - und Grenzwerte für jeden der hypothetischen Trades. Der endgültige Parameter ist die Handelsdauer. Diese Variable wird in Stunden gemessen und stellt sicher, dass nur Trades, die innerhalb dieser maximalen Dauer abgeschlossen sind, als erfolgreich angesehen werden. Der Grund für die Einbeziehung dieser Variable ist es, die Unterstützung Vektor Maschine Signalisierung Trades in einem langsamen bewegten seitlichen Markt zu vermeiden. Überlegungen, die bei der Auswahl von Eingängen zu machen sind Es ist wichtig, bei der Implementierung von Support-Vektor-Maschinen in Ihrem Trading einen Gedanken in die Eingangsauswahl zu setzen. Ähnlich wie bei dem Schnick-Beispiel ist es wichtig, eine Eingabe zu wählen, die voraussichtlich über verschiedene Unterschiede hinausgehen würde. Zum Beispiel können Sie versucht werden, einen gleitenden Durchschnitt als Eingabe zu verwenden, aber da der langfristige durchschnittliche Preis dazu neigt, sich ziemlich dramatisch im Laufe der Zeit zu ändern, ist ein gleitender Durchschnitt in Isolation möglicherweise nicht der beste Eingang zu verwenden. Dies liegt daran, dass es keine signifikante Ähnlichkeit zwischen dem gleitenden Mittelwert heute und den gleitenden Durchschnittswerten vor sechs Monaten gibt. Angenommen, wir handeln EURUSD und verwenden eine Support-Vektor-Maschine mit einem gleitenden durchschnittlichen Eingang zu Signal kaufen Trades. Sagen Sie den aktuellen Preis ist 1.10, aber es ist die Erstellung von Trainingsdaten aus sechs Monaten, als der Preis 0,55 war. Beim Training der Support-Vektor-Maschine, kann das Muster, das es findet, nur dazu führen, dass ein Handel signalisiert, wenn der Preis etwa 0,55 ist, da dies die einzigen Daten ist, die es kennt. Daher kann Ihr Support-Vektor-Maschine niemals einen Handel signalisieren, bis der Preis wieder auf 0,55 sinkt. Stattdessen kann ein besserer Eingang für die Unterstützungsvektormaschine ein MACD oder ein ähnlicher Oszillator sein, da der Wert des MACD unabhängig vom durchschnittlichen Preisniveau ist und nur die relative Bewegung signalisiert. Ich empfehle Ihnen, mit diesem zu experimentieren, um zu sehen, was die besten Resultate für Sie produziert. Eine weitere Überlegung bei der Auswahl von Eingaben ist sicherzustellen, dass die Support-Vektor-Maschine hat eine ausreichende Momentaufnahme eines Indikators, um einen neuen Handel zu signalisieren. Sie können in Ihrem eigenen Trading-Erlebnis finden, dass ein MACD nur nützlich ist, wenn Sie die letzten fünf Takte haben, um zu sehen, da dies einen Trend zeigen wird. Ein einziger Stab der MACD kann nutzlos sein, wenn man nicht sagen kann, ob er aufwärts oder abwärts geht. Daher kann es notwendig sein, die letzten paar Stäbe des MACD-Indikators an die Unterstützungsvektormaschine weiterzugeben. Es gibt zwei Möglichkeiten, wie Sie dies tun können: Sie können einen neuen benutzerdefinierten Indikator erstellen, der die letzten fünf Takte des MACD-Indikators verwendet Einen Trend als Einzelwert berechnen. Diese benutzerdefinierte Anzeige kann dann an die Support-Vektor-Maschine als Einzel-Eingang übergeben werden, oder Sie können die vorherigen fünf Takte der MACD-Anzeige in der Support-Vektor-Maschine als fünf separate Eingänge verwenden. Der Weg, dies zu tun, besteht darin, fünf verschiedene Instanzen des MACD-Indikators zu initialisieren. Jeder der Indikatoren kann mit einem anderen Versatz von der aktuellen Leiste initialisiert werden. Dann können die fünf Griffe aus den separaten Indikatoren an die Unterstützungsvektormaschine weitergegeben werden. Es sollte beachtet werden, dass Option 2 dazu neigen wird, längere Ausführungszeiten für Ihren Expert Advisor zu verursachen. Je mehr Eingänge du hast, desto länger dauert es, bis du erfolgreich trainierst. Implementieren von Support-Vektor-Maschinen und Experten-Berater Ich habe einen Experten-Berater vorbereitet, der ein Beispiel dafür ist, wie jemand möglicherweise Unterstützung Vektor-Maschinen in ihrem eigenen Handel verwenden könnte (eine Kopie davon kann heruntergeladen werden, indem Sie diesen Link mql5encode1229). Hoffentlich kann der Expert Advisor Ihnen erlauben, ein wenig mit Support-Vektor-Maschinen zu experimentieren. Ich empfehle Ihnen, den Expert Advisor zu ändern, um Ihren eigenen Trading Style anzupassen. Die EA arbeitet wie folgt: Zwei neue Support-Vektor-Maschinen werden mit der svMachineTool-Bibliothek erstellt. Einer ist eingerichtet, um neue Buy Trades zu signalisieren, und der andere ist eingerichtet, um neue Sell Trades zu signalisieren. Sieben Standardindikatoren werden mit jedem ihrer Handles initialisiert, die in einem Integer-Array gespeichert sind (Hinweis: Jede Kombination von Indikatoren kann als Eingaben verwendet werden, sie müssen nur an das SVM in einem einzigen Integer-Array übergeben werden). Das Array von Indikatorhandgriffen wird an die neuen Unterstützungsvektormaschinen übergeben. Mit Hilfe der Array von Indikatorhandgriffen und anderen Parametern werden historische Preisdaten verwendet, um genaue Eingaben und Ausgänge zu erzeugen, die für die Schulung der Unterstützungsvektormaschinen verwendet werden sollen. Sobald alle Eingänge und Ausgänge erzeugt wurden, werden beide Unterstützungsvektormaschinen trainiert. Die ausgebildeten Support-Vektor-Maschinen werden in der EA verwendet, um neue Kauf - und Verkaufs-Trades zu signalisieren. Wenn ein neuer Kauf oder Verkauf Handel signalisiert wird, öffnet sich der Handel zusammen mit manuellen Stop Loss und Take Profit Bestellungen. Die Initialisierung und Schulung der Support-Vektor-Maschine erfolgt innerhalb der onInit () - Funktion. Für Ihre Referenz ist dieses Segment der svTrader EA unten mit Notizen enthalten. Advanced Support Vector Machine Trading Zusätzliche Fähigkeiten wurde in die Unterstützung Vektor Maschine Lern-Tool für die fortgeschrittenen Benutzer da draußen eingebaut. Das Tool ermöglicht es Benutzern, ihre eigenen benutzerdefinierten Eingabedaten und Ausgabedaten (wie im Schnick-Beispiel) weiterzugeben. Dies ermöglicht Ihnen, benutzerdefinierte Design Ihrer eigenen Kriterien für Support Vektor Maschine Eingänge und Ausgänge, und manuell übergeben diese Daten, um es zu trainieren. Dies eröffnet die Möglichkeit, Support-Vektor-Maschinen in jedem Aspekt Ihres Handels zu verwenden. Es ist nicht nur möglich, Support-Vektor-Maschinen zu verwenden, um neue Trades zu signalisieren, aber es kann auch verwendet werden, um die Schließung von Trades, Geld-Management, neue erweiterte Indikatoren etc. zu signalisieren. Allerdings um sicherzustellen, dass Sie keine Fehler erhalten, ist es wichtig zu verstehen, wie Diese Ein - und Ausgänge sollen strukturiert werden. Eingänge: Eingänge werden an SVM als ein 1-dimensionales Array von Doppelwerten übergeben. Bitte beachten Sie, dass jede Eingabe, die Sie erstellen, als doppelter Wert übergeben werden muss. Boolean, Integer, etc. müssen alle in einen doppelten Wert umgewandelt werden, bevor sie in die Support-Vektor-Maschine übergeben werden. Die Eingaben sind in der folgenden Form erforderlich. Nehmen wir zum Beispiel an, dass wir Eingänge mit 3 Eingängen x 5 Trainingspunkten übergeben. Um dies zu erreichen, muss unser Doppel-Array 15 Einheiten lang sein im Format: A 1 B 1 C 1 A 2 B 2 C 2 A 3 B 3 C 3 A 4 B 4 C 4 A 5 B 5 C 5 Es ist auch notwendig Um einen Wert für die Anzahl der Eingaben zu übergeben. Im Fall NInputs3. Ausgänge: Ausgänge werden als Array von booleschen Werten übergeben. Diese booleschen Werte sind die gewünschte Ausgabe des SVM, die jedem der eingegebenen Sätze von Eingängen entsprach. Nach dem obigen Beispiel sagen wir, dass wir 5 Trainingspunkte haben. In diesem Szenario werden wir ein Boolesches Array von Ausgabewerten übergeben, das 5 Einheiten lang ist. Wenn Sie Ihre eigenen Eingaben und Ausgänge generieren, stellen Sie sicher, dass die Länge Ihrer Arrays mit den Werten übereinstimmt, die Sie übergeben. Wenn sie nicht übereinstimmen, wird ein Fehler generiert, der Sie über die Diskrepanz informiert. Zum Beispiel, wenn wir in NInputs3 übergeben haben und Eingaben ein Array von Länge 16 ist, wird ein Fehler ausgelöst (da ein Ninput-Wert von 3 bedeutet, dass die Länge eines beliebigen Eingabe-Arrays ein Vielfaches von 3 sein muss) . Vergewissern Sie sich außerdem, dass die Anzahl der Eingänge und die Anzahl der Ausgänge, die Sie übergeben, gleich ist. Wenn Sie NInputs3, die Länge der Eingänge von 15 und eine Länge der Ausgänge von 6 haben, wird ein weiterer Fehler ausgelöst (wie Sie 5 Sätze von Eingängen und 6 Ausgängen haben). Versuchen Sie sicherzustellen, dass Sie genug Abwechslung in Ihren Trainingsausgaben haben. Zum Beispiel, wenn Sie in 100 Trainingspunkten, die ein Ausgabe-Array der Länge 100 bedeutet, und alle Werte falsch mit nur einem wahr sind, dann ist die Differenzierung zwischen dem wahren Fall und dem falschen Fall nicht ausreichend genug. Dies wird dazu führen, dass die SVM-Training sehr schnell, aber die endgültige Lösung ist sehr schlecht. Ein abwechslungsreicheres Trainings-Set wird oft zu einem affektiveren SVM führen. Mit Unterstützung von Vector Machines (SVM) Endlich sind alle Stars ausgerichtet und ich kann sicherlich etwas Zeit für das Backtest von neuen Handelssystemen und Support Vector Machines (SVM) ) Sind die neuen 8220toy8221, die mich für eine Weile beschäftigt halten wird. SVMs sind ein bekanntes Werkzeug aus dem Bereich des überwachten Maschinelles Lernens. Und sie werden sowohl für die Klassifikation als auch für die Regression verwendet. Für weitere Details verweisen wir auf die Literatur. Es scheint mir, dass die intuitive Anwendung für den Handel ist Regression, so let8217s beginnen mit dem Aufbau eines SVM Regressionsmodell. Nach unserer Erfahrung mit ARMAGARCH-Modellen beginnen wir mit der Prognose der Renditen anstelle der Preise. Ebenso werden wir bei unseren ersten Tests nur die Rücksendungen der letzten 5 Tage verwenden, da die Merkmale die Rückgabe eines bestimmten Tages bestimmen. Wir beginnen mit einer Geschichte von 500 Tagen als Trainings-Set. In mathematischer Hinsicht haben wir für den Trainings-Set N Features, für jeden von ihnen haben wir M Samples. Wir haben auch M Antworten. Bei einer Reihe von Merkmalswerten wird die linke Matrix, die SVM, trainiert, um den Antwortwert zu erzeugen. In unserem konkreten Beispiel haben wir fünf Spalten (Merkmale), wobei jede Spalte den Renditen mit einer anderen Verzögerung (von 1 bis 5) entspricht. Wir haben 500 Samples und die entsprechenden Antworten. Sobald die SVM auf diesem Set trainiert ist, können wir mit der Fütterung mit Sätzen von fünf Features beginnen, entsprechend den Renditen für die fünf vorherigen Tage, und die SVM wird uns die Antwort geben, was die prognostizierte Rückkehr ist. Zum Beispiel, nach dem Training der SVM auf den letzten 500 Tagen, werden wir die Renditen für Tage 500, 499, 498, 497 und 496 (diese sind unsere als die Eingabe, um die prognostizierte Rendite für Tag 501 zu erhalten. Von allen Paketen zur Verfügung In R entschloss ich mich, das e1071 Paket zu wählen. Eine enge zweite Wahl war das Kernel-Paket, das ich noch in der Zukunft ausprobieren will. Dann habe ich ein paar Strategien ausprobiert. Zuerst habe ich etwas ganz ähnliches mit dem ARMAGARCH-Ansatz versucht Ich war sehr überrascht, diese Strategie besser zu sehen als die ARMAGARCH (das ist das Heimatland der ARMAGARCH und ich wäre mit einer vergleichbaren Leistung ganz glücklich gewesen. Als nächstes habe ich versucht, dasselbe Fünf Features, aber versuchen, wählen Sie die beste Teilmenge. Die Auswahl wurde mit einem gierigen Ansatz, beginnend mit 0 Features, und interaktiv Hinzufügen der Funktion, die den Fehler am besten minimiert. Dieser Ansatz verbessert die Dinge weiter. Schließlich habe ich versucht, einen anderen Ansatz mit etwa Ein Dutzend Features. Die Features enthalten Rückkehr über verschiedene Zeit (1 Tag, 2-Tage, 5-Tage, etc.), einige Statistiken (Mittelwert, Median, Sd, etc.) und Volumen. Ich habe den selben gierigen Ansatz benutzt, um Features auszuwählen. Dieses endgültige System zeigte auch eine sehr gute Leistung, aber es dauerte eine verdrehte Zeit zum Laufen. Zeit, diesen Beitrag zu beenden, müssen die Back-Testergebnisse warten. Bis dahin kannst du mit dem vollen Quellcode selbst spielen. Hier ist ein Beispiel für die Verwendung: Hi In Windows doesn8217t Arbeit wegen Multicore-Problem. Eine weitere Sache, die ich nicht verstehen kann, spiegelt sich in diesem auf Zeilen des Codes rets retsindex (Daten) Daten dataindex (rets) Meiner Meinung nach it8217s effektiver, um Serie smth wie mydtret lt - na. exclude (Merge (Rets, Daten) Und habe nur ein Argumentobjekt zu funktionieren anstelle von 2 Interessante Arbeit, danke Mike Argh, Windows 8211 Ich benutze es selten in letzter Zeit. Sehr überrascht noch, da das Parallel-Paket ist Teil der Basis R Verteilung jetzt. Hoffentlich wird es bald angesprochen werden Mittlerweile, wie wäre es mit der nicht parallelen Ausführung Auch gibt es noch andere Pakete, die eine parallele Ausführung bieten, aber das wäre mehr Arbeit. Du hast recht über den Merge 8211 Ich frage mich immer noch, warum ich diesmal so gemacht habe :) I8217m empfängt Fehler. Nun ist der Fehler gt data svmFeatures (tt), c (1,2) Fehler bei match. fun (FUN). Objekt 8216skewness8217 nicht gefunden Aber wenn ich manuell Datenobjekt mache, bekomme ich Fehler in der Vorhersage svmComputeOneForecast lt-Funktion in Bezug auf Dimensionen und Samplingquotcrossquot It039s schwierig zu mir zu debuggen Schief kommt aus dem PerformanceAnalytics-Paket, das Sie von CRAN installieren müssen. Hinzufügen erfordert (PerformanceAnalytics) als erste Zeile von svmFeatures sollte das erste Problem ansprechen. Jetzt Fehler ist Fehler in merge. xts (res, xts (na. trim (lag (rollmean (rets, k 21, align 8220right8221) Länge von 8216dimnames8217 2 nicht gleich Array-Umfang scheint es, dass in Windows-Code braucht eine Menge von Änderungen Mike, I never meant the code to be used directly (until now I was providing only snippets), but I am surprised that R on Windows is so ugly. Not sure what8217s your goal, but to analyze the strategies performance, you can use the indicator series which are already computed. It8217s just pure academic interest on SVM. I used to work with clusters, PCA and I am curious how SVM is doing the same work. In windows a lot of error are related to objects with dates as xts is or data frames. UNIX is better but all brokers give API for windows. Some of them in Java and only this we may use from UNIX. I don8217t like win architecture but it8217s a habit already and I don8217t have time to change OS. I just tried it on windows 7, 64 bit, R version 2.15.2. I get a warning from svmFeatures, which I know how to fix (calling sd on an xtszoo object does interesting conversion to a matrix), but no problems. Running: Thanks I8217ll try. One question if you don8217t mind Why are you using get with function cetSymbols from quantmod package I use call vers Example SPY lt - getSymbols(039SPY039, auto. assign FALSE) You have a lot to compute and get consume memory and takes time to obtain objects name as a string var The same error I8217m using R 2.15.1 But I8217m surprised with this result before call gt head(data) 1 function (8230, list character(), package NULL, lib. loc NULL, 2 verbose getOption(8220verbose8221), envir. GlobalEnv) 3 4 fileExt lt - function(x) 5 db lt - grepl(quot...(gzbz2xz)quot, x) 6 ans lt - sub(quot..quot, quotquot, x) It seems that data is reserved word And now I don039t know what is going to features functionTrading with Support Vector Machines (SVM) Finally all the stars have aligned and I can confidently devote some time for back-testing of new trading systems, and Support Vector Machines (SVM) are the new 8220toy8221 which is going to keep me busy for a while. SVMs are a well-known tool from the area of supervised Machine Learning. and they are used both for classification and regression. For more details refer to the literature. It seems to me that the most intuitive application for trading is regression, so let8217s start by building an SVM regression model. Following our experience with ARMAGARCH models, we will start by trying to forecast returns, instead of prices. Likewise, in our first tests, we will use only the returns of the previous 5 days as the features determining the return of a particular day. We will start with history of 500 days as the training set. In more mathematical terms, for the training set we have N features, for each of them we have M samples. We also have M responses. Given a row of feature values, the left matrix, the SVM is trained to produce the response value. In our specific example, we have five columns (features), each column corresponding to the returns with a different lag (from 1 to 5). We have 500 samples and the corresponding responses. Once the SVM is trained on this set, we can start feeding it with sets of five features, corresponding to the returns for the five previous days, and the SVM will provide us with the response, which is the forecasted return. For example, after training the SVM on the previous 500 days, we will use the returns for days 500, 499, 498, 497 and 496 (these are ours as the input to obtain the forecasted return for day 501. From all the packages available in R, I decided to choose the e1071 package. A close second choice was the kernlab package, which I am still planning to try in the future. Then I tried a few strategies. First I tried something very similar to the ARMAGARCH approach 8211 the lagged returns from the five previous days. I was quite surprised to see this strategy performing better than the ARMAGARCH (this is the home land of the ARMAGARCH and I would have been quite happy just with comparable performance) Next, I tried to the same five features, but trying to select the best subset. The selection was done using a greedy approach, starting with 0 features, and interactively adding the feature which minimizes the error best. This approach improved things further. Finally, I tried a different approach with about a dozen features. The features included returns over different period of time (1-day, 2-day, 5-day, etc), some statistics (mean, median, sd, etc) and volume. I used the same greedy approach to select features. This final system showed a very good performance as well, but it took a hell of a time to run. Time to end this post, the back-testing results have to wait. Until then you can play with the full source code yourself. Here is an example of using it: Never miss an update Subscribe to R-bloggers to receive e-mails with the latest R posts. (You will not see this message again.)Support Vector Machines: A Guide for Beginners In this guide I want to introduce you to an extremely powerful machine learning technique known as the Support Vector Machine (SVM). It is one of the best out of the box supervised classification techniques. As such, it is an important tool for both the quantitative trading researcher and data scientist. I feel it is important for a quant researcher or data scientist to be comfortable with both the theoretical aspects and practical usage of the techniques in their toolkit. Hence this article will form the first part in a series of articles that discuss support vector machines. This article specifically will cover the theory of maximal margin classifiers . support vector classifiers and support vector machines . Subsequent articles will make use of the Python scikit-learn library to demonstrate some examples of the aforementioned theoretical techniques on actual data. Motivation for Support Vector Machines The problem to be solved in this article is one of supervised binary classification . That is, we wish to categorise new unseen objects into two separate groups based on their properties and a set of known examples, which are already categorised. A good example of such a system is classifying a set of new documents into positive or negative sentiment groups, based on other documents which have already been classified as positive or negative. Similarly, we could classify new emails into spam or non-spam, based on a large corpus of documents that have already been marked as spam or non-spam by humans. SVMs are highly applicable to such situations. A Support Vector Machine models the situation by creating a feature space . which is a finite-dimensional vector space. each dimension of which represents a feature of a particular object. In the context of spam or document classification, each feature is the prevalence or importance of a particular word. The goal of the SVM is to train a model that assigns new unseen objects into a particular category. It achieves this by creating a linear partition of the feature space into two categories. Based on the features in the new unseen objects (e. g. documentsemails), it places an object above or below the separation plane, leading to a categorisation (e. g. spam or non-spam). This makes it an example of a non-probabilistic linear classifier. It is non-probabilistic, because the features in the new objects fully determine its location in feature space and there is no stochastic element involved. However, much of the benefit of SVMs comes from the fact that they are not restricted to being linear classifiers. Utilising a technique known as the kernel trick they can become much more flexible by introducing various types of non-linear decision boundaries. Formally, in mathematical language, SVMs construct linear separating hyperplanes in high-dimensional vector spaces. Data points are viewed as (vec , y) tuples, vec (x1, ldots, xp) where the xj are the feature values and y is the classification (usually given as 1 or -1). Optimal classification occurs when such hyperplanes provide maximal distance to the nearest training data points. Intuitively, this makes sense, as if the points are well separated, the classification between two groups is much clearer. However, if in a feature space some of the sets are not linearly separable (i. e. they overlap), then it is necessary to perform a mapping of the original feature space to a higher-dimensional space, in which the separation between the groups is clear, or at least clearer. However, this has the consequence of making the separation boundary in the original space potentially non-linear. In this article we will proceed by considering the advantages and disadvantages of SVMs as a classification technique, then defining the concept of an optimal linear separating hyperplane . which motivates a simple type of linear classifier known as a maximal margin classifier (MMC). We will then show that maximal margin classifiers are not often applicable to many real world situations and as such need modification, in the form of a support vector classifier (SVC). We will then relax the restriction of linearity and consider non-linear classifiers, namely support vector machines . which use kernel functions to improve computational efficiency. Advantages and Disadvantages of SVMs As a classification technique, the SVM has many advantages, many of which are due to its computational efficiency on large datasets. The Scikit-Learn team have summarised the main advantages and disadvantages here but I have repeated and elaborated on them for completeness: Advantages High-Dimensionality - The SVM is an effective tool in high-dimensional spaces, which is particularly applicable to document classification and sentiment analysis where the dimensionality can be extremely large (geq 106). Memory Efficiency - Since only a subset of the training points are used in the actual decision process of assigning new members, only these points need to be stored in memory (and calculated upon) when making decisions. Versatility - Class separation is often highly non-linear. The ability to apply new kernels allows substantial flexibility for the decision boundaries, leading to greater classification performance. Disadvantages p gt n - In situations where the number of features for each object (p) exceeds the number of training data samples (n), SVMs can perform poorly. This can be seen intuitively, as if the high-dimensional feature space is much larger than the samples, then there are less effective support vectors on which to support the optimal linear hyperplanes, leading to poorer classification performance as new unseen samples are added. Non-Probabilistic - Since the classifier works by placing objects above and below a classifying hyperplane, there is no direct probabilistic interpretation for group membership. However, one potential metric to determine effectiveness of the classification is how far from the decision boundary the new point is. Now that weve outlined the advantages and disadvantages, were going to discuss the geometric objects and mathematical entities that will ultimately allow us to define the SVMs and how they work. There are some fantastic references (both links and textbooks) that derive much of the mathematical detail of how SVMs work. In the following derivation I didnt want to reinvent the wheel too much, especially with regards notation and pedagogy, so Ive formulated the following treatment based on the references provided at the end of the article, making strong use of James et al (2013). Hastie et al (2009) and the Wikibooks article on SVMs. I have made changes to the notation where appropriate and have adjusted the narrative to suit individuals interested in quantitative finance. Linear Separating Hyperplanes The linear separating hyperplane is the key geometric entity that is at the heart of the SVM. Informally, if we have a high-dimensional feature space, then the linear hyperplane is an object one dimension lower than this space that divides the feature space into two regions. This linear separating plane need not pass through the origin of our feature space, i. e. it does not need to include the zero vector as an entity within the plane. Such hyperplanes are known as affine . If we consider a real-valued p-dimensional feature space, known mathematically as mathbb p, then our linear separating hyperplane is an affine p-1 dimensional space embedded within it. For the case of p2 this hyperplane is simply a one-dimensional straight line, which lives in the larger two-dimensional plane, whereas for p3 the hyerplane is a two-dimensional plane that lives in the larger three-dimensional feature space (see Fig 1 and Fig 2): If we consider an element of our p-dimensional feature space, i. e. vec (x1. xp) in mathbb p, then we can mathematically define an affine hyperplane by the following equation: begin b0 b1 x1 . bp xp 0 end b0 neq 0 gives us an affine plane (i. e. it does not pass through the origin). We can use a more succinct notation for this equation by introducing the summation sign: Notice however that this is nothing more than a multi-dimensional dot product (or, more generally, an inner product ), and as such can be written even more succinctly as: If an element vec in mathbb p satisfies this relation then it lives on the p-1-dimensional hyperplane. This hyperplane splits the p-dimensional feature space into two classification regions (see Fig 3): Elements vec above the plane satisfy: While those below it satisfy: The key point here is that it is possible for us to determine which side of the plane any element vec will fall on by calculating the sign of the expression vec cdot vec b0. This concept will form the basis of a supervised classification technique. Classification Continuing with our example of email spam filtering, we can think of our classification problem (say) as being provided with a thousand emails (n1000), each of which is marked spam (1) or non-spam (-1). In addition, each email has an associated set of keywords (i. e. separating the words on spacing) that provide features . Hence if we take the set of all possible keywords from all of the emails (and remove duplicates), we will be left with p keywords in total. If we translate this into a mathematical problem, the standard setup for a supervised classification procedure is to consider a set of n training observations . vec i, each of which is a p-dimensional vector of features. Each training observation has an associated class label . yi in . Hence we can think of n pairs of training observations (vec i, yi) representing the features and class labels (keyword lists and spamnon-spam). In addition to the training observations we can provide test observations . vec (x 1. x p) that are later used to test the performance of the classifiers. In our spam example, these test observations would be new emails that have not yet been seen. Our goal is to develop a classifier based on provided training observations that will correctly classify subsequent test observations using only their feature values. This translates into being able to classify an email as spam or non-spam solely based on the keywords contained within it. We will initially suppose that it is possible, via a means yet to be determined, to construct a hyperplane that separates training data perfectly according to their class labels (see Figs 4 and 5). This would mean cleanly separating spam emails from non-spam emails solely by using specific keywords. The following diagram is only showing p2, while for keyword lists we may have pgt106. Hence Figs 4 and 5 are only representative of the problem. This translates into a mathematical separating property of: begin vec cdot vec i b0 gt 0,enspacetext enspace yi 1 end begin vec cdot vec i b0 lt 0,enspacetext enspace yi -1 end This basically states that if each training observation is above or below the separating hyperplane, according to the geometric equation which defines the plane, then its associated class label will be 1 or -1. Thus we have developed a simple classification process. We assign a test observation to a class depending upon which side of the hyperplane it is located on. This can be formalised by considering the following function f(vec ), with a test observation vec (x 1. x p): If f(vec ) gt 0 then y 1, whereas if f(vec ) lt 0 then y -1. However, this tells us nothing about how we go about finding the bj components of vec , as well as b0, which are crucial in helping us determine the equation of the hyperplane separating the two regions. The next section discusses an approach for carrying this out, as well as introducing the concept of the maximal margin hyperplane and a classifier built on it, known as the maximal margin classifier . Deriving the Classifier At this stage it is worth pointing out that separating hyperplanes are not unique, since it is possible to slightly translate or rotate such a plane without touching any training observations (see Fig 4). So, not only do we need to know how to construct such a plane, but we also need to determine the most optimal . This motivates the concept of the maximal margin hyperplane (MMH), which is the separating hyperplane that is farthest from any training observations, and is thus optimal. How do we find the maximal margin hyperplane Firstly, we compute the perpendicular distance from each training observation vec i for a given separating hyperplane. The smallest perpendicular distance to a training observation from the hyperplane is known as the margin . The MMH is the separating hyperplane where the margin is the largest. This guarantees that it is the farthest minimum distance to a training observation. The classification procedure is then just simply a case of determining which side a test observation falls on. This can be carried out using the above formula for f(vec ). Such a classifier is known as a maximimal margin classifier (MMC). Note however that finding the particular values that lead to the MMH is purely based on the training observations . That is, we still need to be aware of how the MMC performs on the test observations . We are implicitly making the assumption that a large margin in the training observations will provide a large margin on the test observations, but this may not be the case. As always, we must be careful to avoid overfitting when the number of feature dimensions is large (e. g. in Natural Language Processing applications such as email spam classification). Overfitting here means that the MMH is a very good fit for the training data but can perform quite poorly when exposed to testing data . I discuss this issue in depth in the article on the bias-variance trade-off . To reiterate, our goal now becomes finding an algorithm that can produce the bj values, which will fix the geometry of the hyperplane and hence allow determination of f(vec ) for any test observation. If we consider Fig 6, we can see that the MMH is the mid-line of the widest block that we can insert between the two classes such that they are perfectly separated. One of the key features of the MMC (and subsequently SVC and SVM) is that the location of the MMH only depends on the support vectors . which are the training observations that lie directly on the margin (but not hyperplane) boundary (see points A, B and C in Fig 6). This means that the location of the MMH is NOT dependent upon any other training observations. Thus it can be immediately seen that a potential drawback of the MMC is that its MMH (and thus its classification performance) can be extremely sensitive to the support vector locations. However, it is also partially this feature that makes the SVM an attractive computational tool, as we only need to store the support vectors in memory once it has been trained (i. e. the bj values are fixed). Constructing the Maximal Margin Classifier I feel it is instructive to fully outline the optimisation problem that needs to be solved in order to create the MMH (and thus the MMC itself). While I will outline the constraints of the optimisation problem, the algorithmic solution to this problem is beyond the scope of the article. Thankfully these optimisation routines are implemented in scikit-learn (actually, via the LIBSVM library ). If you wish to read more about the solution to these algorithmic problems, take a look at Hastie et al (2009) and the Scikit-Learn page on Support Vector Machines . The procedure for determining a maximal margin hyperplane for a maximal margin classifier is as follows. Given n training observations vec 1. vec n in mathbb p and n class labels y1. yn in , the MMH is the solution to the following optimisation procedure: Maximise M in mathbb , by varying b1. bp such that: begin yi left( vec cdot vec b0 right) geq M, quad forall i 1. n end Despite the complex looking constraints, they actually state that each observation must be on the correct side of the hyperplane and at least a distance M from it. Since the goal of the procedure is to maximise M, this is precisely the condition we need to create the MMC Clearly, the case of perfect separability is an ideal one. Most real world datasets will not have such perfect separability via a linear hyperplane (see Fig 7). However, if there is no separability then we are unable to construct a MMC by the optimisation procedure above. So, how do we create a form of separating hyperplane Essentially we have to relax the requirement that a separating hyperplane will perfectly separate every training observation on the correct side of the line (i. e. guarantee that it is associated with its true class label), using what is called a soft margin . This motivates the concept of a support vector classifier (SVC). Support Vector Classifiers As we alluded to above, one of the problems with MMC is that they can be extremely sensitive to the addition of new training observations. Consider Figs 8 and 9. In Fig 8 it can be seen that there exists a MMH perfectly separating the two classes. However, in Fig 9 if we add one point to the 1 class we see that the location of the MMH changes substantially. Hence in this situation the MMH has clearly been over-fit : As we mentioned above also, we could consider a classifier based on a separating hyperplane that doesnt perfectly separate the two classes, but does have a greater robustness to the addition of new invididual observations and has a better classification on most of the training observations. This comes at the expense of some misclassification of a few training observations. This is how a support vector classifier or soft margin classifier works. A SVC allows some observations to be on the incorrect side of the margin (or hyperplane), hence it provides a soft separation. The following figures 10 and 11 demonstrate observations being on the wrong side of the margin and the wrong side of the hyperplane respectively: As before, an observation is classified depending upon which side of the separating hyperplane it lies on, but some points may be misclassified. It is instructive to see how the optimisation procedure differs from that described above for the MMC. We need to introduce new parameters, namely n epsiloni values (known as the slack values ) and a parameter C, known as the budget . We wish to maximise M, across b1. bp, epsilon1. epsilonn such that: begin yi left( vec cdot vec b0 right) geq M (1 - epsiloni), quad forall i 1. n end begin epsiloni geq 0, quad sum epsiloni leq C end Where C, the budget, is a non-negative tuning parameter. M still represents the margin and the slack variables epsiloni allow the individual observations to be on the wrong side of the margin or hyperplane. In essence the epsiloni tell us where the ith observation is located relative to the margin and hyperplane. For epsiloni0 it states that the xi training observation is on the correct side of the margin. For epsiloni0 we have that xi is on the wrong side of the margin, while for epsiloni1 we have that xi is on the wrong side of the hyperplane. C collectively controls how much the individual epsiloni can be modified to violate the margin. C0 implies that epsiloni0, forall i and thus no violation of the margin is possible, in which case (for separable classes) we have the MMC situation. For C0 it means that no more than C observations can violate the hyperplane. As C increases the margin will widen. See Fig 12 and 13 for two differing values of C: How do we choose C in practice Generally this is done via cross-validation. In essence C is the parameter that governs the bias-variance trade-off for the SVC. A small value of C means a low bias, high variance situation. A large value of C means a high bias, low variance situation. As before, to classify a new test observation x we simply calculate the sign of f(vec ) vec cdot vec b0. This is all well and good for classes that are linearly (or nearly linearly) separated. However, what about separation boundaries that are non-linear How do we deal with those situations This is where we can extend the concept of support vector classifiers to support vector machines. Support Vector Machines The motivation behind the extension of a SVC is to allow non-linear decision boundaries. This is the domain of the Support Vector Machine (SVM). Consider the following Figs 14 and 15. In such a situation a purely linear SVC will have extremely poor performance, simply because the data has no clear linear separation: Hence SVCs can be useless in highly non-linear class boundary problems. In order to motivate how an SVM works, we can consider a standard trick in linear regression, when considering non-linear situations. In particular a set of p features x1. xp can be transformed, say, into a set of 2p features x1, x21. xp, x2p. This allows us to apply a linear technique to a set of non-linear features. While the decision boundary is linear in the new 2p-dimensional feature space it is non-linear in the original p-dimensional space. We end up with a decision boundary given by q(vec )0 where q is a quadratic polynomial function of the original features and hence is a non-linear solution. This is clearly not restricted to quadratic polynomials. Higher dimensional polynomials, interaction terms and other functional forms, could all be considered. Although the drawback is that it dramatically increases the dimension of the feature space to the point that some algorithms can become untractable. The major advantage of SVMs is that they allow a non-linear enlargening of the feature space, while still retaining a significant computational efficiency, using a process known as the kernel trick. which will be outlined below shortly. So what are SVMs In essence they are an extension of SVCs that results from enlargening the feature space through the use of functions known as kernels . In order to understand kernels, we need to briefly discuss some aspects of the solution to the SVC optimisation problem outlined above. While calculating the solution to the SVC optimisation problem, the algorithm only needs to make use of inner products between the observations and not the observations themselves. Recall that an inner product is defined for two p-dimensional vectors u, v as: Hence for two observations an inner product is defined as: While we wont dwell on the details (since they are beyond the scope of this article), it is possible to show that a linear support vector classifier for a particular observation vec can be represented as a linear combination of inner products: begin f(vec ) b0 sum alphai langle vec , vec i rangle end With n ai coefficients, one for each of the training observations. To estimate the b0 and ai coefficients we only need to calculate n(n-1)2 inner products between all pairs of training observations. In fact, we ONLY need to calculate the inner products for the subset of training observations that represent the support vectors . I will call this subset mathscr . This means that: begin ai 0 enspace text enspace vec i notin mathscr end This means we can rewrite the representation formula as: This turns out to be a major advantage for computational efficiency. This now motivates the extension to SVMs. If we consider the inner product langle vec i, vec k rangle and replace it with a more general inner product kernel function KK(vec i, vec k), we can modify the SVC representation to use non-linear kernel functions and thus modify how we calculate similarity between two observations. For instance, to recover the SVC we just take K to be as follows: Since this kernel is linear in its features the SVC is known as the linear SVC. We can also consider polynomial kernels, of degree d: This provides a significantly more flexible decision boundary and essentially amounts to fitting a SVC in a higher-dimensional feature space involving d-degree polynomials of the features (see Fig 16). Hence, the definition of a support vector machine is a support vector classifier with a non-linear kernel function. We can also consider the popular radial kernel (see Fig 17): begin K(vec i, vec k) exp left(-gamma sum (x - x )2 right), quad gamma 0 end So how do radial kernels work They are clearly quite different from polynomial kernels. Essentially if our test observation vec is far from a training observation vec i in standard Euclidean distance then the sum sum (x j - x )2 will be large and thus K(vec, vec i) will be very small. Hence this particular training observation vec i will have almost no effect on where the test observation vec is placed, via f(vec ). Thus the radial kernel has extremely localised behaviour and only nearby training observations to vec will have an impact on its class label. While this article has been very theoretical, the next article on document classification using Scikit-Learn makes heavy use of SVMs in Python. Biblographic Notes Originally, SVMs were invented by Vapnik (1996). while the current standard soft margin approach is due to Cortes (1995). My treatment of the material follows, and is strongly influenced by, the excellent statistical machine learning texts of James et al (2013) and Hastie et al (2009) . References Vapnik, V. (1996) The Nature of Statistical Learning Theory Cortes, C. Vapnik, V. (1995) Support Vector Networks, Machine Learning 20 (3): 273 James, G. Witten, D. Hastie, T. Tibshiranie, R. (2013) An Introduction to Statistical Learning Hastie, T. Tibshiranie, R. Friedman, J. (2009) The Elements of Statistical Learning Wikibooks (2016) Support Vector Machines (Link ) Scikit-Learn (2016) Support Vector Machines (Link ) Just Getting Started with Quantitative Trading
Comments
Post a Comment