Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 211
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
1) Leider haben Sie die Frage unvollständig formuliert und eine ungeprüfte und kurze, höfliche "Das ist egal"-Antwort erhalten.
Sie wollten eine "so vereinbarte/konventionelle" Antwort, indem Sie sie in der Frage selbst formulierten. Aber Duncan kam beim ersten Mal mit dem "Richtigen" davon und wiederholte es beim zweiten Mal.
2) Sie haben keine Bestätigung für die Genauigkeit in R erhalten und keine Antwort auf die Frage, warum das Ergebnis in anderen Paketen anders ist. Die Analyse der Frage "warum ist die Antwort in anderen Paketen anders" ist wichtiger und kann das Thema aufdecken.
3) Unser Standpunkt:
выражение для dgamma
(x)= 1/(s^a Gamma(a)) x^(a-1) e^-(x/s)
for x ≥ 0, a > 0 and s > 0в точке 0 является неопределенным.
R geht davon aus, dass Sie diesen Punkt in die Berechnung einbeziehen können, aber die Grenzwerte nehmen, auch wenn sie unendlich sind, wie im Fall von dgamma(0,0.5,1).
Berechnet man jedoch Wahrscheinlichkeiten, die im Nullpunkt unendlich sind, werden alle Integrale von dgamma formal unendlich, und nach dieser Logik müsste pgamma für alle Werte von x gleich unendlich sein.
Dies steht jedoch im Widerspruch zu den Ergebnissen von pgamma, wo sich alle Werte als endlich erweisen. Sie sind richtig, denn im Punkt x=0 wird die Dichte als =0 angenommen.1) Ja, ich habe keine detaillierte Antwort erhalten. Obwohl ich es auf den Punkt gebracht habe... Ich will meine Meinung nicht aufdrängen, ich bin es auch leid, zu streiten, um ehrlich zu sein. Ich möchte Sie darauf aufmerksam machen, dass die Worte dieser Person fast wortwörtlich mit unserer ursprünglichen Nachricht übereinstimmen. Wie man die Dichte am Extrempunkt bestimmt, ist nicht wichtig, die Hauptsache ist, dass man die Integrale richtig berechnet:
Wir erklären, dass die Dichte der Gamma-Verteilung am Punkt Null streng genommen undefiniert ist. Nimmt man den Grenzwert auf der rechten Seite, so ist die Dichte gleich eins.
Vor diesem Hintergrund halten wir die Aussage "Berechnungsfehler in R" für nicht korrekt. Genauer gesagt handelt es sich um eine Frage der Konvention: Was ist als gleich dem Ausdruck Null hoch Null zu betrachten? Die Gleichsetzung der Dichte der Gamma-Verteilung mit Null am Punkt Null scheint keine bedingte Praxis zu sein.
2) Es war nicht einmal die Rede von Genauigkeit meinerseits. Bei der Dichte am Punkt Null geht es nicht um Präzision, sondern darum, wie man sie als Ergebnis der Funktion ableitet - Nicht-Konvergenz (NaN) oder Gleichsetzung mit dem Grenzwert oder mit Null. Die Hauptsache ist, dass es für die Berechnung des Integrals keine Rolle spielt.
3) Ich habe den korrigierten Text des Artikels noch einmal gelesen. Und ich bin froh, dass Sie beschlossen haben, das Verhalten von dgamma nicht als Fehler zu betrachten.
Aber das :
werden alle Integrale von dgamma formal unendlich und nach dieser Logik müsste pgamma für alle Werte von x gleich unendlich sein.
Seltsam, Renat.
pgamma kann im Prinzip nicht unendlich sein, da das Ingegral von oben durch den Wert 1 begrenzt wird.
Nehmen wir die Normalverteilung. Sie ist für [-inf,+inf] definiert. Integral der Verteilungsfunktion = 1 in diesem Intervall. Aber irgendwie stellt sich heraus, dass die Summierung (Integration) der Dichte auf einem unendlich großen Saport nicht zu einer unendlichen Summe führt. Obwohl die Dichte auf dem gesamten Keepport != 0 in jeder Region ist.
Und wie oft kommt bei dgmamma der Punkt x ==0 mit seiner Dichte == inf vor (den Fall, dass die Dichte an diesem Punkt gegen 1 tendiert, haben Sie übrigens nicht berücksichtigt, und welche Schlüsse über die Integration ziehen Sie daraus...)? Ich würde sagen, dass dies nicht der Fall ist. Die Wahrscheinlichkeit, eine Zufallsvariable an einem beliebigen Punkt == 0 in einer kontinuierlichen Verteilung zu realisieren... Alle Statistiker wissen das. Die Dichte wird als eine Annäherung der Wahrscheinlichkeit an einen infinitesimalen Bereich um x betrachtet.
Daraus folgt, dass unabhängig davon, wie groß die Dichte am Extrempunkt sein mag, ihre Auswirkung auf den Gesamtwert = 0 ist. Denken Sie darüber nach...
Ich glaube, Sie machen sich zu viele Gedanken. ) Aber ich werde mich nicht streiten und es herausfinden. Vielleicht merke ich es eines Tages und antworte selbst anstelle von Duncan. )
Ich danke Ihnen.
R ist ein erstaunliches System, das mir persönlich die Augen geöffnet hat, wie weit wir in MetaTrader/MQL von den wirklichen Bedürfnissen des "komplexe Berechnungen einfach und sofort machen" entfernt waren.
Wir (C++-Entwickler) haben den Ansatz "Sie können alles selbst machen, und wir geben Ihnen die niedrige Basis und die Geschwindigkeit der Berechnungen" in unserem Blut. Wir sind fanatisch, wenn es um Leistung geht, und wir sind gut darin - MQL5 ist großartig auf 64 Bit.
Als ich anfing, selbst mit R zu arbeiten, wurde mir klar, dass ich so viele leistungsstarke Funktionen wie möglich in einer Zeile benötigte, um allgemein forschen zu können.
Wir haben also eine Kehrtwende vollzogen und mit dem Upgrade von MetaTrader 5 begonnen:
Natürlich stehen wir noch am Anfang des Weges, aber die richtige Richtung der Bemühungen ist bereits klar.
7 Schritte zur Integration sind sicherlich nicht genug. Hier sind 1.000:
[1] 0.7940968
#а теперь велосипедное интегрирование:
> integration_steps <- seq(0, 0.8, length.out=1001)
> integration_result <- 0
> for(i in 2:length(integration_steps)){
+ integration_result <- integration_result + dgamma(integration_steps[i], 0.5, 1) * (integration_steps[i] - integration_steps[i-1])
+ }
> integration_result
[1] 0.7709089
#погрешность ~0.02, но тут способ уже проще некуда, и так сойдёт :) . Бесконечность при x=0 не мешает.
1) Ja, ich habe keine detaillierte Antwort erhalten. Obwohl ich es zusammenfassen wollte... Ich will meine Meinung nicht aufdrängen, ich bin es auch leid, zu streiten, um ehrlich zu sein. Ich möchte Sie darauf aufmerksam machen, dass die Worte dieser Person fast wortwörtlich mit unserer ursprünglichen Nachricht übereinstimmen.
Es war eine höfliche Antwort ohne Einzelheiten oder Überprüfung. Und die Antwort stimmte nicht mit Wolfram Alpha und Matlab überein, was ein Problem darstellt.
Es ist nicht nötig, auszuweichen - die eigentliche Frage war klar formuliert.
#погрешность ~0.02, но тут способ уже велосипедней некуда, и так сойдёт :) . Бесконечность при x=0 не мешает.
Integrieren Sie die Funktion 1/x von 0 bis 1, einschließlich der Randpunkte, und vergleichen Sie mit dem Ergebnis der analytischen Berechnungen.
Wolfram sagt, dass das Integral wegen der Singularität bei x=0 nicht konvergieren wird.
Integrieren Sie die Funktion 1/x von 0 bis 1, einschließlich der Randpunkte, und vergleichen Sie mit dem Ergebnis der analytischen Berechnungen.
Mit dem gleichen Code - 7.485471. R kam bei 76,3342 an und sagte, dass es nicht weitergehen würde, und das ist kein genaues Ergebnis und falsch. Wolfram sagte einfach sofort, dass das Ergebnis nicht stimmt, und antwortete nicht.
Die richtige Antwort: Ich weiß nicht, wie viel?
Sagen Sie mir nicht, dass das Integral von 1/x nicht gefunden werden kann und das Integral von dgamma(x) auch nicht. Die beiden Funktionen tendieren bei x -> 0+ gegen unendlich, aber sie tendieren mit unterschiedlicher Geschwindigkeit, und diese Geschwindigkeit beeinflusst, ob das Integral gefunden werden kann oder nicht.
Es gibt eine Funktion -log(x). Sie tendiert bei x->0 ins Unendliche. Man kann es auch ohne Minus machen, dann tendiert sie nach unten, aber das ist mir nicht recht.
Und sie hat ein Integral von 0 bis 1. Die Unendlichkeit stört nicht.
R ist ein erstaunliches System, das mir persönlich die Augen geöffnet hat, wie weit wir in MetaTrader/MQL von der wirklichen Notwendigkeit entfernt waren, "komplexe Berechnungen jetzt einfach und unkompliziert durchzuführen".
...
Also haben wir eine Kehrtwende vollzogen und mit dem Upgrade von MetaTrader 5 begonnen:
Natürlich stehen wir noch am Anfang des Weges, aber die richtige Richtung der Bemühungen ist bereits klar.
R, wie auch viele andere Programmiersprachen, ist für das maschinelle Lernen weitaus geeigneter als MQL, da es einen eingebauten Funktionssatz für die Verarbeitung von Array-Daten hat. Ein Beispiel für maschinelles Lernen ist meist ein zweidimensionales Datenarray, so dass eine Funktion für die Arbeit mit Arrays erforderlich ist:
Bis MQL die oben erwähnten Funktionen für die Handhabung von Mustern in Arrays implementiert hat, werden die meisten Entwickler von Algorithmen für maschinelles Lernen andere Programmiersprachen bevorzugen, die bereits über all dies verfügen. Oder sie verwenden das einfache MLP (Algorithmus aus den 1960er Jahren) aus der AlgLib-Bibliothek, in der, wenn ich mich recht erinnere, zweidimensionale Felder der Einfachheit halber als eindimensional dargestellt werden.
Natürlich sind auch Funktionen für Dichten von Zufallsverteilungen eine notwendige Funktionalität. Aber solche Funktionen werden bei Aufgaben des maschinellen Lernens nicht immer benötigt, und bei einigen Aufgaben werden sie überhaupt nicht verwendet. Aber Operationen mit Stichproben, wie bei mehrdimensionalen Arrays, sind etwas, auf das die Implementierung von Algorithmen für maschinelles Lernen bei keiner Aufgabe verzichten kann, es sei denn natürlich, es handelt sich um die Aufgabe, ein Gitter zu trainieren, um die bekannten normalisierten Daten aus trivialen CWR zu lernen.
R ist ein erstaunliches System, das mir persönlich die Augen geöffnet hat, wie weit wir in MetaTrader/MQL von den wirklichen Bedürfnissen des "komplexe Berechnungen einfach und sofort machen" entfernt waren.
Wir (C++-Entwickler) haben den Ansatz "Sie können alles selbst machen, und wir geben Ihnen die niedrige Basis und die Geschwindigkeit der Berechnungen" in unserem Blut. Wir sind fanatisch, wenn es um Leistung geht, und wir sind gut darin - MQL5 ist großartig auf 64 Bit.
Als ich anfing, selbst mit R zu arbeiten, wurde mir klar, dass ich so viele leistungsstarke Funktionen wie möglich in einer Zeile benötigte, um allgemein forschen zu können.
Wir haben also eine Kehrtwende vollzogen und mit dem Upgrade von MetaTrader 5 begonnen:
Natürlich stehen wir noch am Anfang des Weges, aber der richtige Vektor der Bemühungen ist bereits klar.
Dies ist eine ausgewogene und erstaunlich objektive Bewertung von R.
Der konstruktive Teil der Diskussion war nicht umsonst. Sie hören sich die Kommentare und Vorschläge der R-Nutzer an. Auch wir sind daran interessiert, die Plattform zu verbessern.
Natürlich stehen Sie noch am Anfang, aber auf jeden Fall werden die R-Impfstoffe die MCL stärken.
Viel Glück bei Ihrer harten Arbeit.
Zu den Konventionen, von denen Burnakov gesprochen hat.
Betrachten wir drei sehr unterschiedliche Fälle.
1. Division durch eine Konstante, die gleich Null ist.
In R haben wir das Ergebnis
[1] Inf
Ist das Ergebnis korrekt?
Für den Interpreter ist dieses Ergebnis als korrekt zu betrachten, denn wir können R
Für den Compiler ist dieses Ergebnis korrekt. Wenn eine Ausnahmesituation eintritt, wird die Programmausführung unterbrochen und die Kontrolle über die Behandlung dieser Ausnahmesituation übernommen, andernfalls kommt es zum Absturz.
Beachten Sie, wie unterschiedlich sie ist!
2. Division durch eine Variable, die gleich Null ist.
> 1/a
[1] Inf
Streng genommen unterscheidet sich diese Variante von der vorherigen.
Die Funktion 1/a ist überall stetig, außer bei a=0. An diesem Punkt ist der linke Grenzwert = -Inf und der rechte Grenzwert = +Inf.
R versteht dies nicht, aber Sie können es akzeptieren, da der Unterschied zwischen minus unendlich und plus unendlich in der Mathematik einen Sinn ergibt, nicht im Programmcode
3. Division zweier infinitesimaler Mengen in ihrem Streben nach Null
[1] NaN
Die Bedeutung von NaN ist mir völlig unklar. Unter Punkt 2 wird jedoch deutlich, dass R die Grenzen als solche nicht versteht.
Sind dies Fehler von R als Programmiersystem? Ich weiß es nicht. Wahrscheinlich hätte die R-Dokumentation über solche Nuancen informieren sollen, aber wie soll man das dann bei einer dezentralen Entwicklung von derzeit etwa 130.000 Funktionen umsetzen? Müssen wir das?
Was folgt daraus im Sinne der entstandenen Diskussion?
Die Entscheidungen werden an Land getroffen.
1. Wir nehmen R und übertragen den Code unverblümt auf MKL. Gleichzeitig müssen wir uns darüber im Klaren sein, dass die oben genannten Varianten in verschiedenen Funktionen von R unterschiedliche Interpretationen haben können
2. erklären Sie Vereinbarungen, welche Werte in den genannten Fällen akzeptiert werden (die Liste kann unvollständig sein). Wir prüfen den R-Code gründlich, und wenn er nicht mit unseren Einstellungen übereinstimmt, portieren wir ihn von R nach MCL und korrigieren ihn entsprechend unseren Vereinbarungen. In diesem Fall setzen wir aufgrund der zentralisierten Entwicklung die angenommenen Konventionen konsequent um und haben in diesem Sinne ein besseres System.