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

 
mytarmailS #:

Tengo una función que busca un patrón/secuencia en otra cadena grande , si lo encuentra entonces ITINA de lo contrario Falso

ilustración



Tengo una función en Rk pero es lenta para cálculos grandes, o mejor dicho hay varias funciones escritas en diferentes estilos....

Así se ven los datos de entrada, por cierto, ambas cadenas pueden ser de longitud arbitraria.

Aquí está la primera función s1 escrita en el estilo estándar, claro pero engorroso.

o algo más elegante como s2.

ambas hacen lo mismo

Tengo una pregunta/solicitud - ¿puedes escribir esta simple función en rcpp para mí?

No estoy listo para hacerlo, porque no tengo tiempo libre, y no me gusta mucho codificar y depurar. Y será más útil que lo resuelvas tú mismo. Responderé a algunas preguntas técnicas específicas si puedo.

 
Aleksey Nikolayev #:

No estoy preparado para asumirlo, ya que no tengo tiempo libre, y no me gusta mucho codificar y depurar. Y será más útil que lo resuelvas tú mismo. Si puedo, responderé a algunas preguntas técnicas concretas.

gracias por no ayudarme) lo he resuelto yo mismo y eso es genial )

Código R

yes_seq <- function(pat , dat){  
  lv <- rep(F,length(pat))
  k <- 1     
  for(i in 1:length(dat)){        
    if(dat[i] == pat[k]){
      lv[k] <- TRUE
      k <- k+1 
    }       
    if(k==length(pat)+1) break
  }
  return(  all(lv)   )
}

Código Rcpp

src <-
  "bool yes_seq_cpp(NumericVector pat, NumericVector dat){

    LogicalVector lv (pat.length() ,false);
    int k=0;

    for(int i=0; i<dat.length(); ++i){
    
      if(dat[i]==pat[k]){
            lv[k] = true;
            k = k+1; 
          }
if(k==pat.length())  break;
}
    
return  is_true(all(lv == true));
}
"
Rcpp::cppFunction(src)


Tengo una pregunta: ¿cómo hacer que las variables de entrada de pat dat acepten tanto vectores numéricos (como ahora) como vectores de cadena?




p.d. La función resultó ser sólo 6 veces más rápida (( Pensé que sería al menos 100 veces más rápida ((((

microbenchmark::microbenchmark( yes_seq(pat,dat), yes_seq_cpp(pat,dat))

Unit: microseconds
                  expr    min     lq     mean median      uq     max neval cld
     yes_seq(pat, dat) 42.193 43.333 44.78712 43.903 45.0435 106.052   100   b
 yes_seq_cpp(pat, dat)  5.701  5.987  6.61993  6.272  6.8425  22.807   100  a 
 
mytarmailS #:

gracias por no ayudar) lo resolvi yo mismo y eso es genial )

R código

Código Rcpp


Hay una pregunta: ¿cómo hacer que las variables de entrada de pat dat acepten tanto vectores numéricos (como ahora) como vectores de cadena?




p.d. La función resultó ser sólo 6 veces más rápida (( Pensé que sería al menos 100 veces más rápida ((((

Puedes compilar el código con R (compile). Conseguí casi 3 veces más velocidad del código.

En lugar de for, usa foreach, cargando todos los kernels.

 
СанСаныч Фоменко #:

Puedes compilar código R (compile). Conseguí acelerar el código casi 3 veces.

Utiliza foreach en lugar de for, cargando todos los kernels.

desde R 3.4 la compilación cmpfun se incluye por defecto en todo el código R

https://stackoverflow.com/questions/41502721/could-someone-explain-what-compiling-in-r-is-and-why-it-would-speed-up-this-c
 
mytarmailS #:

desde R 3.4 la compilación cmpfun se incluye por defecto en todo el código R

https:// stackoverflow.com/questions/41502721/could-someone-explain-what-compiling-in-r-is-and-why-it-would-speed-up-this-c

Este post entiendo que ahora parece que siempre compila los paquetes, que por cierto se puede ver al actualizar paquetes , línea byte-compilar y preparar paquete para lazy loading.

Pero creo que el código de usuario NO se compila. Nosotros cargamos funciones por fuente y no vi en la descripción de la fuente que se compile la función a cargar

 
Se ha publicado el artículoTrabajar con matrices y vectores en MQL5:

 
СанСаныч Фоменко #:

Este post entiendo que ahora parece que siempre compila paquetes, que por cierto se puede ver al actualizar paquetes , línea byte-compilar y preparar paquete para la carga perezosa.

Pero creo que el código de usuario NO se compila. Nosotros cargamos funciones por fuente y no vi en la descripción de la fuente que se compile la función a cargar

hmm, voy a intentarlo

 
mytarmailS #:

Hay una pregunta: ¿cómo hacer que las variables de entrada de pat dat acepten tanto vectores numéricos (como ahora) como vectores de cadena?

La primera idea para sobrecargar es escribir otra función con el mismo nombre pero con diferentes argumentos. Nunca he hecho esto en Rcpp, así que no sé si funcionará. Probablemente tendré que hacer el código C en un archivo separado y usar sourceCpp() en vez de cppFunction().

 
Aleksey Nikolayev #:

La primera idea para sobrecargar es escribir otra función con el mismo nombre pero con diferentes argumentos. Nunca he hecho esto en Rcpp, así que no sé si funcionará. Probablemente tendré que hacer el código C en un archivo separado y usar sourceCpp() en lugar de cppFunction().

Gracias

 
Maxim Dmitrievsky #:
Correcto. A falta de supuestos a priori, se utiliza el segundo tipo.
Aleksey Nikolayev #:

En mi opinión, hay dos tipos de conexión.

El primero es causal, que se determina por la información a priori sobre el objeto de investigación a partir de los conocimientos en la materia dada, y no por algunos cálculos.

El segundo tipo es la dependencia probabilística, que puede calcularse a posteriori a partir de algunos datos obtenidos mediante la observación del comportamiento del objeto. El segundo tipo incluye la correlación, la dependencia determinista (como caso extremo), etc., incluida la descrita por cópulas y otros métodos. La base para estudiar este tipo es la suposición de que existe una distribución conjunta para los predictores y el objeto.

A falta de experimentos , se utiliza el 2º tipo (p. ej. US Food & Drugs Association - no probará una muestra representativa normal para sus conclusiones, por lo que se basa en enfoques bayesianos)... y sin información a priori, no hay nada que modelizar en absoluto