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

 
Ho scritto questo codice in uno script e l'ho eseguito alcune volte, ottenendo risultati leggermente diversi di volta in volta...
 
Vizard_:

set.seed(1234)

Cos'è e dove lo metto?

 
Mihail Marchukajtes:

che è più di metà della battaglia... è così....

Il 90%, e i modelli sono una questione di tecnica, il caret è pieno di questa roba con la giusta legatura.

 

Ecco un esempio anche con vtreat,

Generalmente si tratta di una pre-elaborazione dei dati, ma può essere usata come una stima di ogni predittore rispetto all'obiettivo. Non mi piace che il pacchetto non tenga conto delle interazioni tra predittori, usa il codice solo se hai abbastanza per stimare i predittori uno alla volta rispetto all'obiettivo.

forexFeatures <- read.csv2("Qwe.txt", dec=".")
forexFeatures <- forexFeatures[,-1]

library(vtreat)


#designTreatmentsC  подходит только для классификации с двумя классами
treatmentsC <- designTreatmentsC(dframe = forexFeatures,
                                 varlist=colnames(forexFeatures)[-ncol(forexFeatures)], #названия  колонок с предикторами (тут - все кроме последней колонки)
                                 outcomename = colnames(forexFeatures)[ncol(forexFeatures)], #названия  колонок с таргетом (тут - последняя колонка)
                                 outcometarget = "1") #текст  или цифра одного из классов
#обработка,  сортировка результата
treatmensC_scores <- treatmentsC$scoreFrame[order(treatmentsC$scoreFrame$sig),]
treatmensC_scores <- treatmensC_scores[!duplicated(treatmensC_scores$origName),]
treatmensC_scores <- treatmensC_scores[,c("origName","sig")] 
treatmensC_scores$is_good <- treatmensC_scores$sig <= 1/nrow(forexFeatures)
treatmensC_scores #вывод на экран таблички результатов. Лучшие предикторы вверху таблицы. Чем оценка sig меньше тем лучше. Желательно (колонка is_good==TRUE) чтоб sig была меньше чем 1/nrow(forexFeatures), всё что больше - плохо 


#designTreatmentsN подходит для регрессии или если больше двух классов. Если всего два класса то предпочтительнее использовать C функцию, она вроде как и коррелирующие предикторы убирает заодно.
treatmentsN <- designTreatmentsN(dframe = forexFeatures,
                                 varlist=colnames(forexFeatures)[-ncol(forexFeatures)], #названия колонок с предикторами (тут - все кроме последней колонки)
                                 outcomename = colnames(forexFeatures)[ncol(forexFeatures)]) #названия колонок с таргетом (тут - последняя колонка)
#обработка, сортировка результата
treatmensN_scores <- treatmentsN$scoreFrame[order(treatmentsN$scoreFrame$sig),]
treatmensN_scores <- treatmensN_scores[!duplicated(treatmensN_scores$origName),]
treatmensN_scores <- treatmensN_scores[,c("origName","sig")] 
treatmensN_scores$is_good <- treatmensN_scores$sig <= 1/nrow(forexFeatures)
treatmensN_scores #вывод на экран таблички результатов. Лучшие предикторы вверху таблицы. Чем оценка sig меньше тем лучше. Желательно (колонка is_good==TRUE) чтоб sig была меньше чем 1/nrow(forexFeatures), всё что больше - плохо

 
Mihail Marchukajtes:
Cos'è e dove lo metto?

set.seed imposta il seme iniziale del generatore di numeri casuali. Se lo impostate sullo stesso stato (come 1234) prima dell'esecuzione del codice, allora il codice seguente sarà eseguito allo stesso modo in tutti i casi.

read.csv2(... ecc.
set.seed(1234)
Boruta(TargetProf... ecc.)

Ma forse l'algoritmo ha bisogno di più iterazioni (maxRuns = 1000000 per esempio), non entra in un numero così piccolo come per default e si ferma a metà strada.

 

Ho pensato alla regressione....
La regressione nei mercati finanziari non è una funzione liscia, ma piuttosto una funzione a gradini con incrementi di 1 punto. (sia per l'insegnante che per la previsione). Se per esempio limitiamo il movimento a +/- 100 pt, allora c'è un'analogia con la classificazione in 200 classi. Così nell'output prevediamo la classe più probabile - per esempio +22 pt.
Non significa che per ottenere buoni risultati la struttura/complessità del modello (numero di neuroni) per la regressione dovrebbe essere 200 volte più grande? Beh, se aumentiamo il passo a 5 pt, allora 40 volte sarebbe un po' più economico al costo di una minore precisione.

 
Ho fatto passare il file attraverso vtreat, certo non molto. Solo 4 ingressi selezionati. Grazie per il suggerimento..... continuerò a girare....
 
Vizard_:

Ora richiamate il boxplot, fate qualcosa con gli input ed eseguitelo di nuovo.

Il parametro set.seed è lo stesso in entrambi i casi.

Cosa vuoi che faccia per gli ingressi?

Sì..... ammetto che mi aspettavo di meglio dai miei input. Comunque, pensavo che ce ne sarebbero stati di più importanti, certamente non quattro su 100. Con così tanti input i modelli risultano troppo piccoli, anche se ho notato dalla pratica che più semplice è il modello, meglio funziona. E guardando il modello e facendo i miei test ho capito che questa piccola merda è dannatamente buona..... È troppo presto per trarre conclusioni, sono necessari altri test. Continua a scavare....

 
Ovunque sono stato
forexFeatures <- read.csv2("Qwe.txt")

in realtà devi farlo.
forexFeatures <- read.csv2("Qwe.txt", dec=".")

Scusa, ho sbagliato il formato del tuo file. Correggo i vecchi post. Eseguite nuovamente il codice, i risultati dovrebbero essere migliori, altrimenti tutti i numeri con frazioni decimali sono stati elaborati in modo sbagliato.
 
Mihail Marchukajtes:

Cosa fare con gli ingressi?

Per esempio, jPrediction scala i dati all'intervallo [-1;1] e impara su questi numeri. Potete anche scalare allo stesso intervallo in R prima di valutare gli input.

forexFeatures <- read.csv2("Qwe.txt", dec=".")

for(i in 1:(ncol(forexFeatures)-1)){
  forexFeatures[,i] <- (forexFeatures[,i] - min(forexFeatures[,i]))/(max(forexFeatures[,i])-min(forexFeatures[,i]))*2-1
}

vtreat, Boruta, etc,...

I metodi di stima basati sugli alberi probabilmente non cambieranno il risultato, le foreste non si preoccupano veramente in quale intervallo sono arrivati i dati, ma è meglio controllare. Anche vtreat non è schizzinoso riguardo all'intervallo.


Ma in generale, sta parlando di una trasformazione non lineare degli input anche prima dell'alimentazione nei neuroni. Neuronics è molto sensibile agli input, e se si elaborano i dati di input in qualche modo speciale, i suoi risultati possono migliorare. Per esempio ho sentito un trucco del genere: convertire gli ingressi tramite sigmoide.

Motivazione: