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

 
Dr. Trader:

Eu não acho que este pacote seja suficiente para construir um modelo capaz de prever a variável alvo. Tudo o que encontrei na ajuda é para construir um modelo PCA baseado em preditores, a variável alvo não está de todo lá.


Olá, você usou função errada, você deveria ter usado"nlPca" como indicado no site que eu dei, mas é minha culpa, eu deveria ter dado mais detalhes...

Aqui, em vez de prever - ajustado, experimente, talvez você consiga

source("https://bioconductor.org/biocLite.R")
biocLite("pcaMethods")        

#создание  pca объекта
library(pcaMethods)

##  Data set with three variables where data points constitute a helix
data(helix)
helixNA <- helix
##  not a single complete observation
helixNA <- t(apply(helix, 1, function(x) { x[sample(1:3, 1)] <- NA; x}))
## 50 steps is not enough, for good estimation use 1000
helixNlPca <- pca(helixNA, nPcs=1, method="nlpca", maxSteps=50)
fittedData <- fitted(helixNlPca, helixNA)
plot(fittedData[which(is.na(helixNA))], helix[which(is.na(helixNA))])
		
 
Dr. Trader:

Eu não acho que este pacote seja suficiente para construir um modelo capaz de prever a variável alvo. Tudo o que encontrei na ajuda foi construir um modelo PCA baseado em preditores, a variável alvo não está de todo lá.

Isto criará um objeto resNipals (Nonlinear Estimation by Iterative Partial Least Squares) com 5 componentes principais para analisar a tabelaDataComplete do metabolito. Em vez de metaboliteDataComplete, você pode substituir a sua própria tabela por preditores. É importante não alimentar a variável alvo aqui, ela será usada mais tarde.

Mas isto só será suficiente para analisar as relações entre as variáveis através do exame de diferentes gráficos. A fim de criar um modelo preditivo depois disso é construído um modelo de regressão linear que utiliza os componentes principais PC1,PC2,PC3,PC4,PC5 como variáveis de entrada (x1,x2,x3,...). E a variável alvo Y já é introduzida no modelo linear como o resultado desejado. O problema é que resNipals é algum objeto da classe "pcaRes" do pacote pcaMethods. Não consegui descobrir como fazer tudo isto com a ajuda.

Se fosse um modelo PCA do pacote do carpete, seria assim:

Mas não funciona com resNipals, em teoria o pacote pcaMethods deveria ter algumas funções próprias para trabalhar com este objeto, mas eu não encontrei nada.

Originalmente, o PCA foi concebido para resolver dois problemas:

1. há um número muito grande de preditores com um pequeno número de observações. Isto é comum na química orgânica, genética... Connosco é a utilização de dados macroeconómicos sobre grandes TFs, por exemplo, anuais.

2. Há correlações entre os preditores.

Portanto, os algoritmos PCA resolvem estes dois problemas principais:

1. Reduzir o número de preditores originais através de um novo número, muitas vezes radicalmente menor, de preditores. Ao fazê-lo, o algoritmo assegura que este pequeno número pode explicar uma certa percentagem da variabilidade do conjunto original de preditores, por exemplo, 95%. Este valor é escolhido pelo pesquisador.

2. O novo conjunto de preditores tem correlação ZERO entre si.

Segue-se que, para nós, o PCA éum dos algoritmos para preparar os dados brutos para a modelagem, mas não pode substituir a modelagem para prever a variável alvo.

Parece-me que entre a discussão dos vários detalhes do PCA, o significado das minhas observações sobre este ponto foi perdido. Portanto, deixe-me lembrá-lo: eu dei uma referência ao uso do PCA de uma forma que não só reduziu o número de preditores originais, mas também eliminou os preditores que eram ruído para a variável alvo. Que é o que está sendo discutido neste tópico.

Assim, proponho voltar ao problema do ruído entre os preditores, e o possível uso de uma ideia muito específica de aplicação de PCA para resolver este problema.

 
Dr. Trader:

Isto irá criar resNipals (Nonlinear Estimation by Iterative Partial Least Squares) objeto com 5 componentes principais para análise de tabela de dados metabólicos Completos. Ao invés de metaboliteDataComplete, você pode substituir sua própria tabela ...........

O que você tentou é o Nipals, é mostrado na segunda foto no site, também não é muito separável, você deve tirar o da terceira foto da rede neural PCA

=========================

um pouco fora de tópico mas precisa de ajuda com o código....

Eu tenho preditores em colunas, quero calcular a diferença de todos os preditores com todas essas combinações, eu a implementei, o problema é que agora eu preciso nomear cada combinação adequadamente para entender o que é o que

Digamos que temos colunas com preditores "A". , "Б" , "С"

Eu faço combinações de diferenças

1) A - B

2) A - C

3) C - B

pergunta: como dar os nomes das novas colunas como "a_minus_b"? a_minus_c".

Estou apenas a dominar o R e a programação em geral, por isso não estou familiarizado com tais truques

O que devo acrescentar a este código?

a <- 1:5
b <- 6:10
c <- 11:15
d <- 16:20
dt <- data.frame(a,b,c,d) 
dt

#  все комбинации индексов между двумя переменными
#  еще транспонирую(переворачиваю матрицу) мне так удобней воспринимать
combi <- t(  combn(1:ncol(dt),2)  )  
combi  

#  пустая фрейм куда буду записывать результат вычислений с комбинацыями
res.dt <- as.data.frame(  matrix(nrow = nrow(dt) , ncol = nrow(combi))   )
res.dt

for(i in 1:ncol(res.dt)){
  #  буду проводить вычитание одной перем из другой во всех комбинацыях
  #  и записывать в res.dt
  ii <- combi[i,1]
  jj <- combi[i,2]
  
  res.dt[,i] <- dt[,ii] - dt[,jj]
}
res.dt
 
mytarmailS:

O que você tentou é o Nipals, é mostrado na segunda foto no site, também não é muito separável, você deve tirar o da terceira foto da rede neural PCA

=========================

um pouco fora de tópico mas precisa de ajuda com o código....

Eu tenho preditores em colunas, quero calcular a diferença de todos os preditores com todas essas combinações, eu a implementei, o problema é que agora eu preciso nomear cada combinação adequadamente para entender o que é o que

Digamos que temos colunas com preditores "A". , "Б" , "С"

Eu faço combinações de diferenças

1) A - B

2) A - C

3) C - B

pergunta: como dar os nomes das novas colunas como "a_minus_b"? a_minus_c".

Estou apenas a dominar o R e a programação em geral, por isso não estou familiarizado com tais truques

O que devo acrescentar a este código?

Parece que é assim.

colnames() <- c(".", ".")

Há também nomes

Ver ajuda.

 
SanSanych Fomenko:

O PCA foi originalmente concebido para resolver dois problemas:

O PCA foi originalmente concebido para reduzir a dimensionalidade da série original. É isso mesmo. Usá-lo para seleccionar os preditores é um disparate.
 
SanSanych Fomenko:

Aproximadamente assim.

colnames() <- c(".", ".")

Há também nomes

Ver referência.

)) sim, eu sei, mas se existem 1000 variáveis, por que escrever manualmente cada uma delas?
 

Dr. Trader:

...

Os dados são retirados de eurusd d1, classe 0 ou 1 - preço cai ou sobe para a próxima barra. Se o modelo prevê corretamente o resultado para test.csv pelo menos em 6 de cada 10 casos, então você pode tentar negociar com ele em Forex, em princípio, não perderá, mas não espere muito lucro. Se prevê corretamente em 7 de cada 10 casos (e superiores) - este é o caminho certo para o graal, temos que tentar treinar e testar o modelo em outros anos e meses, e se tudo vai ser igual - então muito bom.

...


Mais especificamente no ficheiro do relatório:

/**
* A qualidade da modelagem fora da amostra:
*
* TruePositives: 182
* TrueNegative: 181
* FalsePositivos: 1
* FalseNegative: 1
* Total de padrões em amostras com estatísticas: 365
* Total de erros de entrada fora da amostra: 2
* Sensibilidade de generalização abiliy: 99,4535519125683%
* Especificidade da capacidade de generalização: 99,45054945054946%
* Capacidade de generalização: 98,90410136311776%
* Indicador por Reshetov: 8,852456238401455
*/


É hora de construir uma equipe e criar um projeto Open Source - sistema automatizado para este fim em mql5 e Java. Vou mostrar o código fonte do classificador binário no script Java e MQL5, que cria uma amostra para modelos de treinamento.

Plano aproximado de como o complexo irá funcionar:

  1. Para cada instrumento financeiro há robôs separados nos gráficos, que são acionados por preços de abertura de barras e padrões de despejo em arquivos.
  2. O aplicativo Java (classificador binário) baixa padrões para cada símbolo e espera com um intervalo de 1 segundo por arquivos criados por robôs a partir do passo 1. O ficheiro padrão é então apagado do disco. A ferramenta classifica um sinal de negociação de acordo com o padrão e grava-o no arquivo.
  3. Um robô espera pelos arquivos da sebe a partir do passo 2. Assim que o arquivo é encontrado, o robô lê o instrumento e o sinal do mesmo e abre ou inverte um acordo sobre o instrumento de acordo com o sinal. O ficheiro lido é eliminado.

Se você está interessado em participar do projeto e sabe como programar em Java ou MQL5, por favor inscreva-se neste tópico.

 
mytarmailS:

Olá! Você usou a função errada, você deveria ter usado"nlPca" como indicado no site que eu dei, mas isso é culpa minha, você precisa de mais detalhes...

Aqui, em vez de prever - ajustado, experimente, talvez você consiga

Este exemplo é, infelizmente, de outro fio. Por exemplo, em Forex podemos sempre obter 100% dos dados, mas em outros campos onde os dados são adquiridos experimentalmente sempre haverá valores ausentes. Neste exemplo o PCA é usado para reconstruir os valores ausentes nos próprios preditores. No exemplo eles limpam aleatoriamente os valores em uma das três colunas, criam um modelo pca e o usam para reconstruir os valores ausentes.

Eu nunca tentei isso, mas tecnicamente você também poderia tratar a variável alvo como um preditor, incluindo-a no modelo pca. Então, em novos dados o seu valor será desconhecido, para que pca possa preencher esses valores em falta.

source("https://bioconductor.org/biocLite.R")
biocLite("pcaMethods")        

#создание  pca объекта
library(pcaMethods)

##  Data set with three variables where data points constitute a helix
#trainData - таблица с обучающими примерами. Целевая переменная тоже должна быть в этойже таблице. Пример колонок: Close,Hour,MA30,target. (target - целевая переменная, со значениями например 0 или 1 обозначающими падение/рост цены)
## 50 steps is not enough, for good estimation use 1000
NlPca <- pca(trainData, nPcs=1, method="nlpca", maxSteps=50)
#newData - таблица с новыми данными, для проверки модели. Колонки должны быть теже Close,Hour,MA30,target
newData[,"target"] <- NA  #целевая  переменная на новых данных не должны быть известна модели, и в случае NA - функция fitted должна подставить туда подходящие значения
fittedNewData <- fitted(NlPca, newData)
fittedNewData[,"target"] #  ваш результат предсказания
Я не могу начать новую нормальную строку :/ В общем можно сделать как я написал выше, но это не предсказание а реконструкция. PCA модель может просто найти некие значения которые "подойдут". Гарантий никаких нет, я предполагаю что ошибка будет 50%
 
Combinador:
O PCA foi originalmente concebido para reduzir a dimensionalidade da série original. É isso mesmo. Usá-lo para selecionar os preditores é um disparate.

Não, está tudo bem. Como os preditores utilizados para cada um dos componentes principais são conhecidos, podemos rastrear com segurança os preditores que não são utilizados nos componentes principais. Leia isto, eu gostei: http://www.win-vector.com/blog/2016/05/pcr_part2_yaware/ Contém 5 bons preditores e dezenas de preditores de ruído. Eles peneiram o ruído com a ajuda de análises. Eu usei o mesmo código para outros exemplos encontrados neste tópico, ele geralmente funciona. Mas forex é mais complicado, eu não tenho fotos tão boas com indicadores, eu deveria pensar em algo mais inteligente.

 
Dr. Trader:

Este exemplo é, infelizmente, de outro tópico. No Forex por exemplo, podemos sempre recuperar 100% dos dados, mas em outras áreas onde os dados são obtidos experimentalmente haverá sempre lacunas, valores em falta. Neste exemplo o PCA é usado para reconstruir os valores em falta nos próprios preditores. No exemplo eles limpam aleatoriamente um valor em uma das três colunas, criam um modelo pca, e o usam para reconstruir os valores em falta.

Eu nunca tentei isso, mas tecnicamente você também poderia tratar a variável alvo como um preditor, incluindo-a no modelo pca. Então, em novos dados o seu valor será desconhecido, para que pca possa preencher os valores em falta.

Eu suspeitava que não era por acaso que estes "paus de NA" eram jogados na data, mas eu li o manual, ele diz claramente PCA com uma rede neural, mas ainda não está claro como este cara do site conseguiu esta bela foto com uma boa partição por classes