domingo, 6 de noviembre de 2016

Text Mining con Twiter

El siguiente ejemplo utiliza texto de twitter clasificado previamente como POS, NEG o SEM para predecir si un tweet es positivo, negativo o imparcial sobre amazon. La técnica usada para representar el texto es bag-of-words, donde se mide la aparición de la palabra y no su orden. Estos tweets fueron copiados de la cuenta pública de @amazon.

NOTAS:
Para mismo ejemplo en PYTHON, ver nota publicada AQUI
El excel con las imágenes se puede descargar AQUI
Para este ejemplo se utilizó la libreria tm_0.6-2

El proceso general sigue estos pasos:

1. Cargar Datos
Para este ejemplo, los datos se cargan de un archivo csv en Dropbox, el cual tiene dos columnas: el texto y la clase a predecir. Conceptualmente queda así:











2. Crear Corpus
El corpus es un conjunto de documentos, que pueden ser artículos periodísticos, noticias, currículos, tweets, chat, o cualquier colección de textos que se vaya a utilizar para predecir/clasificar. En este ejemplo se usan tweets, y la columna "texto" del csv será el corpus.

Una forma de crear el corpus en R es usando la libreria tm de la siguiente forma:
- Crear un objeto VectorSource que será el origen de datos que luego se utiliza para crear un corpus volatil o vcorpus
- Crear un objeto VCorpus que es un corpus que se guarda en memoria, con lo cual es volatil. En este objeto considera cada observación (tweet para este ejemplo) como un documento. El origen de datos para crear un vcorpus siempre será un VectorSource.
Para detalle sobre estos objetos, ver Referencia No.2

Conceptualmente seria así:












3. Limpiar Corpus
Luego que se tiene el VCorpus, se procede "limpiar" el corpus de la siguiente forma:
- Se sustituyen los signos de puntuación por espacios (replacePunctuation)
- Se eliminan los numeros (removeNumbers)
- Se elimina el doble espacio (stripWhitespace)
- Se convierte en minúscula todas las palabras (tolower)
- Se sustituyen algunas palabras abreviadas (stri_replace_all_fixed)
- Se transforma en documento plano (PlainTextDocument). Esto para cuando se usan funciones que no retornan un TextDocuments. Para detalle ver Ref. Nro 3
- Se eliman los sufijos de las palabras usando el algoritmo PorterStemmer (stemDocument). Para detalle ver referencia Nro. 4
- Se eliminan palabras sin significados, como pronombres, preposiciones, etc. usando el stopwords o lista de palabras que trae la libreria tm (removeWords). Para detalle ver referencia Nro. 4

Conceptualmente sería asi:















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, ya que se agrega otra representacion de los datos, donde las variables del PCA representan un hiperplano ortogonal, es deecir, variables no correlacionadas entre si. Para detalle del PCA ver nota y referencias publicadas AQUI.

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: