rPython + feather

Supongo que a estas alturas todos conoceréis feather y rPython. Hoy los vais a ver trabajar juntos. Primero solo en R: library(feather) path <- "/tmp/my_data.feather" write_feather(cars, path) my_cars <- read_feather(path) Ahora, para pasarle datos a Python: library(rPython) python.exec("import feather") python.exec("a = feather.read_dataframe('/tmp/my_data.feather')") python.exec("print a") Y, finalmente, para crear datos grandes en Python y devolvéselos a R: python.exec("import numpy as np") python.exec("import pandas as pd") python.exec("arr = np.random.randn(10000000)") python.exec("arr[::10] = np.nan") python.exec("df = pd.DataFrame({'column_{0}'.format(i): arr for i in range(10)})") python.exec("feather.write_dataframe(df, '/tmp/test.feather')") python.data <- read_feather("/tmp/test.feather") dim(python.data) #[1] 10000000 10 Los tiempos, que los mida cada cual.

6 de abril de 2016 · Carlos J. Gil Bellosta

¿Nos vemos en el Machine Learning Spain XII?

Porque voy a dar una charla en él. Es este jueves, por la tarde, en el Campus de Google de Madrid (los detalles). Se tratará de una introducción a y justificación de aproximaciones más bayesianas de lo habitual a problemas reales del análisis de datos. Que comenzará con una explicación sobre cuándo 100% no significa 100% para terminar con lo que viene siéndome habitual últimamente: un ejemplo en rstan con su discusión.

5 de abril de 2016 · Carlos J. Gil Bellosta

Túneles ssh para conectarse de manera segura con RStudio Server

La solución que presenté el otro día para resolver el problema en cuestión, tal como indicó Iñaki Úcar, es demasiado aparatosa. La alternativa a mi propuesta ssh -ND 2001 miusuario@datanalytics.com y todo lo que sigue es crear un túnel ssh mediante ssh -NL 2001:localhost:8787 miusuario@datanalytics.com y conectarse a la sesión remota de RStudio apuntando en cualquier navegador a http://localhost:2001. El comando anterior exige la debida exégesis, que nunca había tenido del todo clara. Lo que hace es, primero, crear una conexión entre mi ssh local, el ordenador en el que lanzo el comando, y mi ssh remoto (el servidor con nombre datanalytics.com). Eso es lo que verán los terceros: una conexión ssh entre dos máquinas. ...

4 de abril de 2016 · Carlos J. Gil Bellosta

Redirección dinámica de puertos para conectarse de manera segura con RStudio Server

Finalmente, instalé RStudio Server en la máquina que está sirviéndote esta página. Pero no dejo abierto el puerto 8787 al exterior ni jarto de vino. (De hecho, veréis que desde hace un tiempo a este blog escucha en el puerto 443 y, aunque esa es otra historia, utiliza HTTP/2). Así que lo he configurado para que solo se pueda acceder a él desde localhost, i.e., que no admita conexiones remotas, añadiendo la línea ...

1 de abril de 2016 · Carlos J. Gil Bellosta

Cartociudad

caRtociudad es esto. Más noticias habrá.

31 de marzo de 2016 · Carlos J. Gil Bellosta

Funciones de densidad log-cóncavas

Las funciones de densidad log-cóncavas son aquellas cuyo logaritmo es una función cóncava. Por ejemplo, la normal: el logaritmo de su función de densidad es, constantes aparte, $-x^2/2$. El producto de dos funciones de densidad log-cóncavas es log-cóncava: $\log(fg) = \log f + \log g$ (y la suma de cóncavas es cóncava: calcula la segunda derivada). También lo son la suma de dos variables aleatorias cuyas funciones de densidad lo son (la demostración es consecuencia de esta desigualdad). ...

30 de marzo de 2016 · Carlos J. Gil Bellosta

El AUC es la probabilidad de que...

Voy a constuir unos datos artificiales y un modelo de clasificación binaria, library(mgcv) library(ggplot2) library(pROC) n <- 10000 dat <- gamSim(1, n=n, dist="binary", scale=.33) lr.fit <- gam(y ~ s(x0, bs="cr") + s(x1, bs="cr") + s(x2, bs="cr") + s(x3, bs="cr"), family=binomial, data=dat, method="REML") y luego (mal hecho: debería hacerlo sobre un conjunto de validación distinto) a obtener las predicciones para las observaciones res <- data.frame(real = factor(dat$y), prob = predict(lr.fit, type = "response")) que ggplot(res, aes(x=prob, fill=real)) + geom_density(alpha=.3) representa así: Me pregunto si el clasificador construido es bueno. Para lo cual voy a construir la curva ROC con sies <- res[res$real == "1",] noes <- res[res$real == "0",] scores <- 0:100 / 100 q.si <- ecdf(sies$prob)(scores) q.no <- ecdf(noes$prob)(scores) plot(q.si, q.no, type = "l") que produce ...

29 de marzo de 2016 · Carlos J. Gil Bellosta

Un ejemplo de "importance sampling" (que no sé cómo traducir)

Imaginemos que queremos muestrear una variable aleatoria cuya función de densidad es (proporcional a) el producto de otras dos (no necesariamente propias). Por ejemplo, la gamma, cuya función de densidad es $K x^{k-1} \exp(-\lambda x)$, el producto de una exponencial y una distribución impropia con densidad $x^{k-1}$. Supongamos que no sabemos hacer set.seed(1234) shape <- 3 rate <- 3 m0 <- rgamma(1000, shape = shape, rate = rate) Pero supongamos que sí que sabemos muestrear la distribución exponencial, lo que permite escribir: ...

28 de marzo de 2016 · Carlos J. Gil Bellosta

Caret y rejillas: ¿es necesario utilizar fuerza bruta?

Durante la charla de Carlos Ortega del pasado jueves sobre el paquete caret y sus concomitancias, se planteó el asunto de la optimización de los parámetros de un modelo usando rejillas (grids) de búsqueda. Cuando un determinado algoritmo depende de, p.e., cuatro parámetros, se puede definir una rejilla como en gbmGrid <- expand.grid(interaction.depth = c(1, 5, 9), n.trees = (1:30)*50, shrinkage = 0.1, n.minobsinnode = 20) y caret se encarga de ajustar el modelo bajo todas esas combinaciones de parámetros (90 en el ejemplo) para ver cuál de ellas es, con las debidas salvedades, óptima. ...

21 de marzo de 2016 · Carlos J. Gil Bellosta

Modelos mixtos para preprocesar datos en un sistema de recomendación de drogas

Sí, de drogas de las que mantienen despierto al lumpenazgo. Porque he encontrado (aquí) un conjunto datos muy interesante sobre la valoración que una serie de personas, unas 900, da a una serie de drogas más o menos legales que se llaman —me acabo de enterar— nootrópicos. El gráfico extraído de la página enlazada más arriba resume parte de los resultados. No obstante, es sabido entre los que se dedican a los sistemas de recomendación que hay usuarios que tienden a valorar sistemáticamente por encima de la media y otros, por debajo. En los manuales de la cosa suelen recogerse mecanismos más o menos sofisticados para mitigar ese efecto y normalizar las valoraciones entre usuarios. Generalmente, solo exigen matemáticas de bachillerato. Y son meras aproximaciones que no tienen en cuenta circunstancias tales como que puede que un usuario da valoraciones bajas solo porque evalúa productos malos, etc. ...

18 de marzo de 2016 · Carlos J. Gil Bellosta