domingo, 3 de julio de 2016

Analisis de Componentes Principales


El Análisis de Componentes Principales (ACP o PCA en ingles) es una técnica de reducción de la dimensionalidad que busca extraer toda la información de un data set en unas pocas variables no correlacionadas entre si.

La información puede considerarse como la cantidad de grados de libertad que tiene “una vaiable”, y la varianza puede ser una medida que nos de una aproximacion de qué tanta información tiene una variable. Conceptualmente seria así:





















Los componentes principales de un data set de dos variables seria algo así:















sábado, 9 de abril de 2016

Agregar variables de PCA

Una forma de redefinir las variables  es usar Analisis de Componentes Principales (o PCA por Principal Component Analysis), que es una combinación lineal de las variables originales que busca resumir todas las variables en unas pocas variables combinadas. Muchas veces, agregar los componentes principales al data set mejora los resultados de los algoritmos predictivos.

El siguiente script calcula los componentes principales de un data set, y agrega únicamente los componentes principales para tener el 99% de la proporción de la variabilidad.

Conceptualmente seria así:






















....

lunes, 28 de marzo de 2016

Transformar variables usando Box-Cox

Si se tiene un data set con variables que no tienen una distribución normal, y se quiere transformar esas variables para obtener mayor información de ellas, una forma es usar la transformación de box-cox, que busca un valor "lambda" para elevar la variable hasta encontrar la desviaciones estándar más cercana a cero, y así obtener una nueva variable con una distribución más "normal". Para detalles de box-cox ver referencia.

Conceptualmente las transformaciones quedan así:












 y el data set queda así:


domingo, 13 de marzo de 2016

Binarizar variables continuas

El siguiente script transforma las variables continuas en múltiples variables binarias (0,1) que indican a qué cuartil pertenece la observación para cada variable.
Esto para usar en algoritmos (como las redes neuronales) que aprenden mas rápido con datos binarizados.

Usando el data set iris, conceptualmente queda así:













viernes, 25 de diciembre de 2015

Regresion con Red Neuronal


El siguiente script utiliza el package neuralnet para hacer una regresion y predecir el valor de viviendas (expresado en \$1000), usando el data set Boston incluido en el package MASS.

Para un mejor ajuste del modelo (es decir, para que la red aprenda mejor), se hace un preprocesamiento de los datos, donde se normaliza el data set, quedando asi:







domingo, 1 de noviembre de 2015

Red Neuronal con dataset iris

Script con red neuronal para predecir la variable Species del data set iris. Para detalles sobre redes neuronales, ver referencias.



Conceptualmente el modelo queda así:






domingo, 11 de octubre de 2015

Bagging en Paralelo con foreach+doParallel


Si se quiere entrenar un modelo usando la tecnica de bagging (ver concepto de bagging AQUI) y se tienen muchos datos, puede que el proceso demore mucho tiempo.

Una forma de reducir el tiempo es paralelizando los procesos, asignando a cada procesador una parte de los modelos a entrenar y luego unificar los resultados en un único modelo.

Conceptuelmente seria así:





domingo, 27 de septiembre de 2015

Graficos con qplot de ggplot2


Ejemplos de algunos graficos con funcion qplot del package ggplot2, usando data set mtcars y diamonds incluidos en el package:

martes, 8 de septiembre de 2015

Graficar Kmeans con clase conocida

Si se tienen datos con una clase definida, y se quiere saber qué tan bien pude segmentar el algoritmo Kmeans estas clases (para clases futuras), puede usarse PCA para graficar las observaciones.

En el siguiente gráfico se asigna un color diferente a cada cluster, y un símbolo diferente a cada clase conocida, para identificar donde se "equivocó" el cluster.


















NOTA:
Para otro ejemplo de graficar Kmeans ver publicacion AQUI.
Para concepto de Kmeans, ver publicacion AQUI

El script seria este:
modelo.km <- kmeans(iris[,-5],3)
acp       <- prcomp(iris[,-5])    
data.grf  <- data.frame( pca1  = acp$x[,1],
                         pca2  = acp$x[,2],
                         color = modelo.km$cluster)
plot(data.grf[,1:2],col=data.grf[,3], pch=as.integer(iris[,5]))