Guarjolización de fotos con R

Inspirado en esto aunque con la intención de mejorar el horrible código adjunto, escribí el otro día esto: library("biOps") library("cluster") # leo una foto usando readJpeg de biOps # el objeto devuelto es un array mxnx3 dimensional # la última dimensión es el rgb de cada pixel tmp <- tempfile() download.file("http://blog.guiasenior.com/images/Retrato_Garber.jpg", tmp) x <- readJpeg(tmp) # si quieres mostrar la foto como un gráfico... #plot(x) # convertimos el array 3D nxmx3 en uno 2D (nm)x3 # luego buscamos 5 clústers # esencialmente, buscamos 7 "píxels representativos" d <- dim(x) clarax <- clara(array(x, dim = c(d[1] * d[2], d[3])), 7) # reemplazamos cada rgb de cada cluster por su # "píxel representativo" (medioide) correspondiente rgb.clusters <- clarax$medoids[clarax$cluster,] # convertimos la matriz resultante en un array 3D # (invirtiendo la transformación anterior) # y representamos gráficamente plot(imagedata(array(rgb.clusters, dim = d))) Obviamente, podéis cambiar la foto y hacer variar el número de clústers. Pero conviene recordar que: ...

10 de marzo de 2014 · Carlos J. Gil Bellosta

Victoria o diferencia de puntos, ahora con "random forests"

Después de hablar con tirios y troyanos sobre mi entrada sobre los efectos de binarizar una variable objetivo continua, he decidido tomarme la justicia por mi mano y llamar a la caballería. Es decir, utilizar random forests. Aquí va el código: library(randomForest) set.seed(1234) my.coefs <- -2:2 n <- 200 train.n <- floor(2*n/3) test.error <- function(){ X <- matrix(rnorm(n*5), n, 5) Y <- 0.2 + X %*% my.coefs + rnorm(n) Y.bin <- factor(Y>0) train <- sample(1:n, train.n) X <- as.data.frame(X) X$Y <- Y modelo <- randomForest(Y ~ ., data = X[train,]) pred <- predict(modelo, X[-train,]) error.cont <- length(pred) - sum(diag(table(pred >0, Y[-train]>0))) X$Y <- Y.bin modelo <- randomForest(Y ~ ., data = X[train,]) pred <- predict(modelo, X[-train,]) error.bin <- length(pred) - sum(diag(table(pred, Y.bin[-train]))) data.frame(error.cont = error.cont, error.bin = error.bin) } errores <- do.call(rbind, replicate(1000, test.error(), simplify = F)) sapply(errores, fivenum) El resultado, si te interesa, en tu pantalla. ...

7 de marzo de 2014 · Carlos J. Gil Bellosta

Me han entrevistado en Big Data 4 Success

Aún tengo pendiente mirar en un diccionario qué es podcast. Pero ya he hecho uno. Tengo el honor de haber sido entrevistado por Jorge Ubero para Big Data 4 Success. La entrevista, aquí.

6 de marzo de 2014 · Carlos J. Gil Bellosta

¿Victoria o diferencia de puntos? ¿lm o glm?

Supongamos que queremos construir un modelo para predecir quién ganará un determinado partido de baloncesto basándonos en datos diversos. Y en un histórico, por supuesto. Podemos utilizar una regresión logística así: set.seed(1234) my.coefs <- -2:2 n <- 200 train.n <- floor(2*n/3) test.error.glm <- function(){ X <- matrix(rnorm(n*5), n, 5) Y <- (0.2 + X %*% my.coefs + rnorm(n)) > 0 train <- sample(1:n, train.n) X <- as.data.frame(X) X$Y <- Y mod.glm <- glm(Y ~ ., data = X[train,], family = binomial) glm.pred <- predict(mod.glm, X[-train,], type = "response") error <- length(glm.pred) - sum(diag(table(glm.pred > 0.5, Y[-train,]))) } errores.glm <- replicate(1000, test.error.glm()) El código anterior hace lo siguiente: Crea las variables aleatorias X (unos predictores) e Y (el resultado de los partidos). Ajusta un modelo logístico a un subconjunto de los datos. Predice sobre el complementario de dichos datos, el conjunto de prueba. Mide el error cometido. Itera el proceso anterior y guarda los errores de clasificación cometidos. Nótese que la variable objetivo es binaria por construcción. ...

4 de marzo de 2014 · Carlos J. Gil Bellosta

El chocheo de los dioses

Uno tiene —o tuvo— dioses. Sentir admiración por alguien (y su obra) tiene, lo admito, una dimensión infantil. Es también, por supuesto, una sobre simplificación de la realidad. Porque la verdad no la escriben cuatro plumas: las ideas valiosas emergen por doquier. Desafortunadamente, nadie tiene tiempo para filtrar el flujo diario de noticias, libros, conceptos. Así que creo que es excusable que, por simplificar, uno eleve personal y subjetivamente a una serie de individuos a la categoría de dioses, de encargados de filtrar la información. De alguna manera, se conviertan en oráculos personales que desentrañan la complejidad del día a día y se convierten en fuente de preguntas y acaso respuestas. ...

3 de marzo de 2014 · Carlos J. Gil Bellosta

Selección de enlaces: redes sociales, gráficos con R, ofertas de trabajo y p-valores

Acá va otra selección de cuatro enlaces relevantes –que no necesariamente nuevos— de la semana. El primero, Using Metadata to find Paul Revere recoge —a modo de historia que algunos encontrarán amena— una aplicación de rudimentos del álgebra lineal al análisis de redes sociales. Dada una matriz de incidencia A (personas que pertenecen a clubes) es posible calcular índices de proximidad entre personas (o entre clubes) calculando no más AA'. El resto hasta ganar el premio de Netflix es pura heurística. ...

28 de febrero de 2014 · Carlos J. Gil Bellosta

D. Hand sobre estadística y minería de datos

Voy a comentar y recomendar hoy un artículo, Statistics and data mining: intersecting disciplines (lo siento, he perdido el enlace para su libre descarga), del siempre recomendable David Hand. Trata de un asunto que para muchos de los que seáis estadísticos y trabajéis en el asunto rodeados de gente procedente de otras disciplinas —¡ay, esos ingenieros!—, seguro, os produce dolores de cabeza: esa brecha que separa los mundos de la estadística y de la llamada minería de datos (y de otras maneras más recientemente). ...

27 de febrero de 2014 · Carlos J. Gil Bellosta

Curso de análisis de datos 'ómicos' con R

Copio aquí el anuncio de un nuevo curso de análisis de datos (ómicos en este caso) con R: Nos complace anunciaros que el CREAL organiza la segunda edición del “Curso de análisis de estadístico de datos ómicos” que va a celebrarse los días 8, 9 y 10 de abril de 2014. Debajo podréis encontrar cómo hacer la inscripción que se llevará a cabo por estricto orden de petición ysolo será posible para los primeros 16 pre-inscritos. ...

26 de febrero de 2014 · Carlos J. Gil Bellosta

‘Quién es Quién’ del Big Data en España

Pues sí, aparezco en la infografía ‘Quién es Quién’ del Big Data en España: El responsable del homenaje, Jorge Ubero, está proyectando una serie de colaboraciones sobre el mundo del big data en España. La mía está pendiente —¡maldita agenda!— pero aparecerá en los próximos días. Mientras tanto y como abrebocas, os invito a conocer BigData 4 Success.

25 de febrero de 2014 · Carlos J. Gil Bellosta

Cuatro enlaces: sanidad, correos electrónicos, leyes y errores de programación

El primero es Freer trade in European and Spanish health care services y trata sobre los efectos en el sistema sanitario español de una directiva europea que liberaliza el acceso a los ciudadanos de al unión a los servicios de salud de otros países. En concreto, el artículo argumenta cómo España podría ser uno de los países más afectados por dos razones: El flujo de extranjeros que atrae el país. El diferencial de precios (mucho más baratos en España) que en el extranjero. Los efectos podrían ser tres: ...

21 de febrero de 2014 · Carlos J. Gil Bellosta