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

 
elibrario:
Se iniziate qualcosa per un mese - usate un'alimentazione ininterrotta per il vostro computer, una volta ho avuto 2 settimane di calcoli, la luce era spenta))
E la versione GPU non si aspetta molto, riscrivere il codice mi sembra più lungo e se l'autore non l'ha fatto, è improbabile che qualcun altro finisca questo compito fino alla fine.

Bene, l'autore ha messo tutto in parallelo, ora devo solo eseguirlo. Comunque, ho massimizzato la corsa per 3 giorni e ho ottenuto un modello con 9 ingressi, che è un record per me ora ad essere onesti. Non voglio davvero ottimizzarlo per così tanto tempo. Ma come si dice. Il mercato lo richiede. Pertanto, alla ricerca di capacità, se qualcuno ha l'opportunità di ottimizzare dataset sull'ottimizzatore, e anche su 20-30 core, sarei molto grato.
 

Mihail Marchukajtes:

giorni di apprendimento, settimane.

Apparentemente il tuo algoritmo non è ottimale, su dataset così piccoli puoi tranquillamente usare algoritmi bruteforcing come Knn, che sono quasi ottimali, se l'algoritmo è più lento di Knn è probabilmente un cattivo algoritmo ML o mal configurato. Su un tale set di dati, l'intero ciclo di allenamento e l'esecuzione dell'intero set non dovrebbero richiedere più di un secondo.
 
panturale:
Apparentemente il tuo algoritmo non è ottimale, su dataset così piccoli, puoi tranquillamente usare algoritmi bruteforcing come Knn, che sono quasi ottimali, se l'algoritmo è più lento di Knn, probabilmente è un cattivo algoritmo ML o mal configurato. Su tale set di dati, l'intero ciclo di allenamento e l'esecuzione dell'intero set non dovrebbero richiedere più di un secondo.

L'ho spiegato sopra. 100 spaccature ogni spaccatura è addestrata 1000 epoche ecc. L'essenza dell'ottimizzatore è calcolare il set di dati in modo che non ci siano domande sulla sua idoneità. Cioè lui fa girare questo file su e giù in modo figurato, e tu continui a paragonarlo a un singolo allenamento di un singolo neurone. IMHO. È essenzialmente un sistema di intelligenza artificiale in cui tutti i tipi di ottimizzazione e pre-elaborazione avvengono insieme all'addestramento dei neuroni, e l'addestramento stesso viene eseguito centinaia di volte. Se qualcosa....
 
Mihail Marchukajtes:

L'ho spiegato sopra. 100 split, ogni split è addestrato per 1000 epoche, ecc. Sei solo fissato su un singolo allenamento di un neurone, mentre l'essenza dell'ottimizzatore è calcolare il dataset in modo che non ci siano domande sulla sua idoneità. Cioè lui fa girare questo file su e giù in modo figurato, e tu continui a paragonarlo a un singolo addestramento di un neurone. IMHO. È essenzialmente un sistema di intelligenza artificiale in cui tutti i tipi di ottimizzazione e pre-elaborazione avvengono insieme all'addestramento dei neuroni, e l'addestramento stesso viene eseguito centinaia di volte. Se qualcosa....
Io sono generalmente contro tutto questo addestramento, ma la tua macchina è sicuramente un somaro che l'ha inventata, anche io posso capirlo.
 
elibrario:
MLP indovina il 95% delle volte... Non credo che tu stia facendo la moto giusta) Senza offesa.

Avete un errore.
La primissima colonna della tabella è il numero di riga, e questa colonna non può essere usata nella predizione, ma è richiesta solo per jPrediction per qualche motivo.

L'obiettivo è distribuito in modo che la prima metà delle linee sia di classe 0, e la seconda metà delle linee sia di classe 1. Quindi il neurone ricorda semplicemente che se il numero di linea è inferiore a 228 è di classe 0, altrimenti è di classe 1.

 
Ildottor Trader:

Avete un errore.
La primissima colonna della tabella è un numero di riga e non si può usare questa colonna nella predizione, ma è obbligatoria solo per jPrediction per qualche motivo.

L'obiettivo è distribuito in modo che la prima metà delle linee sia di classe 0, e la seconda metà delle linee sia di classe 1. Quindi, il neurone ricorda semplicemente che se il numero di linea è inferiore a 228, è di classe 0, altrimenti è di classe 1.

Oh, a proposito, sì. Non ha notato che è solo un numero.

Senza di esso Ingressi da tenere: 4,50,53,59,61,64,92,98,101,104,

Errore medio in formazione (60,0%) =0,269 (26,9%) nLearns=2 NGrad=7376 NHess=0 NCholesky=0 codResp=2
Errore medio sulla convalida (20,0%) trama =0,864 (86,4%) nLearns=2 NGrad=7376 NHess=0 NCholesky=0 codResp=2
Errore medio sul test (20,0%) trama =0,885 (88,5%) nLearns=2 NGrad=7376 NHess=0 NCholesky=0 codResp=2

Chiaramente sovrallenamento. Quindi ho bisogno di vagliare gli input in modo diverso.

Forse setacciare in base al peso degli input? Come hai fatto per il problema nel primo post del thread...

Sto cercando di riscrivere il tuo script R allegato, in modo che possa determinare i nomi e il numero di colonne... ma non conosco abbastanza R.

 
elibrario:

Sto cercando di riscrivere lo script R che hai allegato, in modo che determini i nomi e il numero di colonne... ma non conosco abbastanza R.


Stavo ancora iniziando a imparare R allora, lo script è quasi interamente generato in rattle (ambiente visivo per il datamining in R), ecco perché è così complesso e personalizzato per tutte le occasioni.


Questo...

crs$input <- c("input_1", "input_2", "input_3", "input_4",
     "input_5", "input_6", "input_7", "input_8",
     "input_9", "input_10", "input_11", "input_12",
     "input_13", "input_14", "input_15", "input_16",
     "input_17", "input_18", "input_19", "input_20")

crs$numeric <- c("input_1", "input_2", "input_3", "input_4",
     "input_5", "input_6", "input_7", "input_8",
     "input_9", "input_10", "input_11", "input_12",
     "input_13", "input_14", "input_15", "input_16",
     "input_17", "input_18", "input_19", "input_20")

dovrebbe essere cambiato in...

crs$input <- colnames(crs$dataset)[-ncol(crs$dataset)]

crs$numeric <- crs$input

E dovrebbe andare bene.


In generale, è un cattivo approccio, non si dovrebbe definire l'importanza degli input in questo modo. Per qualche motivo ha funzionato quella volta, ma non mi ha più aiutato.

 

È meglio definire l'importanza dei predittori come segue

library(vtreat)

sourceTable <- read.table("BuySell.csv", sep=";", header = TRUE, stringsAsFactors = FALSE)

#Эта  строка кода относится только к конкретно этому файлу.
 этом csv первая колонка и первая строка специально заполнены для конкретной модели, и тут не нужны. Удалить.
#для  обычных csv файлов такую команду выполнять не нужно.
sourceTable <- sourceTable[-1,-1]

#число колонок
sourceTable_ncol <- ncol(sourceTable)

#Оценка  для классификации, только для двух классов.
#Outcometarget  должен быть равен значению одного из классов.
#На  выбор или эта функция designTreatmentsC, или designTreatmentsN, или designTreatmentsZ (ниже, закоменчены)
#Взаимная  корреляция предкиторов учитывается только в designTreatmentsC, и у повторяющихся или похожих предикторов оценка будет понижаться
set.seed(0)
treats <- designTreatmentsC(dframe = sourceTable,
                            varlist = colnames(sourceTable)[-sourceTable_ncol],
                            outcomename = colnames(sourceTable)[sourceTable_ncol],
                            outcometarget = 1,
                            verbose = FALSE
)

# #оценка  для регрессии или если больше двух классов
#  sourceTable[,sourceTable_ncol] <- as.numeric(sourceTable[,sourceTable_ncol])
#  set.seed(0)
#  treats <- designTreatmentsN(dframe = sourceTable,
#                              varlist = colnames(sourceTable)[-sourceTable_ncol],
#                              outcomename = colnames(sourceTable)[sourceTable_ncol],
#                              verbose = FALSE
# )

# #Оценка  предикторов без учёта цели.
#  set.seed(0)
#  treats <- designTreatmentsZ(dframe = sourceTable,
#                              varlist = colnames(sourceTable)[-sourceTable_ncol],
#                              verbose = FALSE
# )
# 




#табличка  только с названием колонки и её оценкой важности
resultTable <- treats$scoreFrame[,c("varName", "sig")]

#сортировка
 resultTable <- resultTable[order(resultTable$sig),]

#согласно  общему правилу, оценка предиктора (sig) должна быть меньше 1/<общее число предикторов>
#чем  оценка меньше, тем лучше
resultTable$testPassed <- resultTable$sig < 1/(sourceTable_ncol-1)

#для  создания модели и прогноза лучше использовать только те предкторы у которых testPassed == TRUE
resultTable
 

I risultati della valutazione dell'importanza sono i seguenti. Più alto è il predittore nella tabella, meglio è. SoloVVolum6, VDel1, VVolum9, VQST10 hanno superato il test.

In rattle possiamo costruire 6 modelli contemporaneamente su questi 4 predittori e SVM mostra un'accuratezza di circa il 55% sui dati di validazione e test. Non male.

             varName sig testPassed 182 VVolum6_catB 3.220305e-06 TRUE 28 VDel1_catB 1.930275e-03 TRUE 186 VVolum9_catB 5.946373e-03 TRUE 143 VQST10_catB 8.458616e-03 TRUE 126 VQST_catB 1.843740e-02 FALSE 23 Del11_catP 2.315340e-02 FALSE 147 Volum_catP 2.331145e-02 FALSE 24 Del11_catB 2.429723e-02 FALSE 154 Volum3_catB 2.985041e-02 FALSE 12 Del5_catP 3.689965e-02 FALSE 120 QST9_catB 4.092966e-02 FALSE 130 VQST2_catB 4.136235e-02 FALSE 163 Volum9_catP 4.299684e-02 FALSE 109 QST2_catB 4.311742e-02 FALSE 32 VDel3_catB 4.704981e-02 FALSE 11 Del5_lev_x.1 4.725332e-02 FALSO 19 Del9_catB 5.316355e-02 FALSO 13 Del5_catB 5.472078e-02 FALSO 178 VVolum4_catB 5.705614e-02 FALSE 191 VVolum11_catB 5.749245e-02 FALSE 148 Volum_catB 6.281945e-02 FALSE 181 VVolum6_catP 6.534487e-02 FALSE 31 VDel3_catP 6.911261e-02 FALSO 74 VST11_catB 7.709038e-02 FALSO 134 VQST4_catB 9.536026e-02 FALSO 141 VQST9_catB 9.536026e-02 FALSO 162 Volum7_catB 9.589108e-02 FALSE 107 QST1_catB 9.589108e-02 FALSE 2 Del_catB 1.049703e-01 FALSE 151 Volum2_catP 1.071203e-01 FALSE 60 ST11_catB 1.076877e-01 FALSO 43 VDel10_catP 1.201338e-01 FALSO 184 VVolum7_catB 1.286891e-01 FALSO 121 QST10_catP 1.464880e-01 FALSO 38 VDel6_catB 1.479268e-01 FALSE 173 VVolum2_catP 1.663695e-01 FALSE 8 Del3_catB 1.703652e-01 FALSE 10 Del4_catB 1.755150e-01 FALSE 30 VDel2_catB 1.781568e-01 FALSE 37 VDel6_catP 1.797087e-01 FALSE 1 Del_catP 1.995316e-01 FALSE 112 QST4_catP 2.104902e-01 FALSE 15 Del6_catB 2.132517e-01 FALSO 27 VDel1_catP 2.313270e-01 FALSO 41 VDel9_catP 2.316597e-01 FALSO 100 VAD11_catP 2.320692e-01 FALSO 144 VQST11_lev_x.100 2.374690e-01 FALSE 123 QST11_catP 2.576971e-01 FALSE 145 VQST11_catP 2.626389e-01 FALSE 104 QST_catP 2.716664e-01 FALSE 160 Volum6_catB 2.776463e-01 FALSE 115 QST6_catP 3.034207e-01 FALSE 137 VQST6_catB 3.060767e-01 FALSE 102 QST_lev_x.100 3.061104e-01 FALSE 36 VDel5_catB 3.149911e-01 FALSE 99 VAD11_lev_x.0 3.340276e-01 FALSE 17 Del7_catB 3.431346e-01 FALSE 16 Del7_catP 3.819094e-01 FALSE 3 Del1_catP 3.912432e-01 FALSE 152 Volum2_catB 3.938369e-01 FALSE 44 VDel10_catB 3.965567e-01 FALSE 5 Del2_catP 4.363645e-01 FALSE 20 Del10_catP 4.409282e-01 FALSE 171 VVolum1_catP 4.550495e-01 FALSE 169 VVolum_catP 4.682515e-01 FALSE 46 VDel11_catP 4.693330e-01 FALSE 86 AD11_catP 4.742976e-01 FALSE 187 VVolum10_catP 4.963890e-01 FALSE 132 VQST3_catP 5.291401e-01 FALSE 14 Del6_catP 5.310502e-01 FALSE 124 QST11_catP 5.355186e-01 FALSE 177 VVolum4_catP 5.542335e-01 FALSE 150 Volum1_catP 5.552986e-01 FALSE 39 VDel7_catP 5.589613e-01 FALSE 185 VVolum9_catP 5.589901e-01 FALSE 59 ST11_catP 5.669251e-01 FALSE 188 VVolum10_catB 5.680089e-01 FALSE 21 Del10_catB 5.706515e-01 FALSE 9 Del4_catP 5.708557e-01 FALSE 142 VQST10_catP 5.725309e-01 FALSE 113 QST4_catB 5.856434e-01 FALSE 119 QST9_catP 5.922916e-01 FALSE 131 VQST3_catP 6.033950e-01 FALSE 168 Volum11_catB 6.156530e-01 FALSE 155 Volum4_catP 6.196455e-01 FALSE 170 VVolum_catB 6.244269e-01 FALSE 180 VVolum5_catB 6.279081e-01 FALSE 87 AD11_catB 6.372863e-01 FALSE 153 Volum3_catP 6.641713e-01 FALSE 73 VST11_catP 6.701117e-01 FALSE 172 VVolum1_catB 6.707140e-01 FALSE 183 VVolum7_catP 6.771533e-01 FALSE 55 ST6_catB 6.780044e-01 FALSE 42 VDel9_catB 6.925700e-01 FALSE 167 Volum11_catP 6.973599e-01 FALSE 179 VVolum5_catP 7.093678e-01 FALSE 125 VQST_catP 7.189573e-01 FALSE 146 VQST11_catB 7.195859e-01 FALSE 101 VAD11_catB 7.250369e-01 FALSE 25 VDel_catP 7.310211e-01 FALSE 108 QST2_catP 7.426980e-01 FALSE 29 VDel2_catP 7.486648e-01 FALSE 136 VQST6_catP 7.529104e-01 FALSE 103 QST_lev_x.0 7.600202e-01 FALSE 22 Del11_lev_x.0 7.600202e-01 FALSE 47 VDel11_catB 7.619000e-01 FALSE 140 VQST9_catP 7.684919e-01 FALSE 164 Volum9_catB 7.743767e-01 FALSE 4 Del1_catB 7.796789e-01 FALSE 158 Volum5_catB 7.804397e-01 FALSE 117 QST7_catP 7.843659e-01 FALSE 26 VDel_catB 7.904299e-01 FALSE 166 Volum10_catB 7.936121e-01 FALSE 165 Volum10_catP 8.017445e-01 FALSE 6 Del2_catB 8.104867e-01 FALSE 190 VVolum11_catP 8.133908e-01 FALSE 45 VDel11_lev_x 8.231377e-01 FALSE 189 VVolum11_lev_x.0 8.231377e-01 FALSE 105 QST_catB 8.431046e-01 FALSE 174 VVolum2_catB 8.506238e-01 FALSE 81 AD6_catP 8.552222e-01 FALSE 94 VAD6_catP 8.552222e-01 FALSE 110 QST3_catP 8.560370e-01 FALSE 35 VDel5_catP 8.633955e-01 FALSE 122 QST10_catB 8.651814e-01 FALSE 18 Del9_catP 8.816989e-01 FALSE 34 VDel4_catB 8.909886e-01 FALSE 176 VVolum3_catB 8.911481e-01 FALSE 159 Volum6_catP 9.086195e-01 FALSE 106 QST1_catP 9.218420e-01 FALSE 133 VQST4_catP 9.218420e-01 FALSE 70 VST9_catP 9.223350e-01 FALSE 129 VQST2_catP 9.276503e-01 FALSE 54 ST6_catP 9.371128e-01 FALSE 161 Volum7_catP 9.634046e-01 FALSE 138 VQST7_catP 9.991105e-01 FALSE 116 QST6_catB 9.992413e-01 FALSE 7 Del3_catP 9.993376e-01 FALSE 33 VDel4_catP 9.994999e-01 FALSE 40 VDel7_catB 9.995014e-01 FALSE 157 Volum5_catP 9.995728e-01 FALSE 156 Volum4_catB 9.995799e-01 FALSE 118 QST7_catB 9.995921e-01 FALSE 139 VQST7_catB 9.995937e-01 FALSE 175 VVolum3_catP 9.996133e-01 FALSE 149 Volum1_catP 9.996479e-01 FALSE 48 ST_catB 1.000000e+00 FALSE 49 ST1_catB 1.000000e+00 FALSE 50 ST2_catB 1.000000e+00 FALSE 51 ST3_catB 1.000000e+00 FALSE 52 ST4_catB 1.000000e+00 FALSE 53 ST5_catB 1.000000e+00 FALSE 56 ST7_catB 1.000000e+00 FALSE 57 ST9_catB 1.000000e+00 FALSE 58 ST10_catB 1.000000e+00 FALSE 61 VST_catB 1.000000e+00 FALSE 62 VST1_catB 1.000000e+00 FALSE 63 VST2_catB 1.000000e+00 FALSE 64 VST3_catB 1.000000e+00 FALSE 65 VST4_catB 1.000000e+00 FALSE 66 VST5_catB 1.000000e+00 FALSE 67 VST6_catP 1.000000e+00 FALSE 68 VST6_catB 1.000000e+00 FALSE 69 VST7_catB 1.000000e+00 FALSE 71 VST9_catB 1.000000e+00 FALSE 72 VST10_catB 1.000000e+00 FALSE 75 AD_catB 1.000000e+00 FALSE 76 AD1_catB 1.000000e+00 FALSE 77 AD2_catB 1.000000e+00 FALSE 78 AD3_catB 1.000000e+00 FALSE 79 AD4_catB 1.000000e+00 FALSE 80 AD5_catB 1.000000e+00 FALSE 82 AD6_catB 1.000000e+00 FALSE 83 AD7_catB 1.000000e+00 FALSE 84 AD9_catB 1.000000e+00 FALSE 85 AD10_catB 1.000000e+00 FALSE 88 VAD_catB 1.000000e+00 FALSE 89 VAD1_catB 1.000000e+00 FALSE 90 VAD2_catB 1.000000e+00 FALSE 91 VAD3_catB 1.000000e+00 FALSE 92 VAD4_catB 1.000000e+00 FALSE 93 VAD5_catB 1.000000e+00 FALSE 95 VAD6_catB 1.000000e+00 FALSE 96 VAD7_catB 1.000000e+00 FALSE 97 VAD9_catB 1.000000e+00 FALSE 98 VAD10_catB 1.000000e+00 FALSE 111 QST3_catB 1.000000e+00 FALSE 114 QST5_catB 1.000000e+00 FALSE 127 VQST1_catP 1.000000e+00 FALSE 128 VQST1_catB 1.000000e+00 FALSE 135 VQST5_catB 1.000000e+00 FALSE
 
elibrario:
MLP ci azzecca il 95% delle volte... Non credo che tu stia facendo la moto giusta) Senza offesa.
Anch'io mi faccio la bici da solo, ma sulla base di decenni di MLP collaudato (che dicono essere obsoleto e ha bisogno di qualcosa di più fresco per lavorare).


E provate anche gli alberi decisionali alglib, contano più velocemente e hanno prestazioni migliori di mlp. Anche Diplerning è più veloce, ma non in alglib.

La cosa principale è il rapporto velocità/qualità, che senso ha aspettare una settimana o anche un giorno o anche un'ora, così non troverai mai la combinazione ottimale) Il modello impiega qualche secondo per imparare, poi si può usare la genetica per l'autosimulazione dei parametri o dei predittori, allora è pura AI, altrimenti è spazzatura)

Motivazione: