Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 394

 
elibrarius:
Se você iniciar algo por um mês - use uma fonte de alimentação ininterrupta para o seu computador, uma vez tive 2 semanas de cálculos, a luz estava apagada))
E a versão GPU não espera muito, para reescrever o código parece-me mais longo e se o autor não o tiver feito, é improvável que outra pessoa termine esta tarefa até ao fim.

Bem, o autor fez um paralelo com tudo, agora só preciso de o gerir. De qualquer forma, eu esgotei a corrida por 3 dias e consegui um modelo com 9 entradas, o que é um recorde para mim agora para ser honesto. Não quero optimizá-lo por tanto tempo. Mas como se costuma dizer. O mercado exige isso. Portanto, procurando capacidades, se alguém tem a oportunidade de otimizar o conjunto de dados sobre o otimizador, e mesmo sobre 20-30 núcleos, eu ficaria muito grato.
 

Mihail Marchukajtes:

dias de aprendizagem, semanas.

Aparentemente seu algoritmo não é ótimo, em conjuntos de dados tão pequenos você pode usar com segurança algoritmos bruteforcing como o Knn, que são quase ótimos, se o algoritmo for mais lento que o Knn é provavelmente um algoritmo ML ruim ou mal configurado. Em tal conjunto de dados, todo o ciclo de treinamento e execução de todo o conjunto não deve levar mais do que um segundo.
 
pantural:
Aparentemente seu algoritmo não é ótimo, em conjuntos de dados tão pequenos, você pode usar algoritmos de força bruta como o Knn, que são quase ótimos, se o algoritmo for mais lento que o Knn, provavelmente é um algoritmo ML ruim ou mal configurado. Nesse conjunto de dados, todo o ciclo de treinamento e execução de todo o conjunto não deve levar mais do que um segundo.

Eu expliquei acima. 100 fendas cada fenda é treinada 1000 épocas etc. A essência do otimizador é calcular o conjunto de dados para que não haja dúvidas sobre a sua adequação. Ou seja, ele gira este ficheiro para cima e para baixo figurativamente, e você continua a compará-lo a um único treino de um neurónio. IMHO. É essencialmente um sistema de IA em que todo tipo de otimização e pré-processamento acontece junto com o treinamento de neurônios, e o treinamento em si funciona centenas de vezes. Se algo....
 
Mihail Marchukajtes:

Eu expliquei acima. 100 fendas, cada fenda é treinada para 1000 épocas, etc. Você está apenas fixado em um único treinamento de um neurônio, enquanto o objetivo do otimizador é calcular o conjunto de dados para que não haja dúvidas sobre sua bondade de ajuste. Ou seja, ele gira este ficheiro para cima e para baixo figurativamente, e você continua a compará-lo a um único treino de um único neurónio. IMHO. É essencialmente um sistema de IA em que todo tipo de otimização e pré-processamento acontece junto com o treinamento de neurônios, e o treinamento em si funciona centenas de vezes. Se algo....
Eu sou geralmente contra todo esse treinamento, mas sua máquina é exatamente o que um burro inventou, até eu posso entendê-la.
 
elibrarius:
O MLP está a adivinhar 95% das vezes... Acho que não estás a fazer a bicicleta certa) Sem ofensa.

Você tem um erro.
A primeira coluna na tabela é o número da linha, e esta coluna não pode ser usada na previsão, mas só é necessária para a jPredição por algum motivo.

O alvo é distribuído de modo que a primeira metade das linhas seja de classe 0, e a segunda metade das linhas seja de classe 1. Então o neurônio simplesmente se lembra que se o número da linha for inferior a 228, é classe 0, caso contrário é classe 1.

 
Dr. Trader:

Você tem um erro.
A primeira coluna na tabela é um número de linha e você não pode usar esta coluna na previsão, mas é obrigatória apenas para a previsão jPrediction por algum motivo.

O alvo é distribuído de modo que a primeira metade das linhas seja de classe 0, e a segunda metade das linhas seja de classe 1. Então, o neurônio simplesmente se lembra que se o número da linha for inferior a 228, é classe 0, caso contrário, é classe 1.

Oh, a propósito, sim. Não reparei que é apenas um número.

Sem ele Entradas para guardar: 4,50,53,59,61,64,92,98,101,104,

Erro médio no treinamento (60,0%) =0,269 (26,9%) nLearns=2 NGrad=7376 NHess=0 NCholesky=0 codResp=2
Erro médio na validação (20,0%) gráfico =0,864 (86,4%) nLearns=2 NGrad=7376 NHess=0 NCholesky=0 codResp=2
Erro médio no gráfico de teste (20,0%) =0,885 (88,5%) nLearns=2 NGrad=7376 NHess=0 NCholesky=0 codResp=2

Claramente sobretreinamento. Por isso, preciso de peneirar as entradas de uma forma diferente.

Talvez peneirar por peso de insumos? Como você fez para o problema no primeiro post da linha...

Estou a tentar reescrever o teu guião R anexado para que possa determinar nomes e número de colunas... mas não conheço R suficiente.

 
elibrarius:

Estou a tentar reescrever o guião R que anexaste, para que ele determine os nomes e o número de colunas... mas não conheço R suficiente.


Eu ainda estava começando a aprender R então, o roteiro é quase inteiramente gerado em guizo (ambiente visual para datamining em R), por isso é tão complexo e personalizado para todas as ocasiões.


Isto...

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")

deve ser mudado para...

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

crs$numeric <- crs$input

E deve ficar tudo bem.


Em geral, é uma má abordagem, não se deve definir a importância dos inputs dessa forma. Por alguma razão, funcionou daquela vez, mas nunca mais me ajudou.

 

É melhor definir a importância dos prognosticadores da seguinte forma

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
 

Os resultados da avaliação da importância são os seguintes. Quanto mais alto o prognosticador na mesa, melhor. SomenteVVolum6, VDel1, VVolum9, VQST10 passaram no teste.

No guizo podemos construir 6 modelos ao mesmo tempo sobre estes 4 preditores, e SVM mostra uma precisão de cerca de 55% na validação e dados de teste. Nada mal.

             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 FALSE 19 Del9_catB 5.316355e-02 FALSE 13 Del5_catB 5.472078e-02 FALSE 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 FALSE 74 VST11_catB 7.709038e-02 FALSE 134 VQST4_catB 9.536026e-02 FALSE 141 VQST9_catB 9.536026e-02 FALSE 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 FALSE 43 VDel10_catP 1.201338e-01 FALSE 184 VVolum7_catB 1.286891e-01 FALSE 121 QST10_catP 1.464880e-01 FALSE 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 FALSE 27 VDel1_catP 2.313270e-01 FALSE 41 VDel9_catP 2.316597e-01 FALSE 100 VAD11_catP 2.320692e-01 FALSE 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
 
elibrarius:
O MLP acerta 95% das vezes... Acho que não estás a fazer a bicicleta certa) Sem ofensa.
Eu faço minha própria moto também, mas com base em décadas de MLP comprovado (que se diz ser obsoleto e precisa de algo mais fresco para trabalhar).


E tente também árvores de decisão de algibeiras, elas contam mais rápido e têm melhor desempenho do que mlp. A diplomacia também é mais rápida, mas não em algibe.

O principal é a relação velocidade/qualidade, para que serve esperar uma semana ou mesmo um dia ou até uma hora, para que nunca encontre a combinação ideal) O modelo leva alguns segundos para aprender, depois você pode usar a genética para a autosimulação de parâmetros ou preditores, depois é pura IA, senão é lixo)

Razão: