El objetivo del aprendizaje no supervisado es exploratorio. Encuentra estructuras y patrones ocultos en los datos.
El clustering agrupa los datos en base a similitudes entre ellos. La reducción de dimensionalidad trata de simplificar los datos para generar hipótesis o visualizarlos de forma más sencilla.
Clustering no jerárquico
Agrupa datos de la muestra en clusters en base a similitudes entre sus elementos individuales. El modelo intenta generar la menor suma de cuadrados de cada observación a su centro (total within cluster sum of squares).
center = n genera ncentros, tres valores que actúan de media para cada grupo. Cada elemento es asignado a uno de los grupos de forma aleatoria
El modelo asigna cada elemento al grupo que tenga su media más cerca; genera una nueva media y repite el proceso hasta que los centros dejan de moverse (o se alcanza un número máximo de iteraciones, iter.max = n)
nstart = n modifica el elemento aleatorio de kmeans, que marca la posición inicial de cada centro; realiza n posiciones iniciales para mejorar el modelo
Para determinar el punto que mejor define las agrupaciones con este método se puede dibujar un gráfico que represente el número de grupos en el eje x y suma total de los cuadrados en el eje y. El punto en el que el gráfico se acoda indica el punto de mayor discriminación.
La agrupación aglomerativa es útil cuando no se conoce con certeza el la estructura de la muestra y se quieren determinar cuantos grupos existen; considera cada elemento como un grupo, al cuál va añadiendo elementos similares de forma progresiva (hclust, agnes).
La agrupación divisiva es útil cuando se quiere controlar el número de grupos que se van a generar - segmenta la muestra original de forma progresiva hasta obtenerlos (diana).
Agrupamiento jerárquico aglomerativo
Se define un cluster con cada uno de los \(n\) puntos de la muestra. En cada iteración se fusionan los dos cluster más próximos entre sí hasta que se consume la muestra. Las distancias utilizan el vector multidimensional de cada elemento.
Este proceso genera un dendrograma, que relaciona los grupos y las distancias entre ellos. El último definie la distancia que se considera relevante para diferenciar los grupos generados.
dist() calcula las distancias entre elementos (la distancia Euclidiana; devuelve una matriz de distancias). hclust() aplica el clustering jerárquico. Se puede representar después con plot():
iris_dist <-dist(iris[,1:4])iris_clst <-hclust(iris_dist)plot(iris_clst, main ="Agrupamiento jerárquico aglomerativo")
Definir los clusters
cutree corta el árbol definiendo h (la altura) o k (el número de clusters deseado) - devuelve un vector con un factor.
scale.= aparece como FALSE por defecto; pero en general tiene sentido escalar las varianzas antes (y help(prcomp) lo recomienda).
Preparar los datos
Muchos de los modelos requieren preparar los datos previamente
estandarizando todas las variables
eliminando las que no sean numéricas
Para la estandarización, escalamos las variables para obtener una distribución normal \(X \sim N(0,1)\):
\[
z = \dfrac{x - \mu}{\sigma}
\]
Aunque algunas funciones (como prcomp) permiten escalar los datos antes del análisis pasando la opción scale. = TRUE (o algo parecido), es buena idea revisarlos y prepararlos de antemano
dd <- survival::diabetichead(dd,3)
id laser age eye trt risk time status
1 5 argon 28 left 0 9 46.23 0
2 5 argon 28 right 1 9 46.23 0
3 14 xenon 12 left 1 8 42.50 0
id age trt risk time status
[1,] -1.752093 0.4873237 -0.9987302 -0.4731892 0.4987246 -0.8042944
[2,] -1.752093 0.4873237 0.9987302 -0.4731892 0.4987246 -0.8042944
[3,] -1.733930 -0.5928762 0.9987302 -1.1511404 0.3240656 -0.8042944
La presencia de un factor como variable del conjunto de datos puede alterar el análisis (se interpreta como numérico aunque no lo sea). Hay soluciones a este problema.
Los factores ordinales pueden ser aceptables.
En iris, difícil visualizar las relaciones entre grupos utilizando las cuatro dimensiones numéricas; utilizando PCA reducimos las dimensiones y facilitamos la interpretación:
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 1.7084 0.9560 0.38309 0.14393
Proportion of Variance 0.7296 0.2285 0.03669 0.00518
Cumulative Proportion 0.7296 0.9581 0.99482 1.00000
Proportion of Variance devuelve la cantidad de la varianza explicada por cada PC. En iris, PC1 y PC2 explican el 96% de la varianza (73% y 23% respectivamente).
plot(irispca)
pca$x contiene los vectores de cada PC para poder examinarlos posteriormente:
t-SNE es una técnica de reducción dimensional no lineal que intenta condensar una variable multidimensional a dos o tres dimensiones. Agrupa elementos próximos e ignora elementos distantes1. Es útil para variables con un gran número de dimensiones.
Rtsne::Rtsne
Primero hay que eliminar duplicados de los datos con unique().
Los resultados de Rtsne son estocásticos - cada vez que se ejecuta devuelve resultados distintos.
uiris <-unique(iris[, 1:5])iristsne <- Rtsne::Rtsne(uiris[,1:4])plot(iristsne$Y, col = uiris$Species)
Escalar los datos
Al igual que en PCA, es posible escalar las dimensiones antes del análisis con pca_scale = TRUE. Los datos están centrados en 0 porque los datos están normalizados por defecto (normalize = TRUE). Ver escalar los datos.
Al igual que otros algoritmos (principalmente algoritmos de clasificación), t-SNE tiene dos parámetros que modifican sustancialmente los resultados:
Perplejidad
??? Iteraciones
el número de iteraciones hasta que el proceso de clustering finaliza
Song Y, Millidge B, Salvatori T, Lukasiewicz T, Xu Z, Bogacz R. Inferring neural activity before plasticity as a foundation for learning beyond backpropagation. Nature Neuroscience [Internet]. 2024 Feb [cited 2024 Dec 20];27(2):348–58. Available from: https://www.nature.com/articles/s41593-023-01514-1
4.
Jones E, Harden S, Crawley MJ. The R book. Third edition. Hoboken, NJ: Wiley; 2022.
5.
Field A, Miles J, Field Z. Discovering statistics using R. Repr. Los Angeles, CA, USA: Sage; 2014.