Aprendizaje no supervisado#

Nota

Los trozos de código de esta página son de R. Por favor, ejecútelos en Colab o Binder

Introducción#

En el aprendizaje no supervisado se tienen tablas de datos donde no hay una variable de respuesta. Lo que se busca es «entender» los datos, buscar patrones de comportamiento en ellos, describir y explorar lo que está oculto. En el aprendizaje se mencionan como técnicas de visualización. En Estadística se habla de un área de ella, la descriptiva: univariada, bivariada y multivarida. Los índices estadísticos complementan a los gráficos. Los gráficos son más fáciles de comprender por nuestro cerebro y esa es la razón de que se busquen representaciones y resúmenes gráficos.

Para entender la información que emerge de los datos, es necesario conocer el contexto del entorno del que los datos forman parte: metainformación. La metainformación más próxima a los datos puestos en una tabla, está en los nombres de las filas y columnas. En las filas generalmente, se ponen las unidades estadísticas, claramente definidas en el estudio que está desarrollando. Usamos el nombre genérico de individuos para esas unidades estadísticas. En los datos más estructurados, las columnas suelen ser las variables o características que queremos observar.

Visualizar, entender, describir, explorar los datos, es también útil, antes de abordar modelos de aprendizaje supervisado. Entender la realidad a través de los datos ayuda a selecciones mejor los modelos y podrían ayudar a llegar a los modelos adecuados de forma más rápida.

Las tablas de datos de individuos por variables continuas se conocen como matrices en el Álgebra lineal, el área de las matemáticas que nos sirve para ver las tablas como puntos en es representaciones geométricas multidimensionales. En lugar de tratar de entender la tabla de datos (digital) observamos su representación gráfica (analógica).

Se suelen utilizar letras mayúsculas para representar a las matrices. Las tablas de individuos, usaremos n para indicar el número de filas (individuos) y p para el número de variables. Si denotamos por Y la matriz, tiene dimensiones n por p, es decir n individuos. Se suelen utilizar los subíndices i y j para recorrer filas y columnas.

Matriz

Fuente: Medium

La representación de una matriz de números reales (variables continuas) y su visualización mediante proyecciones da origen al método de análisis en componentes principales. Esta representación hace uso de una parte del Álgebra lineal, que se puede denominar: espacios vectoriales con producto interno. El producto interno que se define haciendo uso de una matriz cuadrada, simétrica y definida positiva, por las condiciones que debe cumplir. La más sencilla es la matriz identidad, como es cuadrada, el número de filas es igual al número de columnas, y es el orden de la matriz.

La geometría de nuestra vida diaria está en 3 dimensiones y la matriz que define el producto interno es I\(_3\):

I=diag(3); I
A matrix: 3 × 3 of type dbl
100
010
001

De la matriz de métrica se derivan: normas, distancias, proyecciones, ángulos. Para la matriz Y se tienen dos representaciones que denominamos nubes de puntos y denotamos por N con un subíndice para tener el número de puntos que hay en la nube. Para la tabla Y (\(n\times p\)) tenemos la nube de filas o individuos N\(_n\), en \(\mathbb{R}^p\) y la nube de columnas o variables N\(_p\), en \(\mathbb{R}^n\). Para que los vectores de la representación geométrica de las variables muestren los resúmenes estadísticos de las variables, el espacio vectorial \(\mathbb{R}^n\) denota la métrica \(\frac{1}{n}\mathbf{I}\). Por ejemplo, si \(n=5\) es \(\frac{1}{5}\mathbf{I}\):

1/5*diag(5)
A matrix: 5 × 5 of type dbl
0.20.00.00.00.0
0.00.20.00.00.0
0.00.00.20.00.0
0.00.00.00.20.0
0.00.00.00.00.2

La generalización del ACP, utilizando otras métricas y transformando previamente las tablas que se desean explorar, permite tener imágenes geométricas para: tablas de contingencia, frecuencias y otras de números positivos (Análisis de correspondencias simples); y para tablas de individuos por variables cualitativas (Análisis de correspondencias múltiples). A continuación se muestras un esquema de esos tres métodos factoriales o en ejes principales:

Primera imagen

Lo que muestra la figura es la proyección de nubes de puntos que están en muchas dimensiones en planos. Si partimos de un espacio de 100 dimensiones podemos hacer una primera lectura en el mejor plano, es decir en el que menos se deforman las longitudes o normas de los vectores, que equivale a que se pierde menos de las longitudes de los vectores. Seguramente un plano no es suficiente y hay que decidir cuál es la dimensión del subespacio S que se va a observar. Si decidimos observar en \(S=5\) dimensiones es subespacio es \(\mathbb{R}^5\) y tampoco lo puedo ver y tendríamos que leer varios planos. El primero formado por los nuevos ejes 1 y 2 es el mejor plano y en principio debería observar las 10 parejas de planos.

Otra manera de resumir la información es hacer una partición: grupos o clases disyuntos y cuya unión es el conjunto de todos los datos. Aquí aprovechamos las representaciones geométricas de los métodos factoriales. Entonces se trata de buscar grupos geométricamente, los métodos que se asocian a esa búsqueda son el \(K{-}means\), algoritmo que busca una partición directa. Tiene ventajas pero tiene dos problemas: hay que darle al algoritmo el número de clases K y ese número que queremos decidir a partir de la estructura de los datos; y generalmente converge a un óptimo local y no global, es decir que la partición en \(K\) clases depende de los puntos iniciales. Entonces se usa el método de Ward, de clasificación ascendente jerárquica aglomerativa, como una manera de solucionar esos dos problemas. Estos métodos se tratan de clasificación no supervisada o agrupamiento, en inglés se conocen como Cluster Analysis. Los algoritmos de clasificación ascendente jerárquica aglomerativa parte de los n individuos, se unen los dos más cercanos para formar un grupo y se tiene una partición de \(n-1\) grupos: uno de dos individuos y \(n-2\) de uno. El grupo formado pasa a jugar el papel de un individuo, de modo que se sigue el procedimiento hasta llegar a un solo grupos de \(n\) individuos. Este proceso se puede ver como un árbol y de su observación podemos decidir sobre una o más particiones. Una partición se obtiene al cortar el árbol lo que origina K ramas separadas, que corresponden a las clases. Los dos problemas de este segundo tipo de métodos son: su consumo de recursos de cómputo y la restricción de anidamiento de las particiones. En la figura se muestra un árbol pequeño.

k-means

FuenteMedium

Cuando el número de individuos es muy grande, se realiza \(K{-}means\) para obtener una partición en miles de clases, que entrarán al método de Ward. Para el segundo problema se realiza una optimización o consolidación de la partición obtenida con el \(K{-}means\). Nótese que el método de Ward provee una manera de solucionar los dos problemas del \(K{-}means\): provee el número K de clases y los puntos iniciales. A su vez el \(K{-}means\) provee una solución a los problemas del método de Ward: la saturación del sistema de cómputo y la restricción de anidamiento de la partición.

data(iris)
hcl <- hclust(dist(iris[,-5]),method="ward.D2")
barplot(hcl$height[149:130],horiz=TRUE) 
../../_images/AprendizajeNoSupervisado_15_0.png
plot(hcl)
../../_images/AprendizajeNoSupervisado_16_0.png

En el libro Estadística descriptiva multivariada, se explican estos métodos. Se puede bajar de la página de la Facultad de Ciencias, en este link.

Descripción bivariada simultánea#

Estoy llamando Descripción univariada simultánea cuando observamos a la vez las descripciones bivariadas da varias parejas de variables. Para hacerlo las variables según las escalas de medida se dividen solo en dos tipos: cualitativas (nominales e ordinales) y continuas (de intervalo de razón). Entonces, se tienen tres tipos de parejas de variables:

  1. Dos continuas.

  2. Una cualitativa y una continua.

  3. Dos cualitativas.

En estas descripciones se privilegian las descripciones gráficas.

Descripción bivariada de varias parejas de variables continuas#

En FactoClass hemos programado la función plotpairs que enriquece la función pairs de R, dejando los diagramas de dispersión en la parte triangular inferior del panel de gráficas, en la parte triangular superior se grafican curvas de nivel de densidades kernel bivariadas, y el panel de la diagonal se utiliza para dibujar las densidades kernel de las marginales.

Vamos a utilizarla para ver las seis parejas de las cuatro variables. En el Colab no está disponible el paquete FactoClass, por lo tanto tenemos que instalarlo:

#install.packages("FactoClass")

Para hacer disponibles sus funciones hay que cargarla:

library(FactoClass)
Loading required package: ade4
Loading required package: ggplot2
Loading required package: ggrepel
Loading required package: xtable
Loading required package: scatterplot3d

Ahora sí la gráfica:

data(iris)
plotpairs(iris[,1:4])
../../_images/AprendizajeNoSupervisado_26_0.png

En este panel de gráficas podemos explorar la existencia de grupos. Vemos claramente dos grupos en todos los diagramas de dispersión y una separaciones claras, en los contornos de las densidades kernel, cuando una de las variables es la longitud del pétalo. Las variables longitud y ancho del pétalo son las que mejor separan entre los dos grupos.

En el ejemplo iris se conocen que las flores son de tres especies y podemos explorar su separación identificando la pertenencia a las clases con símbolos y colores. La función plomatrix del paquete amun programado por tres estudiantes de algún curso Análisis multivariado de la Carrera de Estadística, lo hace. Sin embargo no está en el CRAN y la voy a utilizar desde mi consola de R:

Ejecutar desde consola

Las gráficas se pueden complementar con las matriz de varianzas y covarianzas; y la de correlaciones:

round(var(iris[,-5]),2)
A matrix: 4 × 4 of type dbl
Sepal.LengthSepal.WidthPetal.LengthPetal.Width
Sepal.Length 0.69-0.04 1.27 0.52
Sepal.Width-0.04 0.19-0.33-0.12
Petal.Length 1.27-0.33 3.12 1.30
Petal.Width 0.52-0.12 1.30 0.58
as.dist(round(cor(iris[,-5]),2))
             Sepal.Length Sepal.Width Petal.Length
Sepal.Width         -0.12                         
Petal.Length         0.87       -0.43             
Petal.Width          0.82       -0.37         0.96

Descripción bivariada de una variable cualitativa y varias continuas#

Una variable cualitativa representa una partición del conjunto de individuos. Un boxplot puede comparar los grupos según una variable cualitativa. En el ejemplo iris veamos los boxplot de las tres especies para la longitud del pétalo.

boxplot(iris[,3]~iris[,5])
../../_images/AprendizajeNoSupervisado_34_0.png

La asociación de una variable cualitativa y otra continua se puede resumir con la razón de correlación, definida como varianza entre grupos sobre varianza total (ver en el libro). Con la función centroids{FactoClass} calculan las medias y las razones de correlación de las tres especies.

centroids(iris[,-5],iris[,5])
$centroids
A matrix: 3 × 4 of type dbl
Sepal.LengthSepal.WidthPetal.LengthPetal.Width
setosa5.0063.4281.4620.246
versicolor5.9362.7704.2601.326
virginica6.5882.9745.5522.026
$weights
setosa
0.333333333333333
versicolor
0.333333333333333
virginica
0.333333333333333
$cr
A matrix: 1 × 4 of type dbl
Sepal.LengthSepal.WidthPetal.LengthPetal.Width
0.61870570.40078280.94137170.9288829

Finalmente con la función cluster.carac{FactoClass) se pueden observar las variables que más caracterizan a cada una de las tres especies.

cluster.carac(iris[,-5],iris[,5],tipo.v="co")
class: setosa
             Test.Value Class.Mean Frequency Global.Mean
Sepal.Width       7.365      3.428        50       3.057
Sepal.Length     -8.757      5.006        50       5.843
Petal.Width     -10.831      0.246        50       1.199
Petal.Length    -11.264      1.462        50       3.758
------------------------------------------------------------ 
class: versicolor
             Test.Value Class.Mean Frequency Global.Mean
Petal.Length      2.463       4.26        50       3.758
Sepal.Width      -5.709       2.77        50       3.057
------------------------------------------------------------ 
class: virginica
             Test.Value Class.Mean Frequency Global.Mean
Petal.Width       9.392      2.026        50       1.199
Petal.Length      8.801      5.552        50       3.758
Sepal.Length      7.788      6.588        50       5.843

Descripción bivariada de una variable cualitativa por varias nominales#

La asociación entre dos variables cualitativas se puede observar gráficamente con los perfiles fila y columna, derivados de la tabla de contingencia. Podemos utilizar el ejemplo del libro para observar la asociación entre las carreras y la edad. La función plotct{FactoClass} permite hacerlo:

data(admi)
names(admi)
K<-unclass(table(admi$carr,admi$edad)) # tabla de contingencia como matriz
addmargins(K)
  1. 'carr'
  2. 'mate'
  3. 'cien'
  4. 'soci'
  5. 'text'
  6. 'imag'
  7. 'exam'
  8. 'gene'
  9. 'estr'
  10. 'orig'
  11. 'edad'
  12. 'niLE'
  13. 'niMa'
  14. 'stra'
  15. 'age'
A matrix: 8 × 5 of type dbl
a16ma17a18a19MSum
Biol 15 27 9 12 63
Esta 18 28 5 15 66
Farm 18 2615 14 73
Fisi 21 3412 15 82
Geol 11 25 2 7 45
Mate 11 14 5 23 53
Quim 24 17 8 14 63
Sum11817156100445
plotct(K,"row",col=c("darkgreen","green","yellow","orange"))
../../_images/AprendizajeNoSupervisado_42_0.png
 plotct(K,"col",col=1:7)
../../_images/AprendizajeNoSupervisado_43_0.png

Para ordenar por las variables sociodemográficas que más caraterizan a las carreras.

chisq.carac(admi[,8:11],admi[,1])
A matrix: 3 × 5 of type dbl
chi2dfrpvaltvalphi2
gene44.10803 67.036257e-085.2642990.09911918
estr29.19000123.691872e-032.6790220.06559551
edad33.55344181.429273e-022.1891570.07540098

Finalmente para ordenar por las categorías de las variables sociodemográficas que más caracterizan a las carrera.

cluster.carac(admi[,8:11],admi[,1],tipo.v="nomi")
class: Biol
[1] Test.Value p.Value    Class.Cat  Cat.Class  Global     Weight    
<0 rows> (or 0-length row.names)
------------------------------------------------------------ 
class: Esta
[1] Test.Value p.Value    Class.Cat  Cat.Class  Global     Weight    
<0 rows> (or 0-length row.names)
------------------------------------------------------------ 
class: Farm
          Test.Value p.Value Class.Cat Cat.Class Global Weight
gene.F         5.152   0.000      31.2      54.8   28.8    128
edad.a18       2.252   0.024      26.8      20.5   12.6     56
estr.alto     -2.281   0.023       8.6       9.6   18.2     81
gene.M        -5.152   0.000      10.4      45.2   71.2    317
------------------------------------------------------------ 
class: Fisi
       Test.Value p.Value Class.Cat Cat.Class Global Weight
gene.M      3.045   0.002      21.8      84.1   71.2    317
gene.F     -3.045   0.002      10.2      15.9   28.8    128
------------------------------------------------------------ 
class: Geol
           Test.Value p.Value Class.Cat Cat.Class Global Weight
estr.alto       3.677   0.000      22.2      40.0   18.2     81
edad.a17        2.554   0.011      14.6      55.6   38.4    171
estr.medio     -3.242   0.001       4.9      20.0   41.6    185
------------------------------------------------------------ 
class: Mate
          Test.Value p.Value Class.Cat Cat.Class Global Weight
edad.a19M      3.683   0.000      23.0      43.4   22.5    100
gene.M         3.218   0.001      14.8      88.7   71.2    317
edad.a17      -2.089   0.037       8.2      26.4   38.4    171
gene.F        -3.218   0.001       4.7      11.3   28.8    128
------------------------------------------------------------ 
class: Quim
          Test.Value p.Value Class.Cat Cat.Class Global Weight
edad.a16m      2.320   0.020      20.3      38.1   26.5    118
edad.a17      -2.189   0.029       9.9      27.0   38.4    171