L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 3332

 
Forester #:
Signori! Non state confondendo l'argomento? Sarebbe bene ripulire 2-3 pagine dagli offtopic.
L'articolo di Alexey è stato pubblicato un'ora fa, leggetelo.
Penso che abbiamo già discusso della sua quantificazione a tempo debito da tutte le parti. Posso solo aggiungere a quello che ho detto prima che sono contento per lui che gli abbia portato almeno 200 dollari.
 
Aleksey Nikolayev #:
Credo che abbiamo già discusso della sua quantificazione nel tempo da tutti i punti di vista. Posso solo aggiungere a ciò che ho detto prima che sono felice per lui che gli abbia portato almeno 200 dollari.

Il suo ramoscello? Oggi hai espresso un sacco di fabulazioni filosofiche e non solo, fuori tema (flud), e cosa chiami "non rispettare i propri principi"?
Inoltre, come chiamerebbero Kant e Diogene, e forse Aristotele e Pitagora, una persona che si sballa umiliando, insultando e sminuendo le virtù e i risultati di un'altra persona?
 
Aleksey Nikolayev #:
Credo che abbiamo già discusso della sua quantificazione nel tempo da tutti i punti di vista. Posso solo aggiungere a quello che ho detto prima che sono felice per lui che gli abbia portato almeno 200 dollari.

Grazie, è bello essere felici per le proprie entrate - è raro!

L'articolo è introduttivo - hai ragione, tutto quello che ho scritto lì - penso, e così chiaro.

La seconda parte è in moderazione, è un po' più interessante. Tuttavia, al momento ho rinunciato a descrivere il mio metodo e ho trovato una versione semplificata, che ha dato un piccolo effetto sui test. Verrà descritto nella seconda parte.

Tuttavia, questo è il caso in cui le nuove idee non occupano più del 5% del testo.

Tornate a leggere e a commentare se volete.

 
Andrey Dik #:

h ttps:// www.mql5.com/ru/forum/309270
Il tuo thread? Oggi hai fatto un sacco di riflessioni filosofiche e altre off-topic (flud), e cosa chiami "non rispettare i propri principi"?
Inoltre, come definirebbero Kant e Diogene, e forse Aristotele e Pitagora, una persona che si eccita umiliando, insultando e sminuendo le virtù e i risultati di un'altra persona?

Non so a quale Diogene ti riferisci, ma nel senso di trollare siamo tutti bambini rispetto a Diogene di Sinope o Diogene di Laerte.

Se guardi le date del mio thread, la mia registrazione alla risorsa e quella di oggi, sarà più chiaro. Due anni dopo la registrazione c'era ancora speranza di un dialogo costruttivo e utile sul forum, e sei anni e mezzo dopo non c'è quasi più speranza. Solo per divertimento.

 
Aleksey Vyazmikin #:

Ecco a voi grazie, è bello essere felici per le mie entrate - un evento raro!

L'articolo è introduttivo - hai ragione, tutto quello che ho scritto lì - penso sia abbastanza chiaro.

La seconda parte è in fase di moderazione, è un po' più interessante. Tuttavia, al momento ho rinunciato a descrivere il mio metodo e ho trovato una versione semplificata, che ha dato un piccolo effetto sui test. Verrà descritto nella seconda parte.

Tuttavia, questo è il caso in cui le nuove idee non occupano più del 5% del testo.

Tornate a leggere e a commentare se volete.

Grazie per l'invito. Naturalmente ho letto la prima parte e leggerò anche la seconda. Se ci sono riflessioni sul testo, le condividerò.
 
Forester #:

Perché a caso?
Si percorrono tutti i punti di una classe e si misura la distanza da tutti i punti dell'altra classe, prendendo la distanza minima.
Quando tutto è stato ottenuto, si ordina, si cancella fino alla distanza necessaria, una coppia alla volta. Se il punto cancellato è stato usato in un'altra coppia, si trova un nuovo punto con una nuova distanza minima, si ordina di nuovo e si continua.
Forse si può pensare a un modo migliore. Magari senza ordinare: basta cancellare fino alla distanza richiesta.

Credo di non aver capito bene:

  1. Costruiamo una matrice di distanze - lunghezza e larghezza della stessa dimensione del numero di esempi nel campione.
  2. Costruiamo una nuova matrice, diciamo binaria, dove le unità sono i punti che soddisfano il criterio "distanza minima".
  3. A quanto ho capito, qui dobbiamo contare il numero di punti nell'isola condizionale (sommare le unità nelle righe), e se ci sono più punti che nell'isola vicina, e i punti sono divisi tra loro, allora assegnare questi punti alla pila (cluster) dove ci sono più punti di questo tipo. Fissare che il tal punto appartiene all'insieme #n di punti e azzerare questi punti nella matrice del punto due.
  4. Continuare ad azzerare fino a quando non ci sono più punti.

Ho capito bene il prototipo dell'algoritmo?

Torno sull'argomento con questo ritardo perché sono un po' affascinato dall'idea che le foglie nei modelli CatBoost e in altri insiemi di alberi possano essere fortemente correlate nell'attivazione, il che distorce la loro fiducia durante l'addestramento, portando a una sovrastima del valore delle foglie per il modello nel suo complesso.

 
Aleksey Vyazmikin #:

Eh, sono un po' lento a capire, credo:

  1. Costruiamo una matrice di distanze - lunghezza e larghezza della stessa dimensione del numero di esempi nel campione.
  2. Costruiamo una nuova matrice, diciamo binaria, dove le unità sono i punti che soddisfano il criterio della "distanza minima".
  3. A quanto ho capito, qui dobbiamo contare il numero di punti nell'isola condizionale (sommare le unità nelle righe), e se ci sono più punti che nell'isola vicina, e i punti sono divisi tra loro, allora assegnare questi punti alla pila(cluster) dove ci sono più punti di questo tipo. Fissare che il tal punto appartiene all'insieme #n di punti e azzerare questi punti nella matrice del punto due.
  4. Continuare ad azzerare fino a quando non ci sono più punti.

Ho capito bene il prototipo dell'algoritmo?

Torno sull'argomento con questo ritardo, perché sono un po' affascinato dall'idea che le foglie nei modelli CatBoost e in altri ensemble di alberi possano essere fortemente correlate nell'attivazione, il che distorce la loro fiducia durante l'addestramento, portando a una sovrastima del valore della foglia per il modello nel suo complesso.

Il clustering non ha nulla a che fare con questo. Si tratta solo di rimuovere i punti più vicini con classi diverse che si contraddicono a vicenda, cioè il rumore. Poi si può addestrare il modello con il clustering o con l'albero, come si vuole.

1) Si può anche usare una matrice, ma non necessariamente, ma trovare immediatamente per ogni punto di classe 0 il punto più vicino di classe 1, cioè otteniamo subito il punto 2.
3) non contare nulla e non fare riferimento ai cluster, ma solo rimuovere le coppie di punti più vicini. Con una distanza inferiore alla soglia, in questo esempio la soglia sarebbe 0,6. In altri problemi probabilmente dovremo selezionarla.
Se un punto cancellato di 1 classe era accoppiato con un altro punto di 0 classe, allora rimane senza coppia, deve trovare un nuovo punto più vicino di 1 classe (ancora una volta fare un calcolo o usare una matrice, come suggerito al punto 1, se la memoria è sufficiente, penso che una matrice di 1milione per 1milione non entrerà in nessuna memoria, fino a 100mila forse).
4) non fino a quando rimane, ma fino alla distanza di soglia. Se è molto grande, rimarranno solo i punti di 1 delle classi che inizialmente erano di più.

Ma come ho scritto prima, non credo che questa rimozione del rumore sia una buona idea (vedi https://www.mql5.com/ru/forum/86386/page3324#comment_50171043). Non è che non si possa rimuovere il rumore quando si fanno le previsioni. L'albero stesso contrassegnerà le foglie rumorose dando loro una probabilità di circa il 50%, e prenderà ad esempio le foglie non rumorose con una probabilità di una delle classi >80% (o quante ne ritenete opportune).

Машинное обучение в трейдинге: теория, модели, практика и алготорговля - На рыночных данных сигналы пропадают, потому что на новых данных сигналы выходят за узкий допустимый диапазон.
Машинное обучение в трейдинге: теория, модели, практика и алготорговля - На рыночных данных сигналы пропадают, потому что на новых данных сигналы выходят за узкий допустимый диапазон.
  • 2023.10.26
  • www.mql5.com
если в работу использовать листья с высокой чистотой классов и не делить листья до 1 примера в листе. остальные как то достигли чистоты листьев например 70 - вроде неплохо. Препочитаю дерево и лист с честными 53 чистоты одного из классов
 
Forester #:
I cluster non hanno nulla a che fare con questo. Si tratta solo di rimuovere i punti più vicini con classi diverse che si contraddicono a vicenda, ovvero il rumore. E poi si può usare il clustering, o l'albero - qualsiasi cosa si voglia addestrare.
.

1) Si può anche usare una matrice, ma non necessariamente, ma trovare immediatamente per ogni punto di classe 0 il punto più vicino di classe 1, cioè otteniamo subito il punto 2.
3) non contare nulla e non fare riferimento ai cluster, solo rimuovere le coppie di punti più vicini. Con una distanza inferiore alla soglia, in questo esempio la soglia sarebbe 0,6. In altri problemi probabilmente dovremo selezionarla.
Se un punto cancellato di 1 classe era accoppiato con un altro punto di 0 classe, allora rimane senza coppia, deve trovare un nuovo punto più vicino di 1 classe (ancora una volta fare un calcolo o usare una matrice, come suggerito al punto 1, se la memoria è sufficiente, penso che una matrice di 1milione per 1milione non entrerà in nessuna memoria, fino a 100mila forse).
4) non fino a quando rimane, ma fino alla distanza di soglia. Se è molto grande, rimarranno solo i punti di 1 delle classi che inizialmente erano di più.

Ma come ho scritto prima, non credo che questa rimozione del rumore sia una buona idea (vedi https://www.mql5.com/ru/forum/86386/page3324#comment_50171043). Non è che non si possa rimuovere il rumore quando si fanno le previsioni. L'albero stesso contrassegnerà le foglie rumorose dando loro una probabilità di circa il 50%, e prenderà ad esempio le foglie non rumorose con una probabilità di una delle classi >80% (o quante ne ritenete opportune).

Non riesco ancora a capire bene come funziona. Bene, tutto avviene in un unico spazio - nella metrica di un predittore, ma come prendere in considerazione gli altri?

Per quanto riguarda la previsione, pensavo di utilizzare due modelli: uno che rilevi ciò che è stato abbandonato o che confermi che i dati si trovano nella regione del "clumping", e l'altro che lavori già su ciò che è rimasto.

 
Aleksey Vyazmikin #:

Non riesco ancora a capire come funziona. Tutto si svolge in un unico spazio, nella metrica di un solo predittore, ma come prendere in considerazione gli altri?

Per quanto riguarda la previsione, pensavo di utilizzare due modelli: uno rileva ciò che è stato eliminato o conferma che i dati si trovano nell'area di "raggruppamento", mentre l'altro lavora già su ciò che è rimasto.

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

Nessuno si preoccupa da un anno a questa parte

Ho scritto una dozzina o una ventina di algoritmi come questo, alcuni sono ben consolidati. Quello riportato nell'articolo non è il migliore in termini di stabilità dei risultati, il primo pancake.

Quindi non c'è nulla da discutere, perché non c'è ancora nulla di meglio.


Метамодели в машинном обучении и трейдинге: Оригинальный тайминг торговых приказов
Метамодели в машинном обучении и трейдинге: Оригинальный тайминг торговых приказов
  • www.mql5.com
Метамодели в машинном обучении: Автоматическое создание торговых систем практически без участия человека — Модель сама принимает решение как торговать и когда торговать.
 
Sono nuovo della ML. Sto lavorando su diversi modelli. E nell'ultima settimana è apparso un problema. Nessuno dei modelli viene salvato in ONNX((((. Chi ha riscontrato questo problema?
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