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

 
Escrevi este código num script e executei-o algumas vezes, obtive resultados ligeiramente diferentes, vez após vez...
 
Vizard_:

set.seed(1234)

O que é isso e onde é que o ponho?

 
Mihail Marchukajtes:

isso é mais de metade da batalha... é assim que é....

90%, e os modelos são uma questão de tecnologia, o carpete está cheio deste material com a amarração adequada.

 

Aqui está um exemplo com o vtreat também,

Geralmente isto é pré-processamento de dados, mas pode ser usado como uma estimativa de cada preditor em relação ao alvo. Não gosto que o pacote não leve em conta as interações do preditor, use o código apenas se você tiver o suficiente para estimar os preditores um de cada vez em relação ao alvo.

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:
O que é isso e onde é que o ponho?

set.seed sets semente inicial de gerador de números aleatórios. Se o definir para o mesmo estado (como 1234) antes da execução do código, o código seguinte será executado da mesma forma em todos os casos.

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

Mas talvez o algoritmo precise de mais iterações (maxRuns = 1000000 por exemplo), ele não cabe em um número tão pequeno como por padrão e pára na metade do caminho.

 

Tenho andado a pensar em regressão....
A regressão nos mercados financeiros não é uma função suave, mas sim uma função passo a passo com incrementos de 1 pt. (tanto para o professor como para a previsão). Se por exemplo limitarmos o movimento a +/- 100 pt, então há uma analogia com a classificação em 200 classes. Ou seja, a saída é uma previsão da classe mais provável - por exemplo +22 pt.
Isso não significa que para bons resultados a estrutura/complexidade do modelo (número de neurônios) para regressão deve ser 200 vezes maior? Bem, se aumentarmos o passo para 5 pt, então 40 vezes seria um pouco mais económico, ao custo de menos precisão.

 
Passou o arquivo pelo vtreat, reconhecidamente não muito. Apenas 4 entradas seleccionadas. Obrigado pela dica..... Eu vou continuar a girar....
 
Vizard_:

Agora lembre-se do boxplot, faça algo com os inputs e execute-o novamente.

O parâmetro set.seed é o mesmo em ambos os casos.

O que queres que eu faça quanto aos inputs?

Sim..... Eu admito que esperava melhor das minhas entradas. De qualquer forma, pensei que haveria mais importantes, certamente não quatro em cada 100. Com tantas entradas os modelos ficam muito pequenos, embora eu tenha notado na prática que quanto mais simples for o modelo, melhor ele funciona. E olhando para o modelo e fazendo meus próprios testes eu entendo que esta merdinha é muito boa..... É muito cedo para tirar conclusões, são necessários mais testes. Continue cavando....

 
Em todos os lugares que escrevi
forexFeatures <- read.csv2("Qwe.txt")

tens mesmo de o fazer.
forexFeatures <- read.csv2("Qwe.txt", dec=".")

Desculpe, julguei mal o formato do seu ficheiro. Vou corrigir os postos antigos. Execute novamente o código, os resultados devem ser melhores, caso contrário todos os números com frações decimais foram processados incorretamente.
 
Mihail Marchukajtes:

O que fazer com as entradas?

Por exemplo, jPrediction escalona os dados para o intervalo [-1;1] e aprende sobre esses números. Você também pode escalar para o mesmo intervalo em R antes de avaliar as entradas.

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,...

Métodos de estimativa baseados em árvores provavelmente não mudarão o resultado, as florestas não se importam em que intervalo os dados vieram, mas é melhor verificar. O vtreat também não é picuinhas quanto ao intervalo.


Mas em geral, ele está falando sobre a transformação não linear de insumos antes mesmo de se alimentar de neurônios. A Neuronics é muito sensível a inputs, e se você processar os dados de input de alguma forma especial, seus resultados podem melhorar. Por exemplo, já ouvi um truque desses - converter entradas via sigmóide.