Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 36

 
Dr.Trader:

No creo que este paquete sea suficiente para construir un modelo capaz de predecir la variable objetivo. Todo lo que he encontrado en la ayuda es para construir el modelo PCA basado en predictores, la variable objetivo no está en absoluto.


Hola, te has equivocado de función, deberías haber utilizado"nlPca" como se indica en la web que he dado, pero es culpa mía, debería haber dado más detalles...

Aquí, en lugar de predecir - encajado, inténtelo, tal vez usted tendrá éxito

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:

No creo que este paquete sea suficiente para construir un modelo capaz de predecir la variable objetivo. Todo lo que he encontrado en la ayuda es para construir un modelo PCA basado en predictores, la variable objetivo no está en absoluto.

Esto creará un objeto resNipals (Estimación no lineal por mínimos cuadrados parciales iterativos) con 5 componentes principales para analizar la tabla metaboliteDataComplete. En lugar de metaboliteDataComplete, puede sustituir su propia tabla con predictores. Es importante no alimentar la variable objetivo aquí, se utilizará más tarde.

Pero esto sólo será suficiente para analizar las relaciones entre las variables examinando diferentes gráficos. Para crear un modelo predictivo, se construye un modelo de regresión lineal que utiliza los componentes principales PC1,PC2,PC3,PC4,PC5 como variables de entrada (x1,x2,x3,...). Y la variable objetivo Y ya está introducida en el modelo lineal como resultado deseado. El problema es que resNipals es un objeto de la clase "pcaRes" del paquete pcaMethods. No he podido encontrar en la ayuda cómo hacer todo esto.

Si se tratara de un modelo PCA del paquete caret, sería así:

Pero no funciona con resNipals, en teoría el paquete pcaMethods debería tener algunas funciones propias para trabajar con este objeto, pero no he encontrado nada.

Originalmente, el ACP se diseñó para resolver dos problemas:

1. hay un número muy grande de predictores con un número pequeño de observaciones. Esto es común en la química orgánica, la genética... En nuestro caso, se trata de la utilización de datos macroeconómicos sobre grandes TF, por ejemplo, anuales.

2. Existen correlaciones entre los predictores.

Por lo tanto, los algoritmos PCA resuelven estos dos problemas principales:

1. Reducir el número de predictores originales por un nuevo número de predictores, a menudo radicalmente menor. Al hacerlo, el algoritmo se asegura de que este pequeño número pueda explicar un determinado porcentaje de la variabilidad del conjunto original de predictores, por ejemplo, el 95%. Este valor lo elige el investigador.

2. El nuevo conjunto de predictores tiene CERO correlación entre sí.

De ello se desprende que, para nosotros, el ACP esuno de los algoritmos de preparación de los datos brutos para la modelización, pero no puede sustituir a la modelización para predecir la variable objetivo.

Me parece que entre la discusión de los diversos detalles del PCA, se ha perdido el sentido de mis observaciones sobre este punto. Así que permítanme recordarles: di una referencia al uso de PCA de una manera que no sólo redujo el número de predictores originales, sino que también eliminó los predictores que eran ruido para la variable objetivo. Que es lo que se discute en este hilo.

Así que propongo volver al problema del ruido entre los predictores, y el posible uso de una idea muy específica de aplicar el ACP para resolver este problema.

 
Dr.Trader:

Esto creará el objeto resNipals (Estimación no lineal por mínimos cuadrados parciales iterativos) con 5 componentes principales para el análisis de la tabla metaboliteDataComplete. En lugar de metaboliteDataComplete, puede sustituir su propia tabla ...........

El que has probado es el Nipals, aparece en la segunda foto de la web, tampoco es muy separable, deberías coger el de la tercera foto red neuronal PCA

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

un poco fuera de tema pero necesito ayuda con el código....

Tengo predictores en columnas, quiero calcular la diferencia de todos los predictores con todas esas combinaciones, lo he implementado, el problema es que ahora necesito nombrar adecuadamente cada combinación para entender qué es qué

Digamos que tenemos columnas con predictores "A" , "Б" , "С"

Hago combinaciones de diferencias

1) A - B

2) A - C

3) C - B

pregunta: ¿cómo puedo dar a las nuevas columnas nombres como "a_minus_b"? , "a_minus_c"

Recién estoy dominando R y la programación en general, así que no estoy familiarizado con esos trucos

¿Qué debo añadir 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:

El que has probado es el Nipals, aparece en la segunda foto de la web, tampoco es muy separable, deberías coger el de la tercera foto red neuronal PCA

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

un poco fuera de tema pero necesito ayuda con el código....

Tengo predictores en columnas, quiero calcular la diferencia de todos los predictores con todas esas combinaciones, lo he implementado, el problema es que ahora necesito nombrar adecuadamente cada combinación para entender qué es qué

Digamos que tenemos columnas con predictores "A" , "Б" , "С"

Hago combinaciones de diferencias

1) A - B

2) A - C

3) C - B

pregunta: ¿cómo puedo dar a las nuevas columnas nombres como "a_minus_b"? , "a_minus_c"

Recién estoy dominando R y la programación en general, así que no estoy familiarizado con esos trucos

¿Qué debo añadir a este código?

Se ve así.

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

También hay nombres

Ver ayuda.

 
SanSanych Fomenko:

El PCA se diseñó originalmente para resolver dos problemas:

El PCA fue concebido originalmente para reducir la dimensionalidad de las series originales. Eso es todo. Utilizarlo para seleccionar predictores no tiene sentido.
 
SanSanych Fomenko:

Aproximadamente así.

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

También hay nombres

Véase la referencia.

)) Sí, lo sé, pero si hay 1000 variables, ¿por qué escribir manualmente cada una?
 

Dr.Trader:

...

Los datos se toman de eurusd d1, clase 0 o 1 - caída o subida del precio para la siguiente barra. Si el modelo predice correctamente el resultado de test.csv al menos en 6 de cada 10 casos, entonces puede intentar operar con él en Forex, en principio, no perderá, pero no espere demasiado beneficio. Si predice correctamente en 7 de cada 10 casos (y más) - este es el camino correcto hacia el grial, tenemos que intentar entrenar y probar el modelo en otros años y meses, y si todo será igual - entonces muy bien.

...


Más concretamente en el archivo del informe:

/**
* La calidad del modelado en fuera de muestra:
*
* TruePositives: 182
* VerdaderosNegativos: 181
* FalsosPositivos: 1
* FalsosNegativos: 1
* Total de patrones en las muestras con estadísticas: 365
* Total de errores fuera de la muestra: 2
* Sensibilidad de la capacidad de generalización: 99,4535519125683%.
* Especificidad de la capacidad de generalización: 99,45054945054946%.
* Capacidad de generalización: 98,90410136311776%.
* Indicador de Reshetov: 8.852456238401455
*/


Es el momento de formar un equipo y crear un proyecto Open Source - sistema automatizado para este fin en mql5 y Java. Mostraré el código fuente del clasificador binario en Java y el script MQL5, que crea una muestra para entrenar los modelos.

Plano aproximado del funcionamiento del complejo:

  1. Para cada instrumento financiero hay robots separados en los gráficos, que se activan por los precios de apertura de las barras y vuelcan los patrones en archivos.
  2. La aplicación Java (clasificador binario) descarga los patrones para cada símbolo y espera con un intervalo de 1 segundo los archivos creados por los robots del paso 1. A continuación, el archivo de patrones se elimina del disco. La herramienta clasifica una señal de trading según el patrón y la guarda en el archivo.
  3. Un robot espera los archivos de la cobertura del paso 2. En cuanto se encuentra el archivo, el robot lee el instrumento y la señal del mismo y abre o invierte una operación en el instrumento según la señal. Se borra el archivo leído.

Si estás interesado en unirte al proyecto y sabes programar en Java o MQL5, suscríbete a este hilo.

 
mytarmailS:

Hola! Has utilizado la función equivocada, deberías haber utilizado"nlPca" como se indica en la página web que he dado, pero eso es culpa mía, necesitas más detalles...

Aquí, en lugar de predecir - encajado, inténtelo, tal vez usted tendrá éxito

Este ejemplo es de otro hilo por desgracia. Por ejemplo, en Forex siempre podemos obtener el 100% de los datos, pero en otros campos en los que los datos se adquieren de forma experimental siempre habrá valores perdidos. En este ejemplo se utiliza PCA para reconstruir los valores perdidos en los propios predictores. En el ejemplo borran aleatoriamente un valor en una de las tres columnas, crean un modelo pca y lo utilizan para reconstruir los valores perdidos.

Nunca lo he probado, pero técnicamente también se podría tratar la variable objetivo como un predictor incluyéndola en el modelo pca. Entonces, en los nuevos datos su valor será desconocido, por lo que pca puede rellenar esos valores que faltan.

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:
El PCA estaba pensado originalmente para reducir la dimensionalidad de las series originales. Eso es todo. Utilizarlo para seleccionar predictores no tiene sentido.

No, está bien. Dado que los predictores utilizados para cada uno de los componentes principales son conocidos, podemos descartar con seguridad aquellos predictores que no se utilizan en los componentes principales. Lee esto, me ha gustado: http://www.win-vector.com/blog/2016/05/pcr_part2_yaware/ Contiene 5 buenos predictores y docenas de predictores de ruido. Con la ayuda de los análisis, eliminan el ruido. He utilizado el mismo código para otros ejemplos encontrados en este hilo, en general funciona. Pero el forex es más complicado, no tengo imágenes tan bonitas con indicadores, debería pensar en algo más inteligente.

 
Dr.Trader:

Este ejemplo es, por desgracia, de otro tema. En Forex, por ejemplo, siempre podemos recuperar el 100% de los datos, pero en otros ámbitos en los que los datos se obtienen de forma experimental siempre habrá lagunas, valores que faltan. En este ejemplo se utiliza PCA para reconstruir los valores que faltan en los propios predictores. En el ejemplo borran aleatoriamente un valor en una de las tres columnas, crean un modelo pca y lo utilizan para reconstruir los valores que faltan.

Nunca lo he probado, pero técnicamente también se podría tratar la variable objetivo como un predictor incluyéndola en el modelo pca. Entonces, en los nuevos datos su valor será desconocido, por lo que pca puede rellenar los valores que faltan.

Sospeché que no es casualidad que estos "NA"-ticks sean arrojados en la fecha, pero leí el manual, dice claramente PCA con una red neuronal, pero entonces todavía no está claro cómo este tipo del sitio obtuvo esta bonita imagen con una buena partición por clases