Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 3332

 
Forester #:
Meine Herren! Verwechseln Sie nicht das Thema? Es wäre gut, 2-3 Seiten vom Offtopic zu säubern.
Der Artikel von Alexey wurde vor einer Stunde veröffentlicht, lesen Sie ihn.
Ich denke, wir haben seine Quantifizierung bereits zu gegebener Zeit von allen Seiten diskutiert. Ich kann dem, was ich vorher gesagt habe, nur hinzufügen, dass ich mich für ihn freue, dass es ihm wenigstens 200 Dollar eingebracht hat.
 
Aleksey Nikolayev #:
Ich glaube, wir haben bereits von allen Seiten über seine Quantifizierung in seiner Zeit gesprochen. Ich kann dem, was ich vorhin gesagt habe, nur hinzufügen, dass ich mich für ihn freue, dass es ihm wenigstens 200 Dollar eingebracht hat.

Ihr Zweig? Heute haben Sie eine Menge philosophischer und anderer Fälschungen off-topic (flud) geäußert, und was nennen Sie "Ihre eigenen Prinzipien nicht respektieren"?
Außerdem, wie würden Kant und Diogenes und vielleicht Aristoteles und Pythagoras eine Person nennen, die sich daran berauscht, dass sie die Tugenden und Leistungen einer anderen Person erniedrigt, beleidigt und herabsetzt?
 
Aleksey Nikolayev #:
Ich denke, wir haben bereits von allen Seiten über die Quantifizierung seiner Zeit diskutiert. Ich kann dem, was ich vorhin sagte, nur hinzufügen, dass ich mich für ihn freue, dass es ihm wenigstens 200 Dollar eingebracht hat.

Danke, es ist schön, sich über mein Einkommen zu freuen - das ist selten!

Der Artikel ist einleitend - Sie haben Recht, alles was ich dort geschrieben habe - denke ich, und so klar.

Der zweite Teil ist in der Moderation, er ist ein bisschen interessanter. Allerdings habe ich es im Moment aufgegeben, meine eigene Methode zu beschreiben, und bin auf eine vereinfachte Version gekommen, die einen kleinen Effekt auf Tests hatte. Sie wird im zweiten Teil beschrieben werden.

Dies ist jedoch der Fall, wenn neue Ideen nicht mehr als 5% des Textes einnehmen.

Kommen Sie wieder, um zu lesen und zu kommentieren, wenn Sie möchten.

 
Andrey Dik #:

h ttps:// www.mql5.com/ru/forum/309270
Ihr Thema? Heute haben Sie eine Menge philosophischer und anderer themenfremder Betrachtungen angestellt (flud), und was nennen Sie "Ihre eigenen Prinzipien nicht respektieren"?
Wie würden Kant und Diogenes und vielleicht auch Aristoteles und Pythagoras einen Menschen nennen, der sich daran berauscht, dass er die Tugenden und Leistungen eines anderen Menschen erniedrigt, beleidigt und herabsetzt?

Ich weiß nicht, welchen Diogenes Sie meinen, aber im Sinne des Trollens sind wir alle Kinder im Vergleich zu Diogenes von Sinope oder Diogenes von Laertes.

Wenn Sie sich die Daten meines Threads, meiner Registrierung auf der Ressource und des heutigen Threads ansehen, wird es klarer. Zwei Jahre nach der Registrierung gab es noch Hoffnung auf einen konstruktiven und nützlichen Dialog im Forum, und sechseinhalb Jahre später gibt es fast keine Hoffnung mehr. Nur so zum Spaß.

 
Aleksey Vyazmikin #:

Bitte sehr, danke, es ist schön, sich über mein Einkommen zu freuen - das kommt selten vor!

Der Artikel ist einleitend - Sie haben Recht, alles was ich dort geschrieben habe - ich denke, es ist klar genug.

Der zweite Teil ist in der Moderation, er ist etwas interessanter. Im Moment habe ich es jedoch aufgegeben, meine eigene Methode zu beschreiben, und bin auf eine vereinfachte Version gekommen, die einen kleinen Effekt auf die Tests hatte. Sie wird im zweiten Teil beschrieben werden.

Dies ist jedoch der Fall, wenn neue Ideen nicht mehr als 5% des Textes einnehmen.

Kommen Sie wieder, um zu lesen und zu kommentieren, wenn Sie möchten.

Ich danke Ihnen für die Einladung. Natürlich habe ich den ersten Teil gelesen und werde auch den zweiten Teil lesen. Wenn Sie Gedanken zum Text haben, werde ich sie mitteilen.
 
Forester #:

Warum zufällig?
Gehen Sie alle Punkte einer Klasse durch und messen Sie den Abstand zu allen Punkten der anderen Klasse, wobei Sie den Mindestabstand ermitteln.
Wenn Sie alles erhalten haben, sortieren Sie, löschen Sie bis zum benötigten Abstand, jeweils ein Paar. Wenn der gelöschte Punkt in einem anderen Paar verwendet wurde, finden Sie einen neuen Punkt mit einem neuen Mindestabstand, sortieren erneut und fahren fort.
Vielleicht fällt Ihnen eine bessere Methode ein. Vielleicht ohne Sortierung - einfach auf den gewünschten Abstand löschen.

Uff, ich verstehe es wohl nicht richtig:

  1. Wir erstellen eine Matrix der Abstände - Länge und Breite der gleichen Größe wie die Anzahl der Beispiele in der Stichprobe.
  2. Wir erstellen eine neue, sagen wir binäre Matrix, in der die Einheiten die Punkte sind, die das Kriterium "Mindestabstand" erfüllen.
  3. So wie ich es verstehe, müssen wir hier die Anzahl der Punkte in der bedingten Insel zählen (die Einheiten in den Zeilen zusammenzählen), und wenn es mehr Punkte als in der benachbarten Insel gibt, und die Punkte zwischen ihnen aufgeteilt sind, dann ordnen wir diese Punkte dem Stapel (Cluster) zu, in dem es mehr solcher Punkte gibt. Legen Sie fest, dass dieser und jener Punkt zur Menge #n von Punkten gehört, und setzen Sie diese Punkte in der Matrix aus Schritt zwei auf Null.
  4. Fahren Sie mit der Nullsetzung fort, bis keine Punkte mehr vorhanden sind.

Habe ich den Prototyp des Algorithmus richtig verstanden?

Ich komme mit einer solchen Verzögerung auf das Thema zurück, weil mich die Idee fasziniert, dass Blätter in CatBoost-Modellen und in anderen Baum-Ensembles in der Aktivierung stark korreliert sein können, was ihr Vertrauen während des Trainings verzerrt und zu einer Überschätzung des Blattwerts für das Modell als Ganzes führt.

 
Aleksey Vyazmikin #:

Ich bin wohl ein wenig schwer von Begriff, denke ich:

  1. Wir erstellen eine Abstandsmatrix - Länge und Breite der gleichen Größe wie die Anzahl der Beispiele in der Stichprobe.
  2. Wir erstellen eine neue, sagen wir binäre Matrix, in der die Einheiten die Punkte sind, die das Kriterium "Mindestabstand" erfüllen.
  3. So wie ich es verstehe, müssen wir hier die Anzahl der Punkte in der bedingten Insel zählen (die Einheiten in den Zeilen zusammenzählen), und wenn es mehr Punkte als in der benachbarten Insel gibt, und die Punkte zwischen ihnen aufgeteilt sind, dann ordnen wir diese Punkte dem Stapel(Cluster) zu, in dem es mehr solcher Punkte gibt. Legen Sie fest, dass dieser und jener Punkt zur Menge #n von Punkten gehört, und setzen Sie diese Punkte in der Matrix aus Schritt zwei auf Null.
  4. Fahren Sie mit der Nullsetzung fort, bis keine weiteren Punkte mehr übrig sind.

Habe ich den Prototyp des Algorithmus richtig verstanden?

Ich komme mit einer solchen Verzögerung auf das Thema zurück, weil mich die Idee fasziniert, dass Blätter in CatBoost-Modellen und in anderen Baum-Ensembles in der Aktivierung stark korreliert sein können, was ihr Vertrauen während des Trainings verzerrt und zu einer Überschätzung des Blattwerts für das Modell als Ganzes führt.

Das Clustering hat damit nichts zu tun. Es entfernt lediglich die nächstgelegenen Punkte mit unterschiedlichen Klassen, die sich gegenseitig widersprechen, d. h. Rauschen. Und dann können Sie das Modell durch Clustering oder durch einen Baum trainieren - was immer Sie wollen.

1) Man kann auch eine Matrix verwenden, aber nicht notwendigerweise, sondern man muss sofort für jeden Punkt der Klasse 0 den nächstgelegenen Punkt der Klasse 1 finden, d.h. man erhält sofort Punkt 2.
3) nichts zählen und sich nicht auf Cluster beziehen, sondern nur Paare der nächstgelegenen Punkte entfernen. Wenn der Abstand kleiner als der Schwellenwert ist, würde der Schwellenwert in diesem Beispiel 0,6 betragen. Bei anderen Problemen werden wir ihn wahrscheinlich wählen müssen.
Wenn ein gelöschter Punkt der Klasse 1 mit einem anderen Punkt der Klasse 0 gepaart war, dann bleibt er ohne Paar, er muss einen neuen nächstgelegenen Punkt der Klasse 1 finden (wieder eine Berechnung machen oder eine Matrix verwenden, wie Sie in Punkt 1 vorgeschlagen haben, wenn der Speicherplatz ausreicht, ich denke, eine Matrix von 1 Million mal 1 Million wird in keinen Speicherplatz passen, bis zu 100 Tausend vielleicht).
4) nicht bis zum Rest, sondern bis zum Schwellenabstand. Wenn er sehr groß ist, dann bleiben nur Punkte von 1 der Klassen übrig, die ursprünglich mehr waren.

Aber wie ich schon schrieb, halte ich diese Rauschentfernung für keine gute Idee (siehe https://www.mql5.com/ru/forum/86386/page3324#comment_50171043). Es ist ja nicht so, dass man dieses Rauschen bei der Erstellung von Vorhersagen nicht entfernen kann. Der Baum selbst markiert verrauschte Blätter, indem er ihnen eine Wahrscheinlichkeit von etwa 50 % zuweist, und nimmt z. B. nicht verrauschte Blätter mit einer Wahrscheinlichkeit von >80 % für eine der Klassen (oder so viele, wie Sie für angemessen halten).

Машинное обучение в трейдинге: теория, модели, практика и алготорговля - На рыночных данных сигналы пропадают, потому что на новых данных сигналы выходят за узкий допустимый диапазон.
Машинное обучение в трейдинге: теория, модели, практика и алготорговля - На рыночных данных сигналы пропадают, потому что на новых данных сигналы выходят за узкий допустимый диапазон.
  • 2023.10.26
  • www.mql5.com
если в работу использовать листья с высокой чистотой классов и не делить листья до 1 примера в листе. остальные как то достигли чистоты листьев например 70 - вроде неплохо. Препочитаю дерево и лист с честными 53 чистоты одного из классов
 
Forester #:
Mit Clustern hat das nichts zu tun. Es geht nur darum, die nächstgelegenen Punkte mit unterschiedlichen Klassen zu entfernen, die sich widersprechen, d. h. Rauschen. Und dann können Sie Clustering oder einen Baum verwenden - was immer Sie trainieren wollen.
.

1) Man kann auch eine Matrix verwenden, aber nicht notwendigerweise, sondern man muss sofort für jeden Punkt der Klasse 0 den nächstgelegenen Punkt der Klasse 1 finden, d.h. man erhält sofort Punkt 2.
3) Zählen Sie nichts und beziehen Sie sich nicht auf Cluster, sondern entfernen Sie einfach Paare der nächstgelegenen Punkte. Wenn der Abstand kleiner als der Schwellenwert ist, würde der Schwellenwert in diesem Beispiel 0,6 betragen. Bei anderen Problemen werden wir ihn wahrscheinlich wählen müssen.
Wenn ein gelöschter Punkt der Klasse 1 mit einem anderen Punkt der Klasse 0 gepaart war, dann bleibt er ohne Paar, er muss einen neuen nächstgelegenen Punkt der Klasse 1 finden (wieder eine Berechnung machen oder eine Matrix verwenden, wie Sie in Punkt 1 vorgeschlagen haben, wenn der Speicherplatz ausreicht, ich denke, eine Matrix von 1 Million mal 1 Million wird in keinen Speicherplatz passen, bis zu 100 Tausend vielleicht).
4) nicht bis zum Rest, sondern bis zum Schwellenabstand. Wenn er sehr groß ist, dann bleiben nur Punkte von 1 der Klassen übrig, die ursprünglich mehr waren.

Aber wie ich schon schrieb, halte ich diese Rauschentfernung für keine gute Idee (siehe https://www.mql5.com/ru/forum/86386/page3324#comment_50171043). Es ist ja nicht so, dass man dieses Rauschen bei der Erstellung von Vorhersagen nicht entfernen kann. Der Baum selbst markiert verrauschte Blätter, indem er ihnen eine Wahrscheinlichkeit von etwa 50 % zuweist, und nimmt z. B. nicht verrauschte Blätter mit einer Wahrscheinlichkeit von >80 % für eine der Klassen (oder so viele, wie Sie für angemessen halten).

Ich kriege das noch nicht ganz in meinen Kopf. Nun, es passiert alles in einem Raum - in der Metrik eines Prädiktors, aber wie berücksichtigt man die anderen?

Was die Vorhersage betrifft, so dachte ich an die Verwendung von zwei Modellen - eines, das erkennt, was weggefallen ist, oder bestätigt, dass die Daten in der "Klumpen"-Region liegen, und das andere, das bereits mit dem arbeitet, was übrig ist.

 
Aleksey Vyazmikin #:

Ich kann mir das noch nicht erklären. Nun, es passiert alles in einem Raum - in der Metrik eines Prädiktors, aber wie können die anderen berücksichtigt werden?

Was die Vorhersage betrifft, so dachte ich an die Verwendung von zwei Modellen - eines erkennt, was eliminiert wurde oder bestätigt, dass die Daten im "Klumpen"-Bereich liegen, und das andere arbeitet bereits mit dem, was übrig ist.

https://www.mql5.com/ru/articles/9138

Seit einem Jahr kümmert sich niemand mehr darum

Ich habe ein Dutzend oder zwanzig solcher Algorithmen geschrieben, einige davon sind gut etabliert. Der im Artikel beschriebene ist nicht der beste, was die Stabilität der Ergebnisse angeht, der erste Pfannkuchen.

Es gibt also nichts zu diskutieren, weil es noch nichts Besseres gibt.


Метамодели в машинном обучении и трейдинге: Оригинальный тайминг торговых приказов
Метамодели в машинном обучении и трейдинге: Оригинальный тайминг торговых приказов
  • www.mql5.com
Метамодели в машинном обучении: Автоматическое создание торговых систем практически без участия человека — Модель сама принимает решение как торговать и когда торговать.
 
Ich bin neu bei ML. Ich arbeite an mehreren Modellen. Und in der letzten Woche ist ein Problem aufgetreten. Keines der Modelle wird in ONNX((( gespeichert. Wer hat dieses Problem schon einmal gehabt?
WARNING:tf2onnx.tf_loader:Could not search for non-variable resources. Concrete function internal representation may have changed.
ERROR:tf2onnx.tf_utils:pass1 convert failed for name: "model_3/lstm_4/PartitionedCall/while"
op: "StatelessWhile"
input: "model_3/lstm_4/PartitionedCall/while/loop_counter"
input: "model_3/lstm_4/PartitionedCall/while/maximum_iterations"
input: "model_3/lstm_4/PartitionedCall/time"
input: "model_3/lstm_4/PartitionedCall/TensorArrayV2_1"
input: "model_3/lstm_4/zeros"
input: "model_3/lstm_4/zeros_1"
input: "model_3/lstm_4/PartitionedCall/strided_slice"
input: "model_3/lstm_4/PartitionedCall/TensorArrayUnstack/TensorListFromTensor"
input: "Func/model_3/lstm_4/PartitionedCall/input/_3"
input: "Func/model_3/lstm_4/PartitionedCall/input/_4"
input: "Func/model_3/lstm_4/PartitionedCall/input/_5"
attr {
  key: "T"
  value {
    list {
      type: DT_INT32
      type: DT_INT32
      type: DT_INT32
      type: DT_VARIANT
      type: DT_FLOAT
      type: DT_FLOAT
      type: DT_INT32
      type: DT_VARIANT
      type: DT_FLOAT
      type: DT_FLOAT
      type: DT_FLOAT
    }
  }
}
attr {
  key: "_lower_using_switch_merge"
  value {
    b: false
  }
}
attr {
  key: "_num_original_outputs"
  value {
    i: 11
  }
}
attr {
  key: "_read_only_resource_inputs"
  value {
    list {
    }
  }
}
attr {
  key: "body"
  value {
    func {
      name: "while_body_149241"
    }
  }
}
attr {
  key: "cond"
  value {
    func {
      name: "while_cond_149240"
    }
  }
}
attr {
  key: "output_shapes"
  value {
    list {
      shape {
      }
      shape {
      }
      shape {
      }
      shape {
      }
      shape {
        dim {
          size: -1
        }
        dim {
          size: 128
        }
      }
      shape {
        dim {
          size: -1
        }
        dim {
          size: 128
        }
      }
      shape {
      }
      shape {
      }
      shape {
        dim {
          size: 1
        }
        dim {
          size: 512
        }
      }
      shape {
        dim {
          size: 128
        }
        dim {
          size: 512
        }
      }
      shape {
        dim {
          size: 512
        }
      }
    }
  }
}
attr {
  key: "parallel_iterations"
  value {
    i: 32
  }
}
, ex=Could not infer attribute `_read_only_resource_inputs` type from empty iterator
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-7-50 ef5b7ad3f4> in <cell line: 87>()
     85 
     86 # Преобразовать Keras-модель в ONNX формат
---> 87 onnx_model = tf2onnx.convert.from_keras(model)
     88 
     89 # Сохранить модель в формате ONNX

8 frames
/usr/local/lib/python3.10/dist-packages/onnx/helper.py in make_attribute(key, value, doc_string, attr_type)
    874         value = list(value)
    875         if len(value) == 0 and attr_type is None:
--> 876             raise ValueError(
    877                 f"Could not infer attribute `{key}` type from empty iterator"
    878             )

ValueError: Could not infer attribute `_read_only_resource_inputs` type from empty iterator