Tema 1
Aprendizaje Automático No Supervisado
Tema 1. Introducción al
aprendizaje automático no
supervisado
Índice
Esquema
Ideas clave
1.1. Introducción y objetivos
1.2. Descripción general
1.3. Términos clave en aprendizaje no supervisado
1.4. Retos en el aprendizaje no supervisado
1.5. Flujo de trabajo en el aprendizaje no supervisado
1.6. Importancia del preprocesamiento
1.7. Técnicas de transformación de datos
1.8. Técnicas de discretización de datos
1.9. Técnicas de codificación de datos categóricos
1.10. Cuaderno de ejercicios
1.11. Referencias bibliográficas
A fondo
Unsupervised Learning Algorithms in Big Data: An
Overview
Study of Dimensionality Reduction Techniques and
Interpretation of their Coefficients, and Influence on the
Learned Models
Aprendizaje supervisado, no supervisado y por refuerzo
Test
Esquema
Aprendizaje Automático No Supervisado 3
Tema 1. Esquema
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
1.1. Introducción y objetivos
E l aprendizaje automático ha revolucionado la manera en que las máquinas
interactúan con el mundo, permitiendo que los sistemas de información aprendan de
los datos y apoyen la toma de decisiones con base en la identificación de patrones y
experiencia previas. Dentro de este campo, el aprendizaje no supervisado y el
aprendizaje por refuerzo son dos áreas que permiten abordar problemas complejos
sin la necesidad de datos etiquetados de antemano o con la capacidad de aprender a
través de la interacción con el entorno.
En esta asignatura se verán diferentes algoritmos de aprendizaje no supervisado,
fundamentos, aplicaciones y diferentes implementaciones del K-Means, algoritmos
jerárquicos, algoritmos agrupamiento basado en densidad, técnicas lineales y no
lineales para reducción de dimensionalidad y técnicas para detección de anomalías.
Además, se introduce el aprendizaje por refuerzo detallado en el algoritmo Q-
learning.
El aprendizaje automático no supervisado se denomina así porque no
hay un supervisor externo proporcionando retroalimentación sobre cómo
debe ser clasificado un dato.
En este tema se describen términos clave, retos y flujos de trabajo en el aprendizaje
no supervisado. Además de detallar algunas técnicas de preprocesamiento que
deberían tenerse en cuenta antes de intentar modelar con aprendizaje no
supervisado.
Aprendizaje Automático No Supervisado 4
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
1.2. Descripción general
El aprendizaje automático no supervisado parte de la premisa de que incluso en
ausencia de un supervisor que indique cómo debe ser clasificado un dato, se puede
extraer conocimiento a partir de los datos sin procesar. El corazón del aprendizaje no
supervisado es la detección de patrones y estructuras de conjuntos de datos sin
etiquetas. Algunos autores expresan que este tipo de aprendizaje se puede comparar
con el proceso de examinar un cofre lleno de piedras preciosas variadas, cada una
tiene su brillo y su forma (Van Der Post y Smith, 2023).
Los algoritmos actúan como clasificadores de joyas, categorizando y entendiendo
cada gema o cada instancia del dataset basándose en sus características. El
proceso no sigue una guía explicita, la única brújula son los mismos datos.
Es una de las técnicas más conocidas; busca reunir instancias similares dentro de
clústeres o grupos, con base en la estructura de los datos.
Otra área es la reducción de dimensionalidad; simplifica la complejidad de los
datos y elige los componentes más importantes o aquellos que generan mayor
conocimiento sobre la estructura de los datos, haciendo que el conjunto de datos sea
más manejable y comprensible.
Generar reglas de asociación también es un problema no supervisado donde
encontrar reglas que describan una gran porción de datos, tales como clientes que
compran un producto y que, a su vez, tienden a comprar otro producto. Es muy útil,
en el análisis de la cesta de la compra, descubrir relaciones entre ítems en una gran
cantidad de datos, lo cual permite a las empresas diseñar estrategias de marketing
con promociones cruzadas.
Detectar anomalías es otra área del aprendizaje no supervisado. El algoritmo
detecta patrones en los datos; si estos son inusuales o atípicos puede indicar que se
Aprendizaje Automático No Supervisado 5
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
trata de una anomalía. Se utilizan algoritmos de agrupación para encontrar
agrupaciones entre los datos y luego identificar instancias que no encajan en ninguno
de los grupos o incluso se pueden encontrar grupos con pocas instancias que
pueden pertenecer a datos anómalos. Es muy útil en aplicaciones como detección de
fraude, detección de fallas en redes o en sistemas de producción, donde no siempre
se cuenta con etiquetas de las instancias fallidas.
En los últimos años, en la bioinformática, se ha aplicado el aprendizaje no
supervisado, el cual juega un papel fundamental en la secuencia genética. Los
algoritmos de agrupamiento ayudan a categorizar genes con expresiones o patrones
similares, los cuales pueden revelar variaciones genéticas, potenciales marcadores
para enfermedades. Esto puede permitir un avance en la medicina y tratamientos
personalizados.
En el procesamiento del lenguaje natural (PLN), los algoritmos no supervisados
también han sido utilizados. Por ejemplo, el algoritmo Latent Dirichlet Allocation
(LDA) puede descubrir temas latentes dentro de un gran conjunto de documentos o
textos. Esto permite acciones como la organización de bibliotecas, mejorar los
motores de búsqueda e incluso monitorizar análisis de sentimientos.
En el reconocimiento de imágenes, el aprendizaje no supervisado ha tenido un
profundo impacto. Aprende a representar y categorizar imágenes teniendo en cuenta
patrones existentes dentro de la propia imagen. Por ejemplo, en astronomía se
pueden clasificar objetos celestes y analizar una gran cantidad de datos recolectadas
por telescopios. Los clústeres les permiten a los astrónomos identificar grupos de
galaxias, estrellas y otros fenómenos astronómicos.
La reducción de dimensionalidad utilizando técnicas como PCA, t-SNE, son muy
utilizadas para la visualización de datos con una alta dimensionalidad y hacerlos más
interpretables. Permite a los científicos de datos descubrir patrones y correlaciones
que pueden no verse a simple vista (Van Der Post y Smith, 2023).
Aprendizaje Automático No Supervisado 6
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Por otro lado, el aprendizaje por refuerzo se basa en la interacción de un agente
con su entorno para maximizar una recompensa acumulativa. Aquí, el agente toma
decisiones secuenciales, aprendiendo de las recompensas o penalizaciones
recibidas como resultado de sus acciones. Este tipo de aprendizaje es
particularmente útil en entornos dinámicos donde las decisiones deben adaptarse
constantemente a cambios en el entorno.
Aprendizaje Automático No Supervisado 7
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
1.3. Términos clave en aprendizaje no supervisado
Al familiarizarse con los términos que se aplican en esta rama del aprendizaje
automático, se puede entender de manera profunda los algoritmos. Además de
mejorar la comunicación efectiva al querer intercambiar conocimientos en esta área.
Dentro de los términos más comunes se encuentran:
▸ Característica: es un concepto ya visto en aprendizaje supervisado. En esta
asignatura nos referimos a una dimensión en el conjunto de datos. La selección de
características influye en el rendimiento de los algoritmos no supervisados.
▸ Clúster o grupo: grupo de datos que comparten características similares. En
aprendizaje automático no supervisado se crean grupos, con el objetivo de
maximizar la distancia intra-clúster y minimizar la distancia inter-clúster.
▸ Dimensionalidad: es el número de características del conjunto de datos. La alta
dimensionalidad es un problema y un reto. Generalmente se utilizan técnicas para
reducir la dimensionalidad.
▸ Métrica de distancia: es una medida que indica qué tan similares son dos puntos;
fundamental para crear grupos. Las distancias más comunes son Euclidiana,
Manhattan y la del coseno.
▸ Outliers o datos atípicos: como su nombre lo dice, son datos que se desvían del
resto del conjunto de datos. Pueden ser eliminados después de un proceso de
limpieza.
▸ Centroide: el centro de un conjunto de datos.
▸ Vectores y valores propios: conceptos heredados del algebra lineal. Representan
la dirección de la máxima variación en los datos y son utilizados para pasar de una
alta dimensionalidad a un espacio de características menor.
Aprendizaje Automático No Supervisado 8
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Overfitting o sobreajuste: es un término que se utiliza para decir que un modelo
funciona muy bien con los datos de entrenamiento, pero no se puede aplicar a otros
datos. No tiene la capacidad de generalizar.
▸ Hiperparámetros: parámetros que se establecen en el momento inicial del
entrenamiento.
Aprendizaje Automático No Supervisado 9
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
1.4. Retos en el aprendizaje no supervisado
Al no tener etiquetas o un camino claro a seguir para modelar, se enfrenta a muchos
retos. Algunos de los retos del aprendizaje no supervisado son:
▸ Determinar el número óptimo de grupos en un dataset: un reto siempre presente.
Dentro de los métodos que existen para intentar predecir el número ideal de grupos
están la técnica del codo, análisis de silueta y el índice Davies-Bouldin. Sin embargo,
las técnicas mencionadas anteriormente necesitan de la experiencia de un humano
para tomar la decisión final.
▸ La maldición de la dimensionalidad: en conjuntos de datos con alta
dimensionalidad existe un alto riesgo de no encontrar grupos con características
comunes; por tal motivo, si se reduce la dimensionalidad se puede mitigar este
riesgo. Sin embargo, el proceso de reducción de la dimensionalidad debe hacerse de
manera muy estructurada para preservar la estructura de los datos.
▸ La escalabilidad de los algoritmos existentes: hoy en día los conjuntos de datos
son cada vez más grandes y el desempeño de los algoritmos puede no ser el óptimo
para grandes conjuntos de datos. Es necesario desarrollar algoritmos de aprendizaje
no supervisado escalables que puedan manejar datos masivos sin comprometer la
calidad de las agrupaciones obtenidas.
▸ Delimitar el ruido y los outliers: los datos ruidosos pueden distorsionar la
verdadera estructura de los datos y los grupos encontrados pueden no representar el
conjunto de datos analizado. Métodos robustos de clustering y filtro de ruido son
fundamentales.
▸ La interpretabilidad de los resultados: se puede estar frente a interpretaciones
subjetivas. Al no tener categorías o etiquetas predefinidas, asignar significado a cada
grupo creado va a depender del contexto y de la habilidad del experto o la experticia
en el dominio.
Aprendizaje Automático No Supervisado 10
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ No contar con métricas muy fuertes: las métricas sirven para validar el éxito o
fracaso de un algoritmo. Se necesitan métricas definidas y robustas para medir la
calidad y el desempeño de un algoritmo.
Aprendizaje Automático No Supervisado 11
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
1.5. Flujo de trabajo en el aprendizaje no
supervisado
Los principales pasos u hoja de ruta que deberíamos seguir en un proyecto de
aprendizaje no supervisado son los siguientes:
▸ Recolección de datos.
▸ Limpieza y preprocesamiento de datos.
▸ Preparación de los datos.
▸ Elegir y aplicar un algoritmo no supervisado.
▸ Entrenar y parametrizar el modelo.
▸ Interpretación de los resultados.
▸ Evaluación de los resultados.
El proceso inicia con la recolección; puede provenir de diferentes fuentes y en
diferentes formatos. En este paso se debe consolidar el dataset y asegurar la
consistencia. Una vez se tengan los datos, el siguiente paso es limpiarlos y
preprocesarlos. En esta etapa se eliminan o corrigen anomalías, se pueden incluir
técnicas de normalización o reescalado. Siguiendo con el flujo, se seleccionan las
características más importantes, reduciendo de esta manera el número de variables.
Una vez se tenga el dataset listo, se puede proceder con elegir y aplicar un
algoritmo, el cual se parametriza se entrena; una vez entrenado se interpretan los
resultados y si es satisfactorio se evalúan los resultados utilizando alguna métrica o
se repite el proceso de elegir, parametrizar y entrenar otro algoritmo.
A continuación, veremos el vídeo Aprendizaje no supervisado: conceptos básicos
y generalidades con un ejemplo sencillo en Python.
Aprendizaje Automático No Supervisado 12
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=5ab637da-b76d-
4ca8-ab42-b1ca00dd2f52
Aprendizaje Automático No Supervisado 13
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
1.6. Importancia del preprocesamiento
L a calidad del preprocesamiento influye directamente en la efectividad de las
siguientes tareas dentro del proceso, datos bien preprocesados permiten que los
algoritmos detecten mejor los patrones y las relaciones, generando un conocimiento
más preciso sobre el conjunto de datos.
Generalmente se encuentran datos inconsistentes, irrelevantes, que pueden sesgar
cualquier algoritmo de aprendizaje automático supervisado y no supervisado.
Uno de los primeros pasos es el manejo de datos faltantes. Si existen instancias
incompletas pueden introducir fallos en el modelo. Aquí se pueden utilizar estrategias
como imputación de datos o eliminación de faltantes.
Otro paso importante en el preprocesamiento es el escalado de características.
Fundamental en aprendizaje no supervisado, ya que algoritmos como K-Means son
muy sensibles a la escala de los datos. Se pueden llevar a cabo procesos de
estandarización o normalización para que todos los atributos contribuyan de la
misma forma. Previniendo así que una característica pese más que otra
influenciando al modelo.
Utilizar técnicas de transformación de datos, como transformación logarítmica, puede
ser importante. Esto ayuda a estabilizar la varianza, especialmente en características
que no siguen una distribución conocida.
Otro paso interesante y muy recomendado es la reducción de dimensionalidad, la
cual ayuda a eliminar ruido y mejorar el cálculo computacional.
Codificación de variables categóricas. Básicamente es convertir una variable no
numérica en un formato que entienda un algoritmo, transformar atributos en valores
numéricos.
Aprendizaje Automático No Supervisado 14
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Y, finalmente, limpiar el dataset de datos ruidosos como duplicados o corregir errores
de digitación o de ingreso inadecuado de datos.
En este tema veremos algunas técnicas de preprocesamiento que no se han visto en
la asignatura de Técnicas de Aprendizaje Automático Supervisado.
Aprendizaje Automático No Supervisado 15
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
1.7. Técnicas de transformación de datos
Se pueden aplicar técnicas lineales o no lineales con el objetivo de reducir asimetría,
convertir relaciones no lineales en lineales y mejorar la predicción.
Por ejemplo, utilizar una transformación logarítmica a cada punto puede reducir la
asimetría y estabilizar la varianza. Se utiliza este tipo de transformación cuando los
datos siguen una distribución de ley de potencia y se van a aplicar algoritmos que
asumen normalidad en los datos.
La transformación logarítmica es una extensión de la transformación de Box-Cox,
introduce un parámetro lambda (λ), el cual permite identificar la mejor transformación
de los datos para que se parezca más a una campana de Gauss. Esto lo hace
suavizando las distribuciones inusuales y mitigando los efectos de los valores
atípicos.
A continuación, se puede ver un ejemplo en Python, utilizando la librería de Scikit-
learn e importando la clase PowerTransformer:
import pandas as pd
from sklearn.preprocessing import PowerTransformer
# Leer el conjunto de datos desde un archivo CSV
data = pd.read_csv("tu_archivo.csv")
# Selecciona las columnas numéricas para transformar
numeric_cols = data.select_dtypes(include=['float64', 'int64']).columns
# Crear y ajustar el transformador de potencia
pt = PowerTransformer(method='yeo-johnson') # Selecciona 'box-cox' o 'yeo-
johnson' para el método de transformación
pt.fit(data[numeric_cols])
# Aplicar la transformación a las columnas numéricas
data[numeric_cols] = pt.transform(data[numeric_cols])
En el código, primero se importa pandas para leer el archivo .Csv. Después se
Aprendizaje Automático No Supervisado 16
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
identifican las columnas numéricas, en caso de que sean todas las columnas
numéricas las que se deseen transformar. Y, por último, se crea un objeto
PowerTransformer, para aplicar la transformación y actualizar las columnas con los
valores transformados.
Aprendizaje Automático No Supervisado 17
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
1.8. Técnicas de discretización de datos
L a s técnicas de discretización convierten variables continuas en variables
discretas, permitiendo ver los datos desde una perspectiva diferente. Este enfoque
divide en rangos las variables continúas generando intervalos que tienen una
etiqueta. De esta forma, el valor numérico pasa a una categoría o bins. En
aprendizaje no supervisado, la discretización simplifica relaciones complejas al
etiquetar con una categoría o bin a un valor numérico.
Al discretizar se divide la variable en pequeños contenedores, en donde teniendo en
cuenta la distribución de los datos se asegura que cada bin sea representativo del
conjunto de datos.
Se puede utilizar los árboles de decisión para este proceso de discretización,
aprovechando el uso de la ganancia de información para delimitar los límites óptimos
de cada grupo de datos. Es un método supervisado que requiere una variable
objetivo, pero se puede adaptar utilizando ceros como etiquetas.
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
# Leer el conjunto de datos desde un archivo CSV
data = pd.read_csv("tu_archivo.csv")
# Selecciona las columnas numéricas que deseas discretizar
numeric_cols = data.select_dtypes(include=['float64', 'int64']).columns
# Entrenar un árbol de decisión para discretizar las variables
dt = DecisionTreeClassifier(max_leaf_nodes=4)
# Ajusta este valor según sea necesario
dt.fit(data[numeric_cols], np.zeros(len(data)))
# Utiliza una matriz de ceros como etiquetas ya que no tenemos etiquetas
reales
# Discretizar las variables utilizando las divisiones del árbol
Aprendizaje Automático No Supervisado 18
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
discretized_values = dt.apply(data[numeric_cols])
# Agregar las variables discretizadas al conjunto de datos original
for i, col in enumerate(numeric_cols):
data[col + '_discretized'] = discretized_values[:, i]
En el anterior ejemplo entrenamos un árbol con las columnas numéricas de un
dataset y utilizamos una matriz de ceros como etiquetas para adaptarlo a un
problema no supervisado. Después entrenamos el árbol de decisión para obtener las
divisiones, obteniendo la transformación de una variable continua a una variable
discreta.
Otra técnica es el uso de cuantiles. Los valores continuos se segmentan en cuatro
cuantiles, donde cada cuantil encapsula una proporción igual de puntos de datos. Es
muy útil si la variable tiene una distribución asimétrica.
import pandas as pd
# Cargar el conjunto de datos desde un archivo CSV
data = pd.read_csv("tu_archivo.csv")
# Seleccionar las columnas numéricas que deseas discretizar
numeric_cols = data.select_dtypes(include=['float64', 'int64']).columns
# Discretizar cada columna numérica por cuantiles
for col in numeric_cols:
data[col + '_discretized'] = pd.qcut(data[col], labels=False,
duplicates='drop')
Iteramos sobre cada columna numérica seleccionada y aplicamos la función pd.qcut()
de pandas para discretizar los datos en cuantiles. Establecemos labels=False para
obtener números enteros que representan los cuantiles y duplicates='drop' para
manejar duplicados en los cuantiles si los hubiera.
Aprendizaje Automático No Supervisado 19
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
1.9. Técnicas de codificación de datos categóricos
Debido a que la mayoría de los algoritmos de aprendizaje automático utiliza números
y no texto, se hace necesario convertir los datos textuales en formato numérico.
Existen dos tipos de datos categóricos: datos ordinales y dantos nominales.
Las categorías de datos ordinales tienen un orden intrínseco. Esto significa que las
categorías se pueden ordenar de mayor a menor o viceversa. Por ejemplo, el grado
más alto en estudios que tiene una persona es una variable ordinal: secundaria,
bachillerato, grado, máster y doctorado.
Mientras que los datos nominales no tienen un orden inherente. Por ejemplo,
ciudades de España: Málaga, Salamanca, Granada, Cádiz… No se clasifican o se
ordenan.
La codificación es el proceso de convertir datos categóricos o textuales a formato
numérico, de modo que puedan usarse como entrada para que los procesen los
algoritmos.
▸ Esto permite que el modelo identifique patrones y haga predicciones basadas en
esos patrones.
▸ La codificación también ayuda a evitar sesgos en el modelo al garantizar que todas
las características tengan el mismo peso.
▸ La elección del método de codificación puede tener un impacto significativo en el
rendimiento del modelo, por lo que es importante elegir una técnica de codificación
adecuada según la naturaleza de los datos y los requisitos específicos del modelo
(Jarapala, 2023).
Existen diferentes métodos para llevar a cabo la codificación de variables:
Aprendizaje Automático No Supervisado 20
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Codificación One-Hot
Es la forma más común de codificar una variable. Una columna binaria se crea por
cada categoría de la variable. Si la variable está presente se le asigna el valor de 1,
si no se le asigna 0.
import pandas as pd
# Crear un DataFrame de ejemplo
data = pd.DataFrame({'Color': ['Rojo', 'Verde', 'Azul', 'Rojo',
'Amarillo']})
Color
0 Rojo
1 Verde
2 Azul
3 Rojo
4 Amarillo
# Aplicar one-hot encoding
one_hot_encoded = pd.get_dummies(data['Color'])
# Concatenar los datos originales con las variables codificadas one-hot
data_encoded = pd.concat([data, one_hot_encoded], axis=1)
# Eliminar la columna original 'Color'
data_encoded.drop('Color', axis=1, inplace=True)
data_encoded
Amarillo Azul Rojo Verde
0 0 0 1 0
1 0 0 0 1
2 0 1 0 0
3 0 0 1 0
4 1 0 0 0
Cada columna representa una categoría única presente en la columna original 'Color'
y el valor en cada celda indica si la observación corresponde o no a esa categoría.
Si la observación tiene ese color, el valor será 1; de lo contrario, será 0.
Codificación ordinal
Aprendizaje Automático No Supervisado 21
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
A cada categoría única se le asigna un valor entero único.
Este es un método de codificación más simple, pero tiene el inconveniente de que el
algoritmo de aprendizaje automático puede malinterpretar los números enteros
asignados como si tuvieran una relación ordenada cuando en realidad no es así.
import pandas as pd
from sklearn.preprocessing import LabelEncoder
# Crear un DataFrame de ejemplo
data = pd.DataFrame({'Color': ['Rojo', 'Verde', 'Azul', 'Rojo',
'Amarillo']})
# Inicializar el LabelEncoder
label_encoder = LabelEncoder()
# Aplicar el LabelEncoder a la columna 'Color'
data['Color_encoded'] = label_encoder.fit_transform(data['Color'])
# Imprimir el DataFrame resultante
print(data)
Color Color_encoded
0 Rojo 2
1 Verde 3
2 Azul 0
3 Rojo 2
4 Amarillo 1
Aquí, cada categoría única en la columna 'Color' se ha asignado a un valor numérico
único por el LabelEncoder . Por ejemplo, 'Azul' se codifica como 0, 'Amarillo' como 1,
'Rojo' como 2 y 'Verde' como 3.
Codificación binaria
Las categorías se representan como dígitos binarios. Por ejemplo, si una variable
tiene cuatro categorías 'Bueno' , 'Malo' , 'Regular' y 'Malo' , se pueden representar como
0001, 0010, 0100 y 1000, respectivamente.
# Binary Encoding:
Aprendizaje Automático No Supervisado 22
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
import pandas as pd
# Crear un dataframe con una variable categorica
df = pd.DataFrame({‘atencionCliente’: [‘Excelente’, ‘Regular’, ‘Malo’]})
print(f"Antes de codificar:\n\n{df}\n")
# aplicar la codificación binaria
servicioAlCliente_map = {'Excelente': 0, 'Regular': 1, 'Malo': 2}
df[‘atencionCliente’] = df[‘atencionCliente’].map(servicioAlCliente _map)
df[‘atencionCliente’] = df[‘atencionCliente’].apply(lambda x: format(x,
'b'))
Aquí, a cada categoría se le asigna un valor binario que la representa.
Codificación target
Se utiliza con variables categóricas de alta cardinalidad; es decir, características con
muchas categorías únicas. Se calcula el valor objetivo promedio para cada categoría
y este valor promedio es utilizado para reemplazar la característica categórica.
Aunque toca utilizarla con precaución porque puede conducir a un sobreajuste.
# Binary Encoding:
import pandas as pd
# Crear un DataFrame de ejemplo
data = {'Categoría': ['A', 'B', 'A', 'C', 'B', 'C', 'A', 'A', 'B', 'C'],
'Valor': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]}
df = pd.DataFrame(data)
# Definir las categorías y asignarles etiquetas
categorias = {'A': 'Grupo A', 'B': 'Grupo B', 'C': 'Grupo C'}
# Categorizar la columna 'Categoría'
df['Grupo'] = df['Categoría'].map(categorias)
# Agrupar por la nueva columna 'Grupo' y calcular la media de los valores
resultados = df.groupby('Grupo').mean()
Usamos el método map() para categorizar la columna 'Categoría' , luego creamos una
nueva columna llamada 'Grupo' . Utilizamos groupby para agrupar por la nueva
columna 'Grupo' y calculamos la media de los valores en cada grupo utilizando el
Aprendizaje Automático No Supervisado 23
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
método mean() .
A continuación, veremos el vídeo Preprocesamiento y transformación de datos en
aprendizaje no supervisado con un ejemplo sencillo en python.
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=ff372be3-ca92-
4b2c-98ee-b1bd017637a2
Aprendizaje Automático No Supervisado 24
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
1.10. Cuaderno de ejercicios
Explora y describe la estructura subyacente de los datos del conjunto de datos de
precios de viviendas de Kaggle. Identifica y describe cualquier patrón o estructura
que encuentres.
Yasser, M. (2022). Housing Prices Dataset. Kaggle.
https://www.kaggle.com/datasets/yasserh/housing-prices-dataset
Ejercicio 1: exploración y descripción de datos
Explora y describe la estructura que tienen los datos del conjunto de datos de precios
de viviendas de Kaggle.
Solución
▸ Carga de datos y descripción general:
import pandas as pd
data = pd.read_csv('housing-prices-dataset.csv')
print(data.info())
print(data.describe())
El conjunto de datos contiene varias características como el precio, tamaño, número
de habitaciones, etc.
Describe estadísticas básicas: medias, medianas, desviaciones estándar.
▸ Identificación de patrones:
• Distribución de precios: utiliza histogramas para observar la distribución de precios.
• Correlaciones: utiliza un mapa de calor (heatmap) para visualizar las correlaciones
entre variables.
Aprendizaje Automático No Supervisado 25
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
import seaborn as sns
import matplotlib.pyplot as plt
sns.heatmap(data.corr(), annot=True, cmap='coolwarm')
plt.show()
Se pueden identificar variables altamente correlacionadas con el precio, como el
tamaño de la vivienda y la ubicación.
Los precios tienden a agruparse en ciertas áreas geográficas, indicando patrones de
agrupamiento.
Ejercicio 2: flujo de trabajo y retos
Diseña un flujo de trabajo paso a paso para abordar el análisis del conjunto de datos
mencionado en el ejercicio 1. Identifica al menos uno de los retos del aprendizaje no
supervisado.
Solución
Flujo de trabajo:
▸ Recolección de datos: obtener el conjunto de datos y consolidarlo.
▸ Preprocesamiento.
▸ Limpieza de datos (manejo de valores faltantes).
▸ Selección de características.
▸ Escalado de características.
▸ Aplicar algoritmos de agrupamiento: aplicar K-Means, DBSCAN o clustering
jerárquico.
▸ Evaluación de resultados: usar métricas como el índice de la silueta.
▸ Reto.
Aprendizaje Automático No Supervisado 26
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Maldición de la dimensionalidad: con conjuntos de datos de alta dimensionalidad es
difícil encontrar grupos con características comunes. La reducción de
dimensionalidad o selección de característcas puede ayudar, pero debe hacerse
cuidadosamente para preservar la estructura de los datos.
Ejercicio 3: preprocesamiento de datos
Realiza un preprocesamiento completo del conjunto de datos mencionado en el
ejercicio 1, incluyendo la limpieza de datos, eliminación de outliers y normalización.
Solución
▸ Cargar los datos:
import pandas as pd
# Cargar los datos
file_path = 'house_prices.csv' # Cambia esto por la ruta real de tu archivo
data = pd.read_csv(file_path)
# Mostrar las primeras filas del dataframe para verificar que se ha cargado
correctamente
print(data.head())
▸ Limpieza de datos:
# Manejo de valores faltantes
data = data.dropna()
▸ Identificación de outliers:
# Calcular el IQR para la columna 'price'
Q1 = data['price'].quantile(0.25)
Q3 = data['price'].quantile(0.75)
IQR = Q3 - Q1
# Definir los límites para identificar outliers
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# Identificar outliers
Aprendizaje Automático No Supervisado 27
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
outliers = data[(data['price'] < lower_bound) | (data['price'] >
upper_bound)]
# Mostrar los outliers identificados
print(outliers)
▸ Eliminación de otuliers:
# Eliminar outliers
data_cleaned = data[(data['price'] >= lower_bound) & (data['price'] <=
upper_bound)]
# Mostrar las primeras filas del dataframe limpio
print(data_cleaned.head())
# Guardar el dataframe limpio en un nuevo archivo CSV
data_cleaned.to_csv('house_prices_cleaned.csv', index=False)
▸ Normalización:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data.select_dtypes(include=['float64',
'int64']))
Ejercicio 4: discretización y codificación de datos categóricos
Aplica técnicas de discretización y codificación de datos categóricos del conjunto de
datos de precio de inmuebles de Kaggle para preparar los datos para su análisis con
algoritmos de aprendizaje no supervisado.
data['price_discretized'] = pd.qcut(data['price'], q=4, labels=False)
#Codificación de datos categóricos:
data_encoded = pd.get_dummies(data, columns=['categorical_feature'])
Aprendizaje Automático No Supervisado 28
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
1.11. Referencias bibliográficas
Jarapala, K. N. (2023, marzo 13). Categorical Data Encoding Techniques. Medium.
https://medium.com/aiskunks/categorical-data-encoding-techniques-d6296697a40f
Van Der Post, H. y Smith, M. (2023). Unsupervised Machine Learning: with Python.
Reactive Publishing.
Aprendizaje Automático No Supervisado 29
Tema 1. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
A fondo
Unsupervised Learning Algorithms in Big Data: An
Overview
Zhang, P. (2022). Unsupervised Learning Algorithms in Big Data: An Overview. En
Holl, A., Chen, J. y Guan, G. (Eds.), Proceedings of the 2022 5th International
Conference on Humanities Education and Social Sciences (ICHESS 2022) (pp. 910–
931). https://www.atlantis-press.com/article/125983012.pdf
Este artículo proporciona una descripción general de los algoritmos no supervisados,
sus ventajas y desventajas, además de las aplicaciones en los últimos años con el
big data.
Aprendizaje Automático No Supervisado 30
Tema 1. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
Study of Dimensionality Reduction Techniques and
Interpretation of their Coefficients, and Influence
on the Learned Models
García-Gutiérrez, M. A. (2023). Study of Dimensionality Reduction Techniques and
Interpretation of their Coefficients, and Influence on the Learned Models [Trabajo fin
de máster, Universidad Politécnica de Madrid]. ETSI Informáticos.
https://oa.upm.es/75893/1/TFM_MIGUEL_ANGEL_GARCIA-
GUTIERREZ_ESPINA.pdf
En este documento se analizan varias técnicas de reducción de dimensionalidad y su
influencia en los modelos de aprendizaje automático.
Aprendizaje Automático No Supervisado 31
Tema 1. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
Aprendizaje supervisado, no supervisado y por
refuerzo
BitBoss. (2023, febrero 25). Machine learning | aprendizaje supervisado, no
supervisado y por refuerzo [Vídeo]. YouTube. https://www.youtube.com/watch?
v=FMkxSsfvMI4
Explica de forma muy dinámica la diferencia entre estos conceptos.
Aprendizaje Automático No Supervisado 32
Tema 1. A fondo
© Universidad Internacional de La Rioja (UNIR)
Test
1. ¿Qué es el aprendizaje no supervisado?
A. Un tipo de aprendizaje donde se proporcionan ejemplos de entrada junto
con sus correspondientes salidas esperadas.
B. Un tipo de aprendizaje donde se utilizan datos no etiquetados para
descubrir patrones o estructuras intrínsecas en los datos.
C. Un tipo de aprendizaje donde se utilizan datos etiquetados para entrenar
un modelo.
D. Ninguna de las anteriores.
2. ¿Cuál de las siguientes afirmaciones es cierta sobre el aprendizaje no
supervisado?
A. Se utiliza para predecir una variable de salida basada en variables de
entrada.
B. No requiere la existencia de variables de entrada en los datos de
entrenamiento.
C. Se utiliza para clasificar los datos en dos o más categorías predefinidas.
D. No requiere la existencia de variables de salida en los datos de
entrenamiento, trabaja creando grupos para las instancias teniendo en cuenta
las características.
3. ¿Cuál es uno de los principales objetivos del aprendizaje no supervisado?
A. Clasificación.
B. Regresión.
C. Exploración y descubrimiento de patrones.
D. Ninguna de las anteriores.
Aprendizaje Automático No Supervisado 33
Tema 1. Test
© Universidad Internacional de La Rioja (UNIR)
Test
4. ¿Cuál de las siguientes técnicas se utiliza comúnmente en el aprendizaje no
supervisado para reducir la dimensionalidad de los datos?
A. Clustering.
B. Regresión lineal.
C. Análisis de componentes principales (PCA).
D. Vectores y valores propios.
5. ¿Cuál de las siguientes afirmaciones describe mejor el proceso de clustering en
el aprendizaje no supervisado?
A. Agrupar los datos en clústeres basados en similitudes entre ellos.
B. Dividir los datos en conjuntos de categorías predefinidas.
C. Asignar valores a las características de entrada para predecir una variable
de salida.
D. Dividir los datos en conjuntos de igual tamaño ordenados por cualquier
dimensión.
6. ¿Por qué es importante el preprocesamiento de datos en el aprendizaje no
supervisado?
A. Para eliminar datos atípicos.
B. Para mejorar la calidad de los datos y facilitar el análisis.
C. Para aumentar la complejidad del modelo.
D. Ninguna de las anteriores.
7. ¿Qué tipo de datos se utilizan comúnmente en el aprendizaje no supervisado?
A. Datos no estructurados.
B. Datos categóricos.
C. Datos numéricos y categóricos.
D. Datos estructurados y no estructurados.
Aprendizaje Automático No Supervisado 34
Tema 1. Test
© Universidad Internacional de La Rioja (UNIR)
Test
8. ¿Qué técnica se utiliza para convertir variables categóricas en una
representación numérica en el aprendizaje no supervisado?
A. Clustering.
B. Transformación de datos.
C. Técnicas de visualización.
D. Encoding de datos categóricos.
9. ¿Cuál es uno de los retos del aprendizaje no supervisado?
A. La necesidad de etiquetas para cada ejemplo de entrenamiento.
B. La interpretación de los resultados obtenidos.
C. La falta de algoritmos disponibles.
D. El manejo de la maldición de la dimensionalidad.
10. ¿Cuál es uno de los beneficios del aprendizaje no supervisado?
A. La capacidad de predecir valores de salida precisos.
B. La capacidad de descubrir patrones y estructuras ocultas en los datos.
C. La capacidad de entrenar modelos con menor cantidad de datos.
D. Ninguna de las anteriores.
Aprendizaje Automático No Supervisado 35
Tema 1. Test
© Universidad Internacional de La Rioja (UNIR)
Tema 2
Aprendizaje Automático No Supervisado
Tema 2. Fundamentos y
aplicaciones del
agrupamiento K-Means
Índice
Esquema
Ideas clave
2.1. Introducción y objetivos
2.2. Algoritmo K-Means
2.3. ¿Cómo elegir el número de clústeres?
2.4. Implementar K-Means en Python
2.5. Ventajas y desventajas del K-Means
2.6. Cuaderno de ejercicios
2.7. Referencias bibliográficas
A fondo
Segmentación de clientes paso a paso
K-Means clustering
K-Means en R
Test
Esquema
Aprendizaje Automático No Supervisado 3
Tema 2. Esquema
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
2.1. Introducción y objetivos
En el universo del aprendizaje no supervisado, los clústeres son la piedra angular.
La esencia del grupo está en la habilidad de proporcionar información sin necesidad
de etiquetas. Es como contar un cuento, donde cada clúster narra lo que esconden
sus instancias.
Hoy en día la cantidad de datos existentes son cada vez mayor, pero en muchas
ocasiones contar con etiquetas es un lujo, siendo estas muy costosas de obtener.
Como ya se ha comentado, este tipo de técnicas se utilizan cuando se desconoce la
estructura de los datos, puesto que no se tiene la variable objetivo de los datos. Por
ejemplo, cuando se desconoce cuántos tipos de usuarios existen.
Estas técnicas dividen los datos en clústeres o grupos similares. Pero esta división
se lleva a cabo sin la necesidad de indicar las características de cada uno de estos
grupos. Para lograr la mejor división, las instancias de un grupo deben ser muy
similares entre sí y muy distintas entre el resto de los grupos.
En este tema veremos los algoritmos de agrupación, y dentro de ellos nos
centraremos en explicar el algoritmo K-Means, ya que es el principal exponente de
esta técnica, gracias a su simplicidad y eficacia.
En este tema nos planteamos los siguientes objetivos:
▸ Presentar una explicación detallada del algoritmo K-Means y su funcionamiento
interno.
▸ Describir el paso a paso de la asignación de centroides y su actualización para
minimizar la suma de distancias cuadradas entre los puntos.
▸ Implementar el algoritmo de K-Means en un entorno de programación, utilizando
Python.
Aprendizaje Automático No Supervisado 4
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Aprendizaje Automático No Supervisado 5
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
2.2. Algoritmo K-Means
E l algoritmo K-Means particiona los datos en K clústeres distintos, cada uno de
ellos representado por la media de los puntos; de ahí viene su nombre: K-Means o K-
Medias. Su objetivo es minimizar la varianza intra-clúster y maximizar la varianza
inter-clúster, haciendo que los grupos tengan datos lo más diferentes posibles entre
sí y, al mismo tiempo, asegurar que los elementos dentro de cada grupo sean lo más
similares posible entre sí (Van Der Post y Smith, 2021).
El algoritmo K-Means es una herramienta fundamental para los científicos de datos,
gracias a su simplicidad y potencia. Es capaz de dividir un conjunto de datos
complejo en particiones simples y digeribles.
Para entender mejor el algoritmo, introduciremos el concepto de los diagramas de
Voronoi. Estos diagramas también conocidos como polígonos de Thiessen son
una forma de dividir el espacio en regiones basadas en la proximidad a un conjunto
específico de puntos. Cada región en el diagrama de Voronoi está asociado a uno de
estos sitios y contiene todos los puntos del espacio que están más cerca de ese sitio
que de cualquier otro. Son una herramienta importante en diversos campos, como la
ciencia de datos, la geometría computacional y la visualización de datos.
Características clave:
▸ Cada región en un diagrama de Voronoi está delimitada por las líneas bisectrices,
que son las líneas que están equidistantes entre dos sitios vecinos.
▸ Los vértices de los polígonos de Voronoi están ubicados en puntos donde tres o más
sitios se encuentran equidistantes.
▸ Los diagramas de Voronoi pueden ser bidimensionales (2D) o tridimensionales (3D),
dependiendo de la dimensión del espacio en el que se definen los puntos
generadores.
Aprendizaje Automático No Supervisado 6
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Los diagramas de Voronoi se utilizan comúnmente en aplicaciones de análisis
espacial, como la planificación urbana, el diseño de redes de comunicación, la
interpolación de datos y la visualización de datos geográficos.
A continuación, se puede ver un ejemplo en Python de la construcción de un
diagrama de Voronoi.
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import Voronoi, voronoi_plot_2d
# Generar puntos aleatorios
points = np.random.rand(5, 2)
# Calcular el diagrama de Voronoi
vor = Voronoi(points)
# Graficar el diagrama de Voronoi
voronoi_plot_2d(vor)
plt.plot(points[:,0], points[:,1], 'ro') # Plotear los puntos generados
plt.show()
Figura 1. Diagrama de Voronoi generado con puntos aleatorios. Fuente: elaboración propia.
En el contexto de K-Means, estos diagramas se utilizan para ilustrar cómo se
Aprendizaje Automático No Supervisado 7
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
agrupan los datos en torno a los centroides. Cada región de Voronoi corresponde a
un clúster generado por K-Means, donde todos los puntos dentro de una región están
más cerca de su respectivo centroide que de cualquier otro. Esto visualiza
claramente la asignación de datos a clústeres y ayuda a comprender la eficiencia y la
precisión del algoritmo en la partición del espacio de datos.
Una vez entendido el concepto de los diagramas de Voronoi, veremos en detalle el
algoritmo K-Means.
El paso a paso del algoritmo es el siguiente:
▸ Preprocesamiento de datos: el preprocesamiento de datos en el aprendizaje no
supervisado es importante para mejorar la calidad y precisión de los modelos, al
igual que en el aprendizaje supervisado.
▸ Inicialización de centroides: el ciclo comienza seleccionando aleatoriamente K
puntos como centroides iniciales. Los centroides son puntos que representan el
centro de cada uno de los K grupos que se quieren identificar.
Figura 2. Inicialización de centroides. Fuente: elaboración propia.
▸ Asignación de puntos a centroides: para cada punto del conjunto de datos, se
calcula la distancia entre ese punto y cada uno de los centroides. Luego, se asigna
el punto al centroide más cercano.
Aprendizaje Automático No Supervisado 8
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 3. Asignación de puntos a los centroides. Fuente: elaboración propia.
▸ Actualización de centroides: después de asignar cada punto a un centroide, se
recalcula la posición de cada centroide como el centroide del grupo de puntos
asignados a él. Es decir, que el nuevo centroide es el promedio de todas las
coordenadas de los puntos asignados al grupo.
Figura 4. Actualización de centroides. Fuente: elaboración propia.
▸ Repetición: los pasos de asignación de centroides y de actualización de centroides
se repiten iterativamente hasta que los centroides dejen de cambiar de manera
significativa o hasta que se alcance un número máximo de iteraciones.
Aprendizaje Automático No Supervisado 9
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Convergencia: cuando los centroides permanecen constantes entre iteraciones y los
puntos están asignados a los grupos de manera estable, podemos hablar de
convergencia.
▸ Resultado final: un conjunto de K grupos, donde cada grupo está representado por
su centroide.
El poder de K-Means reside en su versatilidad, ya que se puede aplicar a una gran
variedad de conjuntos de datos. Desde segmentar clientes hasta la compresión de
imágenes. La necesidad de predefinir el número de grupos, K, puede ser un desafío.
Veremos a continuación algunas de las técnicas existentes para facilitar la elección
del valor de K.
Aprendizaje Automático No Supervisado 10
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
2.3. ¿Cómo elegir el número de clústeres?
Elegir un valor de K erróneo implica que se tendrán grupos que no representan al
conjunto de datos, lo que implica que no nos va a brindar información suficiente
sobre cada uno de los grupos.
En muchos casos no conocemos ese número mágico que nos indica cuál es la
cantidad de grupos que deben generarse. Si conocemos el dominio, debería ser
sencillo saber cuántos grupos se desean crear. Pero, lo cierto, es que no es tan fácil
de encontrar.
En la Figura 5 podemos ver una simulación del algoritmo K-Means con diferentes
valores de K para un mismo conjunto de datos. El mejor valor de K es cuatro, se
pueden ver los grupos o clústeres de datos bien diferenciados. Cualquier otro valor
de K va a generar un modelo que no es adecuado para este conjunto de datos. En
este caso hemos utilizado la fuerza bruta, intentando configurar el algoritmo con
diferentes valores de K.
Figura 5. Diferentes valores de K para un mismo conjunto de datos. Fuente: elaboración propia.
Aprendizaje Automático No Supervisado 11
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
A continuación, veremos algunos métodos y/o métricas conocidas para encontrar el
número óptimo de clústeres. Pero antes recordemos dos principios básicos:
▸ Los puntos dentro del grupo deben ser lo más similares posible.
▸ Los puntos que pertenecen a distintos grupos deben ser lo más distintos posible.
Métricas
A continuación, veremos dos métricas que se utilizarán posteriormente en los
métodos para hallar el número ideal de clústeres o valores de K. Estamos hablando
de la inercia y del coeficiente de la silueta.
Inercia
La primera métrica es la inercia. Se calcula como la suma de las distancias al
cuadrado entre los puntos de datos y los centros de los grupos a los que pertenece.
Este valor cuantifica la variación dentro de cada uno de los grupos. La siguiente
ecuación muestra la fórmula de la inercia .
Donde:
▸ n es el número total de puntos.
▸ es el i-ésimo punto de datos.
▸ es el centroide del clúster al que pertenece el punto .
▸ es la distancia euclidiana cuadrada entre el punto y su centroide
correspondiente .
En la Figura 6, se puede observar el cálculo de la inercia para cada valor de k. La
Aprendizaje Automático No Supervisado 12
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
inercia es una medida de que tan compactos están los clústeres. Generalmente
disminuye a medida que aumenta k, pero una disminución de la inercia no garantiza
obtener la mejor agrupación. Así lo podemos observar en la Figura 6, donde el mejor
valor de k es 4 y el valor de la inercia para esta configuración no es el menor valor.
Más adelante combinaremos la inercia con el método del codo, para poder decidir
cuál es el valor óptimo de K.
Figura 6. Diferentes valores de K con su respectivo valor de inercia para un mismo conjunto de datos.
Fuente: elaboración propia.
Como hemos visto anteriormente, la inercia es una función decreciente, a medida
que aumenta k, la inercia disminuye. Asumiendo que K es el número óptimo de
clústeres, tenemos que para k<K la inercia disminuye rápidamente; mientras que
para un k>K la disminución de la inercia va más lenta.
El método del codo consiste en trazar la inercia en función del número de clústeres
y observar el punto en el que la inercia comienza a desacelerarse, formando un
codo. Este punto puede indicarnos que el valor óptimo para K es el punto donde
comienza a formarse el codo (Dutta, 2020). Sin embargo, puede ser un método muy
Aprendizaje Automático No Supervisado 13
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
subjetivo, sobre todo en conjuntos de datos complejos.
En la Figura 7 se puede ver cómo el valor de la inercia va disminuyendo rápidamente
hasta que en k=4 empieza a disminuir, formando un codo en el gráfico.
Figura 7. Método del codo utilizando el valor de la inercia. Fuente: elaboración propia.
Como dato interesante, el método del codo ha sido utilizado para ver en problemas
de lenguaje natural la cantidad óptima de temas en una red social.
Coeficiente de la silueta
La segunda métrica es el coeficiente de la silueta (silhouette coefficient). Nos
muestra un resumen de la variación dentro de un grupo y la variación entre grupos.
Para cada instancia se calcula la distancia al centro del grupo al que pertenece (a
este valor lo denominamos a). Además, calculamos la distancia al segundo mejor
centro del grupo (a este valor lo denominamos b). Cuando hablamos del segundo
mejor grupo hacemos referencia al grupo más cercano y que no es el grupo al que
pertenece el dato. Con los valores a y b aplicamos la siguiente fórmula.
Aprendizaje Automático No Supervisado 14
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
En un escenario ideal, la distancia a es muy pequeña en comparación con la
distancia b, y el valor de s es un valor cercano a 1. Si la distancia a y b son similares,
entonces s tiende a 0. Si la agrupación no es lo suficientemente óptima para el
conjunto de datos, la distancia a es mayor que la distancia b y el valor de s es
negativo o cercano a -1.
En la Figura 8 podemos ver que el coeficiente de la silueta más alto es para un valor
de K = 4. Y el valor más bajo lo tenemos para un valor de K = 9, donde a y b son
similares.
Figura 8. Diferentes valores de K con su respectivo coeficiente de la silueta para un mismo conjunto de
datos. Fuente: elaboración propia.
Utilizando el coeficiente de la silueta, visto anteriormente, se utiliza el método de la
silueta para hallar el valor óptimo de k:
▸ Se calcula la puntuación de la silueta para cada punto del conjunto de datos.
▸ Se promedian esos puntos para cada grupo.
Aprendizaje Automático No Supervisado 15
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Se trazan los puntajes promedios para diferentes valores de k.
▸ El valor de K óptimo es aquel en el que la puntuación de la silueta es el promedio
más alto.
En la Figura 9 se puede observar que el valor más alto es para un K=4. Coincide con
el valor obtenido a través del método del codo.
Figura 9. Método de la silueta para obtener el valor óptimo de K. Fuente: elaboración propia.
Estadística de brecha
Es una medida utilizada para evaluar la calidad de los clústeres generados por el
algoritmo K-Means. Esta métrica compara la inercia intra-clúster de un conjunto de
datos con la que se esperaría encontrar en un conjunto de datos aleatorios sin
estructura de clustering, con la inercia de los clústeres generados con los datos
originales (Dutta, 2020).
▸ Dispersión intra-clúster con datos originales: primero se calcula la inercia intra-
clúster de los datos originales utilizando el algoritmo K-Means para diferentes valores
de k. Este valor mide cuán compactos y cohesivos son los clústeres formados por el
algoritmo para cada valor de k.
Aprendizaje Automático No Supervisado 16
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Dispersión intra-clúster con datos aleatorios: se generan varios conjuntos de
datos de referencia aleatorios (también conocidos como conjuntos de datos nulos)
manteniendo la estructura de los datos originales, pero mezclando aleatoriamente
las etiquetas de los puntos. Para cada conjunto de datos de referencia se calcula la
inercia intra-clúster utilizando K-Means.
▸ Cálculo de la brecha: la brecha se calcula como la diferencia entre la inercia intra-
clúster esperada en los datos aleatorios y la inercia intra-clúster observada en los
datos originales. Se promedia esta diferencia sobre todos los conjuntos de datos de
referencia.
▸ Selección del número óptimo de clústeres: el número óptimo de clústeres se
elige el valor de K que maximiza la brecha. En otras palabras, se busca el punto
donde la dispersión intra-clúster observada en los datos reales es menor que la
dispersión de los datos aleatorios.
A pesar de la falta de organización, los datos aleatorios agrupados producen inercias
decrecientes constantemente a medida que k aumenta. Esto es debido a que
cuantos más centros de conglomerados hay, menor es la distancia entre los puntos
de datos y los centroides, lo que produce una disminución de la inercia. Con los
datos originales la inercia varía disminuyendo rápidamente para los valores de k que
están por debajo del valor óptimo de K, después tiende a estabilizarse o disminuye
en menor medida. Cuando se trazan juntas la inercia de los datos observados y
aleatorios, la diferencia puede observarse (Figura 10). En este caso, el número
óptimo de clústeres puede estar entre 3, 4 y 5.
Aprendizaje Automático No Supervisado 17
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 10. Estadística de brecha para obtener el valor óptimo de K. Fuente: elaboración propia.
Aprendizaje Automático No Supervisado 18
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
2.4. Implementar K-Means en Python
En este apartado aplicaremos K-Means al conjunto de datos que podemos encontrar
e n https://www.kaggle.com/datasets/camnugent/california-housing-prices?
resource=download, adaptación del dataset encontrado en
https://www.dcc.fc.up.pt/~ltorgo/Regression/cal_housing.html, cuya fuente original es
Statlib (https://lib.stat.cmu.edu/).
El código que presentamos a continuación es una adaptación del artículo de blog:
https://www.datacamp.com/tutorial/k-means-clustering-python.
import numpy as np # operaciones numéricas
import pandas as pd # manipulación y análisis de datos
import matplotlib.pyplot as plt #creación de gráficos
from sklearn.cluster import KMeans # módulo KMeans de scikit-learn
from sklearn.preprocessing import StandardScaler # preprocesamiento
from sklearn.metrics import silhouette_score #Coeficiente silhouette
Leeremos el conjunto de datos y tendremos en cuenta solo las columnas de latitud,
longitud y valor medio del inmueble para nuestro ejercicio.
datos_inmuebles = pd.read_csv('housing.csv', usecols = ['longitude',
'latitude', 'median_house_value'])
Verificamos que no existan valores faltantes.
datos_faltantes = datos_inmuebles.isnull().sum()
# Mostrar el número de valores faltantes por columna
print("Valores faltantes por columna:")
print(datos_faltantes)
Valores faltantes por columna:
longitude 0
latitude 0
median_house_value 0
dtype: int64
Aprendizaje Automático No Supervisado 19
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Ahora utilizamos la biblioteca seaborn para hacer un gráfico de dispersión. Indicando
los valores de los ejes, en este caso utilizaremos latitud y longitud.
Dentro del diagrama de dispersión configuraremos el atributo hue , para asignar una
categoría a los puntos de acuerdo con su valor promedio. El grafico resultante
mostrará los puntos de datos con etiquetas de color. Veamos el código y el resultado.
import seaborn as sns
sns.scatterplot(data = datos_inmuebles, x='longitude', y='latitude', hue =
'median_house_value')
Figura 11. Gráfico de dispersión, indicando valores en los ejes y categoría según valor medio de la
vivienda. Fuente: elaboración propia.
Existen valores de inmuebles de todas las categorías en todas las latitudes y
longitudes. Usaremos normalización o estandarización de valores, debido a que hay
valores como el valor medio de la vivienda que es muy alto y comparado con la
latitud y la longitud.
Creamos una instancia de la clase StandardScaler del módulo de preprocesamiento de
Scikit-learn. Este método calcula la media y la desviación estándar de cada una de
Aprendizaje Automático No Supervisado 20
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
las características, estandariza las variables y garantiza que se tenga un rango y una
varianza similar en todos los atributos. De esta manera evitamos que una de las
características sea más dominante que otra en el algoritmo de K-Means.
#se crea una instancia de StandardScaler para la normalización
escalado=StandardScaler()
#Aplicamos el StandardScaler al DataFrame
#El método 'fit_transform' escala y estandariza los datos
datos_escalados = escalado.fit_transform(datos_inmuebles)
#Se calculan los coeficientes de la silueta para diferentes valores de k
coeficientes_silhoutte = []
#Se crea una iteración sobre cada valor de k de 2 hasta 10
for k in range(2,11):
#Instancia de KMeans
kmeans= KMeans(n_clusters=k)
#trabajamos con los datos escalados
kmeans.fit(datos_escalados)
#Calcular el coeficiente de la silueta
coeficiente=silhouette_score(datos_escalados, kmeans.labels_)
#Agregar el puntaje al vector de coeficientes
coeficientes_silhoutte.append(coeficiente)
#Graficar los coeficientes de la silueta para diferentes valores de k.
plt.plot(range(2,11), coeficientes_silhoutte, marker='o')
plt.xlabel('Número de clusters (k)')
plt.ylabel('Coeficiente de la silueta')
plt.title('Coeficiente de la silueta para diversos valores de k')
plt.show
Aprendizaje Automático No Supervisado 21
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 12. Coeficientes de la silueta para diferentes valores de k. Fuente: elaboración propia.
Analizando los resultados de la Figura 12, el número óptimo de clústeres es 2. Este
es el valor más alto que tenemos y es el valor que nos va a permitir tener grupos bien
diferenciados.
Entrenamos el algoritmo de K-Means con dos clústeres, calculamos los centroides y
asignamos cada punto a un grupo.
#Establecemos el número de grupos (k) en 2.
k=2
#Utilizamos el algoritmo de KMeans con una semilla aleatoria para poder
reproducir el entrenamiento
kmeans1= KMeans(n_clusters=k, init='k-means++', random_state=42)
#Modelamos con los datos escalados
kmeans1.fit(datos_escalados)
# Creamos los grupos y las etiquetas de los centroides
labels= kmeans1.labels_
centroids= kmeans1.cluster_centers_
Aprendizaje Automático No Supervisado 22
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
#Mostramos el gráfico de dispersión
plt.scatter(datos_escalados[:,0], datos_escalados[:, 1], c=labels, s=50,
cmap='viridis')
plt.scatter(centroids[:,0], centroids[:, 1], marker='x', s=200, c='red')
plt.xlabel('longitud')
plt.ylabel('latitud')
plt.title('Centroides de los grupos obtenidos por K-Means')
plt.show()
Figura 13. Clústeres obtenidos con K=2. Fuente: elaboración propia.
En la Figura 13 observamos 2 clústeres bien diferenciados, donde uno de ellos
contiene los inmuebles con latitud alta y longitud baja, y al otro grupo pertenecen los
inmuebles con longitudes altas y latitudes bajas. Ahora comparemos con el método
del codo.
#Función que calcula la inercia para cada valor de k.
def plot_kmeans(dataset, max_k):
inertias = []
for i in range(2, max_k+1):
# Entrenar el modelo de K-Means
kmeans = KMeans(n_clusters=i)
kmeans.fit(dataset)
Aprendizaje Automático No Supervisado 23
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
# Calcular la inercia
inertia = kmeans.inertia_
inertias.append(inertia)
# Graficar el método del codo
plt.plot(range(2, max_k+1), inertias, marker='o')
plt.title('Método del codo')
plt.xlabel('Número de clusters (K)')
plt.ylabel('Inercia')
plt.show()
# Visualizar el método del codo para diferentes valores de K
plot_kmeans(datos_escalados, max_k=10)
Figura 14. Valores de inercia vs. número de clústeres, método del codo. Fuente: elaboración propia.
En la Figura 14 podemos observar que el codo se crea en K=4. Vamos a entrenar un
modelo con ese valor de k y comparamos los resultados.
#Establecemos el número de grupos (k) en 4.
k=4
#Utilizamos el algoritmo de KMeans con una semilla aleatoria para poder
reproducir el entrenamiento
Aprendizaje Automático No Supervisado 24
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
kmeans2= KMeans(n_clusters=k, init='k-means++', random_state=42)
#Modelamos con los datos escalados
kmeans2.fit(datos_escalados)
# Creamos los grupos y las etiquetas de los centroides
labels= kmeans2.labels_
centroids= kmeans2.cluster_centers_
#Mostramos el gráfico de dispersión
plt.scatter(datos_escalados[:,0], datos_escalados[:, 1], c=labels, s=50,
cmap='viridis')
plt.scatter(centroids[:,0], centroids[:, 1], marker='x', s=200, c='red')
plt.xlabel('longitud')
plt.ylabel('latitud')
plt.title('Centroides de los grupos obtenidos por K-Means')
plt.show()
Figura 15. Clústeres obtenidos con K=4. Fuente: elaboración propia.
En la Figura 15 vemos 4 clústeres, pero no están bien diferenciados. Para este
ejemplo el coeficiente de la silueta nos dio una mejor aproximación del número de
clústeres óptimos.
A continuación, veremos el vídeo Implementación de K-Means en Python.
Aprendizaje Automático No Supervisado 25
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=e273ad18-e29d-
4da6-8e23-b1bd018609c0
Aprendizaje Automático No Supervisado 26
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
2.5. Ventajas y desventajas del K-Means
A continuación, se listan una serie de ventajas y desventajas que se tiene con este
algoritmo.
Tabla 1. Ventajas y desventajas de K-Means. Fuente: elaboración propia.
A continuación, veremos el vídeo Aplicaciones y casos de estudio.
Accede al vídeo:
Aprendizaje Automático No Supervisado 27
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=7a04fc7e-beeb-
45c7-8cad-b1be00ed52d0
Aprendizaje Automático No Supervisado 28
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
2.6. Cuaderno de ejercicios
Partiremos de este conjunto de datos de Github
https://github.com/SooyeonWon/customer_analytics_fmcg/blob/main/segmentation%
20data.csv.
Asumimos que somos científicos de datos y vamos a analizar este conjunto de datos
de los clientes de una empresa de bienes de consumo que contiene las siguientes
columnas: sex, marital status, edad, education, income, occupation, settlement size.
La empresa quiere segmentar a los clientes para ayudar al departamento de
marketing para lanzar nuevos productos en función de la segmentación.
Ejercicio 1
Explora, describe y preprocesa los datos para poder aplicar el algoritmo de K-Means.
Solución
▸ Leer el conjunto de datos, explorarlo y describirlo:
import pandas as pd
df= pd.read_csv('segmentation data.csv', index_col = 0)
df.head()
df.describe()
df.info()
▸ Preprocesamiento:
scaler = StandardScaler()
df_std = scaler.fit_transform(df)
df_std = pd.DataFrame(data = df_std,columns = df.columns)
Ejercicio 2
Utiliza la técnica del codo para identificar el mejor número de clústeres o grupos.
Entrena un algoritmo de K-Means con el valor de K encontrado.
Aprendizaje Automático No Supervisado 29
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Solución
wcss = []
for i in range(1,11):
kmeans_pca = KMeans(n_clusters = i, init = 'k-means++', random_state =
42)
kmeans_pca.fit(df_std)
wcss.append(kmeans_pca.inertia_)
plt.figure(figsize = (10,8))
plt.plot(range(1, 11), wcss, marker = 'o', linestyle = '-.',color='red')
plt.xlabel('Number of Clusters')
plt.ylabel('WCSS')
plt.title('K-means Clustering')
plt.show()
kmeans = KMeans(n_clusters = 4, init = 'k-means++', random_state = 42)
kmeans.fit(df_std)
df_segm_kmeans= df_std.copy()
df_std['Segment K-means'] = kmeans.labels_
df_std
Ejercicio 3
Aprendizaje Automático No Supervisado 30
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Utiliza la técnica de estadística de brecha para identificar el mejor número de
clústeres o grupos. Entrena un algoritmo de K-Means con el valor de K encontrado.
Solución
▸ Función para calcular la estadística de la brecha:
from sklearn.cluster import KMeans
from sklearn.metrics import pairwise_distances
import matplotlib.pyplot as plt
def calcular_brecha(datos, n_refs=20, max_k=10):
"""
Calcula la estadística de la brecha para un rango de valores de K.
Parameters:
- datos: matriz de datos normalizados.
- n_refs: número de conjuntos de datos de referencia.
- max_k: número máximo de clústeres a evaluar.
Returns:
- brechas: valores de la brecha para cada K.
"""
shape = datos.shape
# Generar datos de referencia aleatorios
referencias = np.random.random_sample(size=(n_refs, shape[0],
shape[1]))
brechas = []
for k in range(1, max_k + 1):
# Entrenar K-Means con datos originales
kmeans = KMeans(n_clusters=k)
kmeans.fit(datos)
distancias_originales = pairwise_distances(datos,
kmeans.cluster_centers_)
Wk_original = np.sum(np.min(distancias_originales, axis=1)) /
datos.shape[0]
# Calcular Wk para datos de referencia
Wk_referencia = []
for ref in referencias:
kmeans_ref = KMeans(n_clusters=k)
kmeans_ref.fit(ref)
distancias_ref = pairwise_distances(ref,
Aprendizaje Automático No Supervisado 31
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
kmeans_ref.cluster_centers_)
Wk_referencia.append(np.sum(np.min(distancias_ref, axis=1)) /
ref.shape[0])
Wk_ref_promedio = np.mean(Wk_referencia)
brecha = np.log(Wk_ref_promedio) - np.log(Wk_original)
brechas.append(brecha)
return brechas
# Calcular la brecha para valores de K de 1 a 10
brechas = calcular_brecha(datos_escalados, max_k=10)
# Graficar la estadística de la brecha
plt.plot(range(1, 11), brechas, marker='o')
plt.xlabel('Número de clusters (K)')
plt.ylabel('Estadística de la brecha')
plt.title('Estadística de la Brecha para diferentes valores de K')
plt.show()
# Determinar el mejor valor de K
mejor_k = np.argmax(brechas) + 1
print(f"El mejor número de clústeres según la estadística de la brecha es:
{mejor_k}")
Ejercicio 4
Utiliza la técnica de coeficientes de la silueta para identificar el mejor número de
clústeres o grupos. Entrena un algoritmo de K-Means con el valor de K encontrado.
Compara y saca conclusiones sobre cuál es el mejor método para este conjunto de
datos.
Solución
▸ Método de la silueta:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
def plot_silhouette(dataset, max_k):
silhouette_scores = []
Aprendizaje Automático No Supervisado 32
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
for i in range(2, max_k+1):
# Entrenar el modelo de K-Means
kmeans = KMeans(n_clusters=i)
kmeans.fit(dataset)
# Calcular el coeficiente de silueta
silhouette_avg = silhouette_score(dataset, kmeans.labels_)
silhouette_scores.append(silhouette_avg)
# Graficar el coeficiente de silueta
plt.plot(range(2, max_k+1), silhouette_scores, marker='o')
plt.title('Coeficiente de Silueta')
plt.xlabel('Número de clusters (K)')
plt.ylabel('Coeficiente de Silueta')
plt.show()
# Visualizar el coeficiente de silueta para diferentes valores de K
plot_silhouette(df_std, max_k=10)
▸ El mejor método es la técnica de la silueta.
Aprendizaje Automático No Supervisado 33
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
2.7. Referencias bibliográficas
Dutta, I. (2020, octubre 25). Cheat sheet for implementating 7 methods for selecting
the optimal number of clusters in Python. Medium.
https://towardsdatascience.com/cheat-sheet-to-implementing-7-methods-for-
selecting-optimal-number-of-clusters-in-python-898241e1d6ad
Van Der Post, H. y Smith, M. (2023). Unsupervised Machine Learning: with Python.
Reactive Publishing.
Aprendizaje Automático No Supervisado 34
Tema 2. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
A fondo
Segmentación de clientes paso a paso
Raúl Valerio-Statistics. (2023, junio 30). Segmentación de clientes paso a paso:
descubre el RFM y K-Means en acción | Tutorial Python Cluster [Vídeo]. YouTube.
https://www.youtube.com/watch?v=CsXCeOiKRZw
Se detalla paso a paso, desde la preparación de los datos hasta la interpretación de
los resultados de la segmentación.
Aprendizaje Automático No Supervisado 35
Tema 2. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
K-Means clustering
Six Sigma Pro SMART. (2023, agosto 10). K-Means Clustering | K-Means++
Clustering | Cluster Analysis | Data Science [Vídeo]. YouTube.
https://www.youtube.com/watch?v=KgJNIMe4yVc
Es una guía del algoritmo K-Means.
Aprendizaje Automático No Supervisado 36
Tema 2. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
K-Means en R
Raúl Valerio. (2023, junio 23). Clustering en Series de Tiempo: K-Means en R|
Descubre número óptimo con Métodos Silhouette y Elbow [Vídeo]. YouTube.
https://www.youtube.com/watch?v=C64Xyp3X-0U
Explica de forma muy dinámica la diferencia entre estos conceptos.
Aprendizaje Automático No Supervisado 37
Tema 2. A fondo
© Universidad Internacional de La Rioja (UNIR)
Test
1. ¿Cuál es el objetivo principal del algoritmo K-Means?
A. Reducir la dimensión de los datos.
B. Dividir un conjunto de datos en grupos similares.
C. Generar reglas de asociación entre variables.
D. Clasificar datos en categorías predefinidas.
2. ¿Qué técnica se utiliza para encontrar el valor óptimo de K en K-Means?
A. Coeficiente de Pearson.
B. Análisis de componentes principales (PCA).
C. Regresión lineal.
D. Coeficiente de la silueta.
3. ¿Cuál es la base del método del codo para encontrar el valor óptimo de K?
A. El análisis de correlación entre variables.
B. La minimización de la distancia intra-clúster.
C. La maximización del índice de Davies-Bouldin.
D. La reducción de la inercia total del modelo.
4. ¿Qué compara la estadística de brecha en K-Means?
A. La dispersión intra-clúster de los datos reales con la esperada en datos
aleatorios.
B. La dispersión inter-clúster de los datos reales con la esperada en datos
aleatorios.
C. La precisión del modelo en datos de entrenamiento con datos de prueba.
D. La dispersión intra-clúster de los datos con la dispersión inter-clúster.
Aprendizaje Automático No Supervisado 38
Tema 2. Test
© Universidad Internacional de La Rioja (UNIR)
Test
5. ¿Cuáles es una de las ventajas que tiene aplicar el modelo K-Means?
A. La interpretabilidad de los resultados.
B. El alto coste computacional en conjuntos de datos grandes.
C. No requiere especificar el número de clústeres.
D. No es adecuado para datos no lineales.
6. ¿Qué medida se utiliza en el coeficiente de la silueta para evaluar la cohesión y
separación de los clústeres?
A. Entropía.
B. Distancia intra-clúster.
C. Coeficiente de correlación.
D. Distancia inter-clúster.
7. ¿Cuál es la desventaja común de K-Means en la práctica?
A. Sensible a la inicialización de los centroides.
B. Puede manejar fácilmente datos no lineales.
C. Requiere grandes cantidades de memoria.
D. No es escalable para grandes conjuntos de datos.
8. ¿Qué indica un valor del coeficiente de la silueta de -1 en el algoritmo K-Means?
A. Un clúster muy cohesionado.
B. Un punto de datos mal asignado a un clúster.
C. Un clúster con poca separación de otros clústeres.
D. Un clúster con mucha variabilidad.
Aprendizaje Automático No Supervisado 39
Tema 2. Test
© Universidad Internacional de La Rioja (UNIR)
Test
9. ¿Cuál es el mejor método para hallar el valor óptimo de K?
A. El método del codo.
B. El coeficiente de la silueta.
C. La estadística de brecha.
D. Ninguno en particular, depende del conjunto de datos.
10. ¿K-Means y KNN son lo mismo?
A. No, pero K-Means y KNN se parecen en que son algoritmos de aprendizaje
supervisado.
B. No, porque K-Means es un algoritmo de aprendizaje no supervisado y KNN
es un algoritmo de aprendizaje supervisado.
C. No, pero K-Means y KNN se parecen en que son algoritmos de aprendizaje
no supervisado.
D. Sí, son el mismo algoritmo.
Aprendizaje Automático No Supervisado 40
Tema 2. Test
© Universidad Internacional de La Rioja (UNIR)
Tema 3
Aprendizaje Automático No Supervisado
Tema 3. Diferentes
implementaciones de K-
Means
Índice
Esquema
Ideas clave
3.1. Introducción y objetivos
3.2. Lloyd’s k-Means
3.3. MacQueen’s K-Means
3.4. Hartingan-Wong K-Means
3.5. Elkan’s K-Means
3.6. Soft K-Means / Fuzzy K-Means
3.7. Cuaderno de ejercicios
3.8. Referencias bibliográficas
A fondo
Ejemplo resuelto del algoritmo de agrupamiento Fuzzy C-
Means
Algoritmo de agrupamiento C-Means
Test
Esquema
Aprendizaje Automático No Supervisado 3
Tema 3. Esquema
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
3.1. Introducción y objetivos
Entre las diversas técnicas disponibles, los algoritmos de K-Means se destacan por
su simplicidad y eficacia en la creación de clústeres a partir de grandes volúmenes
de datos. En este tema, profundizaremos en los diferentes algoritmos de K-Means y
sus variantes, como Lloyd’s, MacQueen’s, Hartigan-Wong, Elkan’s, y Soft K-Means.
Cada uno de estos algoritmos presenta particularidades que los hacen adecuados
para distintos escenarios y tipos de datos. Por ejemplo, mientras que Lloyd’s es el
más simple y fácil de implementar, algoritmos como Elkan’s ofrecen mejoras
significativas en eficiencia mediante la reducción de cálculos de distancia, haciendo
uso de propiedades geométricas avanzadas.
Asimismo, exploraremos el algoritmo de Soft K-Means, que introduce la noción de
pertenencia difusa, permitiendo que los puntos de datos pertenezcan parcialmente a
múltiples clústeres, una técnica invaluable en contextos donde los límites entre
grupos no están claramente definidos.
No solo nos limitaremos a entender la teoría detrás de estos algoritmos, sino que
también pondremos en práctica estos conocimientos mediante la implementación y
análisis de casos de estudio reales. Utilizando herramientas y librerías de Python,
como Scikit-learn y fcmeans, los estudiantes podrán desarrollar conocer técnicas y
analizar cuáles son las ventajas y desventajas de cada uno de los algoritmos vistos.
Los objetivos que nos trazamos en este tema son:
▸ Comprender la teoría detrás de los algoritmos de K-Means y sus variantes. Estudiar
los fundamentos matemáticos y lógicos que sustentan los algoritmos de Lloyd’s,
MacQueen’s, Hartigan-Wong, Elkan’s y Soft K-Means, y entender cómo cada uno
maneja la partición de datos.
▸ Desarrollar habilidades prácticas en la implementación de algoritmos de K-Means.
Aprendizaje Automático No Supervisado 4
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Utilizar Python y librerías como Scikit-learn y fcmeans; los estudiantes
implementarán y compararán diferentes algoritmos de K-Means, aplicándolos a
diversos conjuntos de datos.
▸ Analizar y evaluar la eficiencia y efectividad de diferentes algoritmos de K-Means.
Análisis comparativos para evaluar la convergencia, la eficiencia computacional y la
precisión de los algoritmos en diferentes escenarios.
▸ Aplicar algoritmos de K-Means a problemas reales. Aplicar los algoritmos estudiados
en casos de estudio reales, como la compresión de imágenes, segmentación de
clientes y diagnóstico médico, desarrollando soluciones prácticas y efectivas a
problemas complejos.
Aprendizaje Automático No Supervisado 5
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
3.2. Lloyd’s k-Means
E l algoritmo de Lloyd, comúnmente conocido como K-means, es un algoritmo de
agrupamiento que particiona un conjunto de datos en K clústeres. Ya vimos en
detalle cómo funcionaba este algoritmo junto con su implementación. Sin embargo, a
modo de referencia, se indican los pasos del algoritmo, así como una posible
implementación genérica en Python.
Algoritmo K-Means:
▸ Inicializa los centroides.
▸ En cada iteración:
• Asigna cada punto al clúster más cercano.
• Calcula nuevos centroides.
• Verifica si los centroides han cambiado significativamente (convergencia).
▸ Finaliza cuando los centroides ya no cambian significativamente o se alcanza el
número máximo de iteraciones.
def kmeans(X, K, max_iters=100, tolerance=1e-4):
# Inicializar los centroides
centroids = initialize_centroids(X, K)
for i in range(max_iters):
# Asignar puntos a los clústeres más cercanos
cluster_labels = assign_clusters(X, centroids)
# Calcular nuevos centroides
new_centroids = update_centroids(X, cluster_labels, K)
# Verificar la convergencia
if np.all(np.abs(new_centroids - centroids) < tolerance):
break
Aprendizaje Automático No Supervisado 6
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
centroids = new_centroids
return centroids, cluster_labels
Aprendizaje Automático No Supervisado 7
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
3.3. MacQueen’s K-Means
Cuando Lloyd’s actualiza las asignaciones de puntos de datos, no actualiza los
centroides. Esto es un problema porque con cada nueva asignación, el centroide
cambia la posición. Puede que un punto esté asignado erróneamente a un centroide
porque no fue actualizado.
MacQueen intenta solucionar el anterior problema actualizando los centroides con
cada nueva asignación. Esto conlleva más tiempo de cálculo (Wohlenberg, 2021). La
inicialización es la misma que Lloyd’s, en este caso se itera sobre los puntos de
datos, al reasignarlos se vuelven a calcular los centroides asignados. El algoritmo se
repite hasta que ningún punto cambie de grupo asignado, igual que con el algoritmo
Lloyd.
▸ Inicialización de centroides: el ciclo comienza seleccionando aleatoriamente K
puntos como centroides iniciales. Los centroides son puntos que representan el
centro de cada uno de los K grupos que se quieren identificar.
▸ Asignación de puntos a centroides de manera secuencial: para cada punto del
conjunto de datos se calcula la distancia (generalmente distancia Euclidiana) entre
ese punto y cada uno de los centroides. Luego se asigna el punto al centroide más
cercano.
▸ Se recalculan los centroides de los clústeres después de cada asignación como
la media de todos los puntos de datos asignados a cada clúster.
▸ Repetición: los pasos de asignación de centroides y de actualización de centroides
se repiten iterativamente hasta que los centroides dejen de cambiar de manera
significativa o hasta que se alcance un número máximo de iteraciones.
▸ Convergencia: cuando los centroides permanecen constantes entre iteraciones y los
puntos están asignados a los grupos de manera estable, podemos hablar de
Aprendizaje Automático No Supervisado 8
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
convergencia.
Diferencias clave entre Lloyd’s y MacQueen’s K-Means
▸ Lloyd’s actualiza los centroides en pasos discretos, recalculando después de
asignar todos los puntos de datos. En términos de eficiencia, es más eficiente, ya
que se generan actualizaciones en un solo momento. Requiere más iteraciones para
converger debido a su naturaleza de grandes cambios de centroides en cada
iteración.
▸ MacQueen’s actualiza los centroides de manera continua, recalcula el centroide
cada vez que asigna un punto de datos, garantizando que cada punto este asignado
al clúster correcto. Es menos eficiente que Lloyd’s si estamos frente a un gran
conjunto de datos. Si es un conjunto de datos que llega como flujo continuo su
comportamiento es mejor que el algoritmo Lloyd’s. En términos de convergencia,
converge más rápido, ya que el número de iteraciones se ajustan continuamente a
los centroides.
Aprendizaje Automático No Supervisado 9
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
3.4. Hartingan-Wong K-Means
Tanto Lloyd’s como MacQueen no eligen centroides iniciales eficientes y puede que
el algoritmo no converja a causa de una mala inicialización.
El algoritmo Hartigan-Wong asigna los puntos de datos a los centroides de forma
aleatoria. Luego se calcula cada centroide como la media de los puntos asignados.
Esto resulta en que todos los centroides estén inicialmente en posiciones similares,
lo que reduce la probabilidad de converger a un óptimo local (Slonim, Aharoni y
Crammer, 2013). En consecuencia, un punto de datos puede ser asignado a un
centroide que no es el más cercano; si disminuye la función objetivo, mejora la
calidad total de los grupos.
▸ Inicialización de centroides: el ciclo comienza seleccionando aleatoriamente K
puntos como centroides iniciales.
▸ Al azar se asignan los puntos a un centroide.
▸ Se calcula el centroide como la media de los puntos asignados.
▸ Se repite hasta que exista convergencia o hasta el número máximo de iteraciones.
Diferencias clave entre Hartigan-Wong y Lloyd’s K-Means
▸ Lloyd’s actualiza los centroides después de una asignación completa de puntos a los
clústeres. Hartigan-Wong realiza actualizaciones más frecuentes y locales al
considerar la reubicación de puntos individuales entre clústeres durante las
interacciones.
▸ Hartigan-Wong puede requerir menos iteraciones para converger, ya que optimiza
de manera continua las ubicaciones de los puntos de datos.
▸ Lloyd’s es más simple de implementar y menos complejo computacionalmente.
Hartigan-Wong puede ser más complejo de implementar.
Aprendizaje Automático No Supervisado 10
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Aprendizaje Automático No Supervisado 11
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
3.5. Elkan’s K-Means
E l algoritmo de Elkan es una variante del algoritmo K-Means; un método de
clustering usado en el aprendizaje automático para particionar un conjunto de datos
en k grupos o clústeres. El algoritmo de Elkan se diseñó para acelerar la
convergencia del K-Means y reducir el número de cálculos de distancia necesarios,
haciéndolo más eficiente.
Principios del algoritmo de Elkan
▸ Reducción de cálculos de distancia: Elkan reduce el número de cálculos de
distancia necesarios utilizando límites superiores e inferiores. Esto se basa en la
observación de que, si sabemos que un punto de datos está cerca de un centroide
particular, podemos evitar calcular la distancia de ese punto a centros de clústeres
lejanos.
▸ Triangle inequality: aprovecha la desigualdad triangular para evitar calcular
distancias innecesarias. La desigualdad triangular establece que, para cualquier
triángulo, la suma de las longitudes de dos lados siempre será mayor o igual que la
longitud del tercer lado.
▸ Actualización eficiente: cada vez que los centroides se actualizan, también se
actualizan los límites superiores e inferiores de las distancias, minimizando los
cálculos futuros.
Pasos del algoritmo de Elkan
▸ Inicializar los centroides de los k clústeres.
▸ Mantener un límite superior y un límite inferior de las distancias de cada punto a los
centroides. Usar estos límites para evitar calcular distancias cuando no es necesario.
▸ Usar los límites para determinar el clúster más cercano a cada punto de datos sin
calcular todas las distancias.
Aprendizaje Automático No Supervisado 12
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Asignar cada punto de datos al clúster más cercano determinado.
▸ Actualización de centroides: calcular los nuevos centroides basados en las
asignaciones actuales de los puntos a los clústeres.
▸ Actualización de límites: actualizar los límites superiores e inferiores de las distancias
después de mover los centroides.
▸ Iteración: repetir los pasos 2 a 5 hasta que los centroides no cambien o se alcance
un número máximo de iteraciones.
Ventajas del algoritmo de Elkan
▸ Eficiencia: reduce el número de cálculos de distancia, lo que puede acelerar el
proceso de convergencia.
▸ Escalabilidad: funciona mejor en grandes conjuntos de datos debido a su
optimización en cálculos de distancia.
Limitaciones
▸ Complejidad adicional: implementar el algoritmo de Elkan es más complejo que el
K-Means estándar.
▸ Sensibilidad a la inicialización: como el K-Means tradicional, la calidad de los
resultados puede depender de la inicialización de los centroides.
Veamos un ejemplo de uso de K-Means para comprimir una imagen.
# Módulos
import matplotlib.pyplot as plt
from matplotlib.image import imread
import pandas as pd
import seaborn as sns
import numpy as np
#from sklearn.datasets.samples_generator import
(make_blobs,make_circles,make_moons)
Aprendizaje Automático No Supervisado 13
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples=100, centers=3, n_features=2, random_state=0)
from sklearn.cluster import KMeans, SpectralClustering
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import silhouette_samples, silhouette_score
# Leer la imagen
img = imread('DALL·E 2024-06-11 17.26.23Robot.jpg')
img_size = img.shape
# Reshape para que sea bidimensional
X = img.reshape(img_size[0] * img_size[1], img_size[2])
# Correr el algoritmo K-Means
km = KMeans(n_clusters=30)
km.fit(X)
# Use los centroides para comprimir la imagen
X_compressed = km.cluster_centers_[km.labels_]
X_compressed = np.clip(X_compressed.astype('uint8'), 0, 255)
# Reshape X_recovered para tener la misma dimensión que la original
X_compressed = X_compressed.reshape(img_size[0], img_size[1], img_size[2])
# Dibujar la imagen original y la comprimida
fig, ax = plt.subplots(1, 2, figsize = (12, 8))
ax[0].imshow(img)
ax[0].set_title('Original Image')
ax[1].imshow(X_compressed)
ax[1].set_title(‘Comprimir la imagen a 30 colores’)
for ax in fig.axes:
ax.axis('off')
plt.tight_layout();
Figura 1. Compresión de imagen a 30 colores con K-Means. Fuente: elaboración propia.
Aprendizaje Automático No Supervisado 14
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
# Entrenar con el algoritmo Elkan K-Means
km = KMeans(n_clusters=40, algorithm='elkan')
km.fit(X)
# Usar los centroides para comprimir la imagen
X_compressed1 = km.cluster_centers_[km.labels_]
X_compressed1 = np.clip(X_compressed1.astype('uint8'), 0, 255)
X_compressed1 = X_compressed1.reshape(img_size[0], img_size[1],
img_size[2])
# Dibujar la imagen original y la comprimida
fig, ax = plt.subplots(1, 2, figsize = (12, 8))
ax[0].imshow(img)
ax[0].set_title('Imagen original')
ax[1].imshow(X_compressed1)
ax[1].set_title('Imagen comprimida a 40 colores')
for ax in fig.axes:
ax.axis('off')
plt.tight_layout();
Figura 2. Compresión de imagen a 40 colores con Elkan K-Means. Fuente: elaboración propia.
A continuación, veremos el vídeo de Optimización y mejores prácticas en
clustering.
Aprendizaje Automático No Supervisado 15
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=46b607a1-f531-
4aec-b5a1-b1be00e3fb82
Aprendizaje Automático No Supervisado 16
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
3.6. Soft K-Means / Fuzzy K-Means
Uno de los problemas que tiene el K-Means y de la mayoría de sus
implementaciones, es la sensibilidad a la hora de inicializar los centroides. Una forma
de minimizar este riesgo es inicializando K-Means varias veces y utilizar el valor que
mejor separe a los grupos (Lazyprogrammer.me, 2016). Computacionalmente es
más fácil crear límites difusos que establecer un solo grupo para un punto. Un punto
puede pertenecer a uno o más grupos.
Teniendo en cuenta que la función de coste es sensible al mínimo local, se puede
minimizar la función utilizando membresía difusa para cada clase. Es decir, cada
punto tiene un % de membresía a cada grupo. Por ejemplo, puede ser un 70 % de un
grupo y un 30 % de otro grupo. A continuación, explicamos el algoritmo de
agrupamiento difuso clásico.
Agrupamiento difuso clásico
1. El primer paso es el mismo que el algoritmo clásico de K-Means, inicializar los K
clústeres al azar.
2. Cada punto puede pertenecer a todos los grupos. Mediante el uso de una
función de membresía que está entre 0 y 1, donde 0 indica que el punto está muy
alejado del clúster y 1 está muy cerca al centroide del grupo.
Suponiendo que tenemos dos grupos en los que se van a dividir los datos, si se
inicializa al azar, cada punto se encuentra en ambos grupos con un valor de
membresía. En la siguiente tabla podemos ver los diferentes valores de membresía:
Tabla 1. Valores de la membresía. Fuente: elaboración propia.
Aprendizaje Automático No Supervisado 17
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
3. Encontrar el centroide: se utiliza la siguiente fórmula para calcular cada uno de
los centroides:
Donde ϒ es el valor de pertenencia difusa del punto de datos y m es el parámetro
de borrosidad al conjunto difuso del dato que generalmente es 2 y xk es el punto.
Los centroides son: (2.21, 6.26) y (4.75,8.06).
4. Calcular la distancia de cada punto a cada uno de los centroides. Calculemos
la distancia del punto (1,5) a los dos centroides:
5. Actualizar el valor de membresía utilizando la siguiente ecuación.
Aprendizaje Automático No Supervisado 18
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Calculamos el valor de membresía a cada centroide del punto (1,5).
6. Repetir los pasos de encontrar el centroide, calcular la distancia y actualizar
el valor de la membresía. Se repite hasta que se obtengan valores constantes para
los valores de membresía o la diferencia sea menor a un valor de tolerancia.
7. Desfuzzificar los valores de membresía obtenidos.
Aplicaciones
La aplicación del clúster difuso es muy amplia. Algunas de sus aplicaciones son las
siguientes:
▸ En segmentación de imágenes ayuda a agrupar imágenes por píxeles con
propiedades similares, como color y textura.
▸ En marketing se pueden identificar para segmentar a los clientes en función de sus
preferencias y comportamientos de compra, permitiendo campañas más
personalizadas.
▸ En diagnóstico médico se pueden agrupar pacientes con síntomas similares y que
pueden tener varios diagnósticos a la vez.
▸ En monitoreo ambiental ayuda a identificar áreas de preocupación ambiental por
contaminación.
▸ En análisis de tráfico identifica áreas donde el flujo de tráfico es similar ayudando a
gestionar y planificar el tráfico.
Aprendizaje Automático No Supervisado 19
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ En evaluación de riesgo se utiliza para cuantificar riesgos de campos como
finanzas, seguros e ingeniería.
Ventajas
El algoritmo de agrupación difusa cuenta con varias ventajas; entre ellas tenemos:
▸ Flexibilidad: permite superponer agrupaciones. Es muy útil cuando los datos tienen
una estructura compleja o cuando los límites de las clases son ambiguas.
▸ Robustez: puede ser más robusta su implementación ante valores atípicos y ruido
de los datos, al permitir una transición gradual entre grupos.
▸ Interpretabilidad: proporciona una comprensión más específica de los datos, y una
representación más detallada de las relaciones entre los puntos de datos.
Desventajas
Encontramos algunos inconvenientes a la hora de implementar los algoritmos de
agrupación difusa:
▸ Complejidad: computacionalmente son más costosos, ya que tiene que calcular el
grado de membresía a cada grupo.
▸ Elegir el número correcto de clústeres y funciones de membresía puede ser todo un
desafío y requerir conocimientos de un experto, además de mucha prueba y error.
A continuación, se puede ver un ejemplo en Python, utilizando la librería de Scikit-
learn y la librería fcmeans:
from fcmeans import FCM
from sklearn.datasets import make_blobs
from matplotlib import pyplot as plt
import seaborn as sns
from seaborn import scatterplot as scatter
import numpy as np
import pandas as pd
from sklearn import datasets
Aprendizaje Automático No Supervisado 20
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
from sklearn.datasets import load_iris
iris=load_iris()
X=iris['data']
y=iris['target']
#Dibujar los datos originales
plt.scatter(X[y==0,0], X[y==0,1], s=80, c='orange', label = 'Iris-setosa')
plt.scatter(X[y==1,0], X[y==1,1], s=80, c='yellow', label = 'Iris-
versicolour')
plt.scatter(X[y==2,0], X[y==2,1], s=80, c='green', label = 'Iris-
virginica')
plt.xlabel('Sepal length)
plt.ylabel('Sepal width')
plt.title(‘Datos originales’)
plt.legend()
Figura 3. Datos del dataset Iris con su clasificación original. Fuente: elaboración propia.
#Entrenar el algoritmo fuzzy K-Means
fcm=FCM(n_clusters=3)
fcm.fit(X)
fcm_centers=fcm.centers
fcm_labels=fcm.u.argmax(axis=1)
f,axes=plt.subplots(1,2,figsize=(11,5))
#Dibujar los puntos y los centroides resultantes.
sns.scatterplot(x=X[:,0], y=X[:,1], ax= axes[0])
sns.scatterplot(x=X[:,0], y=X[:,1], ax= axes[1], hue=fcm_labels)
Aprendizaje Automático No Supervisado 21
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
sns.scatterplot(x=fcm_centers[:,0], y=fcm_centers[:,1], ax=axes[1], marker=
"s", s=200)
plt.show()
Figura 4. Aplicaciones de los clústeres difusos sobre el dataset de Iris. Fuente: elaboración propia.
# Predecir la membresía del clúster para cada punto de datos
cluster_membership = fcm.u.argmax(axis=1)
# Imprimir los centros de los clústeres
print('Centro de clústeres:', fcm_centers)
# Imprima la membresía del clúster para cada punto de datos
print('Membresía de clúster:', cluster_membership)
Figura 5. Centroides y etiquetas dadas por la membresía después de aplicar Fuzzy K-Means. Fuente:
elaboración propia.
En el código primero se importa el dataset de Iris. Después se dibujan los puntos
originales (Figura 3), identificando cada clase con un color. Sin tener en cuenta la
etiqueta original se le aplica un algoritmo de Fuzzy K-Means y posteriormente se
muestran los centroides resultantes (Figura 4). La clasificación realizada no difiere
mucho de la clasificación real. Y, finalmente, imprimimos los puntos donde están
Aprendizaje Automático No Supervisado 22
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
ubicados los centroides y las etiquetas asignadas a cada punto después de aplicar
Fuzzy K-Means (Figura 5).
A continuación, veremos el vídeo Aplicaciones avanzadas de K-Means.
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=04202076-ca31-
40b9-b608-b1be00da113d
Aprendizaje Automático No Supervisado 23
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
3.7. Cuaderno de ejercicios
Ejercicio 1: exploración y descripción de datos
Implementa el algoritmo Lloyd's K-Means utilizando la librería Scikit-learn en Python.
Usa el dataset de make_blobs con 300 muestras, 3 centros y 2 características.
Grafica los datos originales y los clústeres formados.
Solución
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
# Generar datos
X, y = make_blobs(n_samples=300, centers=3, n_features=2, random_state=0)
# Implementar K-Means
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)
# Graficar resultados
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75)
plt.show()
Ejercicio 2: flujo de trabajo y retos
Explica las diferencias clave entre los algoritmos Lloyd's y MacQueen's K-Means.
¿En qué escenarios sería preferible usar MacQueen's K-Means?
Solución
Lloyd’s K-Means actualiza los centroides después de asignar todos los puntos,
mientras que MacQueen’s K-Means actualiza los centroides continuamente con cada
nueva asignación. Lloyd’s es más eficiente computacionalmente para grandes
conjuntos de datos estáticos, ya que requiere menos recalculaciones por iteración.
Aprendizaje Automático No Supervisado 24
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
MacQueen’s es preferible en escenarios de datos de flujo continuo, ya que ofrece
una convergencia más rápida al ajustar los centroides de inmediato con cada nuevo
punto de datos.
Ejercicio 3: preprocesamiento de datos
Implementa el algoritmo Elkan's K-Means usando Scikit-learn y compara su eficiencia
con el K-Means estándar en el dataset make_blobs de 1000 muestras, 5 centros y 2
características.
Solución
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import time
# Generar datos
X, _ = make_blobs(n_samples=1000, centers=5, n_features=2, random_state=0)
# K-Means estándar
start = time.time()
kmeans = KMeans(n_clusters=5, algorithm='auto').fit(X)
end = time.time()
print(f"K-Means estándar: {end - start} segundos")
# Elkan's K-Means
start = time.time()
elkan_kmeans = KMeans(n_clusters=5, algorithm='elkan').fit(X)
end = time.time()
print(f"Elkan's K-Means: {end - start} segundos")
Este código muestra que Elkan's K-Means puede ser más eficiente al reducir los
cálculos de distancia, especialmente en conjuntos de datos más grandes.
Ejercicio 4: discretización y codificación de datos categóricos
Describe cómo se podría aplicar Soft K-Means para la segmentación de una imagen
y menciona una ventaja y una desventaja de este método.
Solución
Aprendizaje Automático No Supervisado 25
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Soft K-Means se aplica a la segmentación de imágenes asignando a cada píxel una
pertenencia difusa a varios clústeres en lugar de una asignación rígida. Esto permite
que los píxeles pertenezcan parcialmente a múltiples clústeres, manejando mejor las
transiciones suaves entre regiones de la imagen.
▸ Ventaja: flexibilidad en la asignación de píxeles, lo que resulta en transiciones más
suaves entre regiones.
▸ Desventaja: computacionalmente más costoso debido al cálculo continuo de
pertenencias difusas.
Aprendizaje Automático No Supervisado 26
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
3.8. Referencias bibliográficas
Lazyprogrammer.me. (2016). Unsupervised Machine Learning in Python: Master
Data Science and Machine Learning with Cluster Analysis, Gaussian Mixture Models,
and Principal Components Analysis. Amazon.
Slonim, N., Aharoni, E. y Crammer, K. (2013). Hartigan’s K-means versus Lloyd’s K-
means: is it time for a change? Proceedings of the 23rd International Joint
Conference on Artificial Intelligence, 1677-1684.
Wohlenberg, J. (2021, junio 21). 3 versions of k-Means. Medium.
https://towardsdatascience.com/three-versions-of-k-means-cf939b65f4ea
Aprendizaje Automático No Supervisado 27
Tema 3. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
A fondo
Ejemplo resuelto del algoritmo de agrupamiento
Fuzzy C-Means
Mahesh Huddar. (2023, julio 4). Fuzzy C Means Clustering Algorithm Solved
Example | Clustering Algorithm in ML & DL by Mahesh Huddar [Vídeo]. YouTube.
https://www.youtube.com/watch?v=X7co6-U4BJY
El vídeo discute conceptos clave como el clustering difuso, el algoritmo Fuzzy C-
Means y su aplicación en machine learning y minería de datos. También se explica el
algoritmo C-Means y se compara con el K-Means mediante ejemplos.
Aprendizaje Automático No Supervisado 28
Tema 3. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
Algoritmo de agrupamiento C-Means
Data Science with Sharan. (2021, septiembre 8). Day 70 - Fuzzy C-Means Clustering
Algorithm [Vídeo]. YouTube. https://www.youtube.com/watch?v=VhYt7nxOKKs
Explica en detalle el algoritmo de Fuzzy C-Means, un método de clustering difuso
que permite que un punto de datos pertenezca a más de un grupo con diferentes
grados de pertenencia.
Aprendizaje Automático No Supervisado 29
Tema 3. A fondo
© Universidad Internacional de La Rioja (UNIR)
Test
1. ¿Cuál es la principal diferencia entre los algoritmos de Lloyd MacQueen?
A. Lloyd actualiza los centroides de manera continua, mientras que
MacQueen lo hace en pasos discretos.
B. MacQueen actualiza los centroides de manera continua, mientras que
Lloyd lo hace en pasos discretos.
C. Lloyd y MacQueen actualizan los centroides de la misma manera.
D. Lloyd y MacQueen no recalculan los centroides.
2. ¿Cuál de las siguientes afirmaciones es correcta sobre el algoritmo de Hartigan-
Wong?
A. No realiza actualizaciones de centroides.
B. Es menos eficiente que Lloyd en términos de cálculo.
C. Es más simple de implementar que Lloyd.
D. Realiza actualizaciones de centroides más frecuentes y locales.
3. ¿Qué ventaja tiene el algoritmo de Elkan sobre K-Means estándar?
A. No necesita calcular distancias.
B. No necesita inicializar centroides.
C. Usa límites superiores e inferiores para reducir cálculos de distancia.
D. Siempre converge al óptimo global.
4. ¿Cuál es la desventaja del algoritmo de Fuzzy K-Means?
A. No permite superponer agrupaciones.
B. Es menos robusto ante valores atípicos.
C. Computacionalmente es más costoso.
D. No puede manejar conjuntos de datos grandes.
Aprendizaje Automático No Supervisado 30
Tema 3. Test
© Universidad Internacional de La Rioja (UNIR)
Test
5. ¿Cuál es una ventaja del Fuzzy K-Means respecto al K-Means clásico?
A. Mayor robustez ante valores atípicos y ruido.
B. Menor flexibilidad en la asignación de puntos.
C. Mayor sensibilidad a la inicialización de centroides.
D. Menor interpretación de datos.
6. En el algoritmo de Elkan, ¿qué se actualiza cada vez que se recalculan los
centroides?
A. Solo los límites superiores.
B. Solo los límites inferiores.
C. Los límites superiores e inferiores de las distancias.
D. Ninguna de las anteriores.
7. ¿Cuál es el objetivo principal de la inicialización en los algoritmos de K-Means?
A. Seleccionar puntos que representen el centro de cada clúster.
B. Evitar la convergencia.
C. Asegurar que todos los puntos estén en el mismo clúster.
D. Reducir el número de iteraciones.
8. ¿Qué técnica se utiliza el algoritmo de Elkan para evitar calcular distancias
innecesarias?
A. Inicialización aleatoria.
B. Distancia euclidiana.
C. Desigualdad triangular.
D. Clustering jerárquico.
Aprendizaje Automático No Supervisado 31
Tema 3. Test
© Universidad Internacional de La Rioja (UNIR)
Test
9. ¿Cuál es un problema común en la mayoría de las implementaciones de K-
Means?
A. La sensibilidad a la inicialización de los centroides.
B. La interpretación de los resultados obtenidos.
C. La convergencia rápida.
D. La sobreestimación de la cantidad de clústeres.
10. ¿Qué tipo de datos se agrupan en la segmentación de imágenes utilizando
Fuzzy K-Means?
A. Textos con propiedades similares.
B. Píxeles con propiedades similares como color y textura.
C. Puntos de datos sin relación.
D. Palabras con significados similares.
Aprendizaje Automático No Supervisado 32
Tema 3. Test
© Universidad Internacional de La Rioja (UNIR)
Tema 4
Aprendizaje Automático No Supervisado
Tema 4. Agrupamiento
jerárquico
Índice
Esquema
Ideas clave
4.1. Introducción y objetivos
4.2. Tipos de clustering jerárquico
4.3. Implementación en Python
4.4. Comparación entre K-Means y clúster jerárquico
4.5. Cuaderno de ejercicios
4.6. Referencias bibliográficas
A fondo
Una introducción al clustering jerárquico en Python
¿Cómo se analiza el clúster jerárquico en la herramienta
estadística SPSS?
Test
Esquema
Aprendizaje Automático No Supervisado 3
Tema 4. Esquema
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
4.1. Introducción y objetivos
En el universo del aprendizaje no supervisado, el agrupamiento jerárquico surge
como alternativa al algoritmo K-Means. Se caracteriza por construir una jerarquía de
clústeres que pueden ser visualizados a través de un gráfico 2D llamado
dendrograma.
El dendrograma que es nuestro protagonista de este capítulo, es similar a un árbol
que se va dividiendo con base en una secuencia de registros. A diferencia de K-
Means no es necesario conocer el número de grupos que se desean crear,
haciéndolo más flexible.
El clustering jerárquico puede ser aglomerativo o divisivo; veremos cada uno de ellos
en detalle.
En este tema nos planteamos los siguientes objetivos:
▸ Explicar detalladamente qué es el clustering jerárquico y cuál es la diferencia con
otros métodos de clustering.
▸ Definir los dos tipos de clúster jerárquico: divisivo y aglomerativo.
▸ Aprender a interpretar un dendrograma y cómo utilizarlo para hallar el número
óptimo de clústeres.
▸ Estudiar los algoritmos más comunes utilizados para clustering jerárquico y su
implementación en Python.
Aprendizaje Automático No Supervisado 4
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
4.2. Tipos de clustering jerárquico
E l clustering jerárquico es un algoritmo de aprendizaje no supervisado, agrupa los
datos en jerarquía y de allí su nombre. La jerarquía se representa a través de un
dendrograma o árbol que muestra las relaciones de inclusión de los diferentes
grupos (Van Der Post y Smith, 2023).
Dentro del clúster jerárquico tenemos dos grandes enfoques que trabajaremos de
manera más detallada:
▸ Clustering jerárquico aglomerativo o bottom-up.
▸ Clustering jerárquico divisivo o top-down.
Clustering jerárquico aglomerativo o bottom-up
Descripción
Se denomina aglomerativo porque empieza con grupos muy pequeños hasta formar
un grupo. En este caso, cada punto del conjunto de datos comienza como un clúster
individual, luego se combinan repetidamente en función de su similitud hasta que
todos los puntos hagan parte de un solo clúster o se alcance un criterio de parada.
Proceso
Asumiendo que se tienen un montón de puntos, el funcionamiento es el siguiente
(Dissanayake, 2024):
▸ Primero, cada punto es un grupo en sí mismo. Como se puede ver en la Figura 1.
Aprendizaje Automático No Supervisado 5
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 1. Cada punto es un clúster. Fuente: elaboración propia.
▸ Luego se agrupan o dos puntos o dos grupos o un punto y un grupo cercano.
Aprendizaje Automático No Supervisado 6
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 2. Creando clústeres entre puntos o grupos cercanos. Fuente: elaboración propia.
▸ Se repiten los dos pasos anteriores hasta que todos pertenezcan a un mismo grupo.
Como se puede ver en la Figura 3.
Aprendizaje Automático No Supervisado 7
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 3. Creación de un clúster. Fuente: elaboración propia.
Clustering jerárquico divisivo o top-down
Descripción
Comienza con todos los datos en un solo clúster y se divide recursivamente en
clústeres más pequeños.
Proceso
Aprendizaje Automático No Supervisado 8
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
El método divisivo funciona exactamente al revés del método aglomerativo
(Dissanayake, 2024):
▸ Comienza guardando en un solo grupo todos los puntos.
▸ En la segunda iteración, divide el grupo en dos pequeños grupos, intenta dividir un
grupo más grande en grupos más pequeños.
▸ En la tercera iteración, se divide aún más en grupos más pequeños.
▸ El algoritmo itera hasta que cada punto sea un clúster en sí mismo.
Figura 4. Paso a paso del clúster jerárquico divisivo. Fuente: elaboración propia.
¿Cómo dividir los clústeres?
Rara vez se utiliza el método divisivo, normalmente se usa el aglomerativo. Es más
natural intentar agrupar en función de la similitud o la distancia que intentar dividir
pedazos más pequeños.
Aprendizaje Automático No Supervisado 9
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Las secuencias de los puntos en un grupo se pueden registrar como un árbol y por
eso le llamamos jerarquía. El dendrograma es un árbol que registra la secuencia de
fusiones en el caso del agrupamiento aglomerativo o divisiones en el caso de
agrupamiento divisivo (Prakash, 2023).
Como ya hemos mencionado, este algoritmo no recibe el número de grupos como
hiperparámetros. En este caso, se puede elegir el número de grupos de maneara
visual.
▸ El primer paso es calcular una matriz de proximidad, lo que significa partiendo de los
puntos dados: P1,P2,P3,…,Pn. En la matriz se registran los valores de similitud entre
cada par de puntos.
▸ Se genera un bucle con los siguientes pasos:
• Fusión de los grupos más cercanos y registro del valor de la distancia entre los
grupos en la matriz de proximidad.
• Se ignoran los valores de la diagonal, ya que es el cálculo de la distancia del punto
consigo mismo. Es necesario registrar los valores fuera de la diagonal.
▸ Con las distancias de los diferentes clústeres creados se va creando el
dendrograma, el detalle algorítmico se puede ver en la Figura 5.
Aprendizaje Automático No Supervisado 10
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Aprendizaje Automático No Supervisado 11
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 5. Paso a paso para crear el dendrograma. Fuente: elaboración propia.
▸ Se analizan cada una de las divisiones que se pueden realizar en el dendrograma
para elegir el número de clústeres ideal.
• Vamos a trazar una línea vertical que haga un primer corte en el diagrama. En este
caso se crearían 2 clúster. Uno formado por los puntos P1, P2, P3 y el segundo
formado por los puntos P4, P5 y P6 (ver Figura 6).
Aprendizaje Automático No Supervisado 12
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
• Hagamos otro corte más abajo. En este caso, se crean 4 clústeres o grupos (ver
Figura 7).
• Y un corte más, creando en esta ocasión 6 clústeres Figura 8).
Figura 6. Corte en la parte más alta del dendrograma. Fuente: elaboración propia.
Figura 7. Corte en la parte media del dendrograma. Fuente: elaboración propia.
Aprendizaje Automático No Supervisado 13
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 8. Corte en la parte baja del dendrograma. Fuente: elaboración propia.
Figura 9. Análisis del mejor corte del dendrograma para decidir el mejor valor para el número de clústeres.
Fuente: elaboración propia.
Para el ejemplo anterior, el mejor corte es el de 2 clústeres. Debido a que es la
distancia más larga y garantiza la suficiente distancia inter-clúster haciendo que cada
grupo este bien diferenciado.
¿Cómo definimos la similitud inter-clúster? Para dar respuesta a esta pregunta
existen diferentes métodos:
▸ Mínimo o «single linkage algorithm» : es la distancia más corta entre dos puntos
que pertenezcan a los dos grupos. Se mide la distancia entre los puntos más
Aprendizaje Automático No Supervisado 14
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
cercanos de los diferentes grupos (Figura 10). La fortaleza de este método es que
puede manejar formas no elípticas. Y como limitación es que es altamente sensible a
ruido y valores outliers.
Figura 10. Distancia mínima inter-clúster. Fuente: elaboración propia.
▸ Máximo o «complete linkage algorithm»: calcula la distancia máxima entre
cualquier par de puntos que pertenezcan a diferentes grupos. Representa la máxima
disimilitud entre conglomerados e indica la presencia de conglomerados bien
separados, como se puede observar en la Figura 11. Es menos susceptible al ruido.
Aprendizaje Automático No Supervisado 15
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 11. Distancia máxima inter-clúster. Fuente: elaboración propia.
▸ Media-grupal «average linkage»: calcula la distancia promedio entre todos los
pares de puntos de datos que pertenecen a los diferentes grupos. Se obtiene una
medida de disimilitud promedio entre grupos, como se puede observar en la Figura
12. Este método también es menos susceptible al ruido y a los valores atípicos.
Aprendizaje Automático No Supervisado 16
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 12. Distancia media grupal inter-clúster. Fuente: elaboración propia.
▸ Entre-centroides: se calcula el centroide de cada grupo y se calcula la distancia
entre ellos. Como se puede observar en la Figura 13.
Aprendizaje Automático No Supervisado 17
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 13. Distancia entre centroides. Fuente: elaboración propia.
▸ Método Ward: es una técnica de enlace utilizada en el clustering jerárquico
aglomerativo. Su objetivo principal es minimizar la varianza dentro de cada clúster.
Cada punto de datos comienza como un clúster individual. En cada paso, se
seleccionan los dos clústeres cuya fusión resulta en el menor incremento en la suma
total de las varianzas dentro de todos los clústeres. Esta suma se calcula como la
suma de las distancias cuadráticas entre cada punto y el centroide del clúster al que
pertenece. El proceso de fusión se repite hasta que todos los puntos estén en un
solo clúster o se cumpla un criterio de parada específico (por ejemplo, un número
predefinido de clústeres).
Aprendizaje Automático No Supervisado 18
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
4.3. Implementación en Python
Inspirados en el ejemplo mostrado en el siguiente enlace
https://www.aprendemachinelearning.com/k-means-en-python-paso-a-paso/
construiremos el dendograma de un conjunto de datos que corresponde a un análisis
psicológico de tweets de famosos.
El conjunto de datos tiene los siguientes atributos: grado de apertura, grado de
orden, extraversión, empatía, neuroticismo, número medio de palabras usadas en los
tweets y categoría de actividad laboral.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sb
dataframe = pd.read_csv(r"analisis.csv")
dataframe.head()
#140 famosos se les hizo un test Basado en una metodología de psicología
conocida como “Ocean: The Big Five”
#OP --> grado de apertura a nuevas experiencias, curiosidad, arte.
#CO --> grado de orden, pulcritud, organización.
#EX --> Extraversión - grado de timidez, soledad o participación ante el
grupo social
#AG --> Agreeableness - grado de empatía con los demás, temperamento
#NE --> Neuroticismo, - grado de neuroticismo, nerviosismo, irritabilidad,
seguridad en sí mismo.
#Wordcount--> número medio de palabras utilizadas en sus tweets.
#Categoría - actividad laboral del usuario (actor, cantante, etc.)
El archivo contiene 9 categorías laborales: actor/actriz, cantante, modelo, tv, series,
radio, tecnología, deportes, política y escritor.
print(dataframe.groupby('categoria').size())
# Como vemos tenemos 34 cantantes, 27 actores, 17 deportistas, 16
políticos,etc.
#Borramos la categoría para no limitar los clústeres.
Aprendizaje Automático No Supervisado 19
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
dataframe.drop(['categoria'],1).hist()
plt.show()
def plot_dendrogram(model, **kwargs):
# Crear una matriz de enlaces y luego se dibuja el dendrograma.
# crear los recuentos de muestras debajo de cada nodo
counts = np.zeros(model.children_.shape[0])
n_samples = len(model.labels_)
for i, merge in enumerate(model.children_):
current_count = 0
for child_idx in merge:
if child_idx < n_samples:
current_count += 1
else:
current_count += counts[child_idx - n_samples]
counts[i] = current_count
linkage_matrix = np.column_stack(
[model.children_, model.distances_, counts]
).astype(float)
# Dibujar el dendograma
dendrogram(linkage_matrix, **kwargs)
from sklearn.cluster import AgglomerativeClustering
from scipy.cluster.hierarchy import dendrogram
model = AgglomerativeClustering(distance_threshold=0, n_clusters=None,
affinity='euclidean')
# affinity: distancia entre instancias
# distance_threshold=0, El umbral de distancia de enlace o por encima del
cual los clústeres no se fusionan.
# n_clusters=None si no se tienen predefinidos el número de clúster
# linkage{‘ward’, ‘complete’, ‘average’, ‘single’}, default=’ward’:
# * Enlace simple (single linkage): La distancia entre dos clusters se
define como la distancia entre los dos puntos más cercanos, uno de cada
cluster.
# * Enlace promedio (average linkage): distancia promedio entre todos los
pares de puntos, uno de cada cluster.
# * Enlace completo (complete linkage): mide la distancia entre dos
clusters basándose en la distancia máxima entre cualquier par de puntos,
tomando el par más lejano.
# * Enlace Ward: se basa en los criterios de minimización de la varianza.
Busca que la varianza total del nuevo clúster sea lo más baja posible.
Aprendizaje Automático No Supervisado 20
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
model = model.fit(X)
plt.title('Clúster Jerárquico')
plot_dendrogram(model, truncate_mode="level")
plt.xlabel("Número de instancias en el nodo.")
# Cutting the dendrogram at max_d
plt.axhline(y=45, c='k')
plt.show()
Figura 14. Dendrograma resultante. Fuente: elaboración propia.
Ahora etiquetamos cada instancia según la división que hemos realizado. Se van a
generar 5 clústeres.
model_1 = AgglomerativeClustering(n_clusters=5, affinity='euclidean')
etiquetas = model_1.fit_predict(X)
# affinity: distancia entre instancias
Generándose etiquetas desde la 0 hasta la 4. Como se puede ver en la Figura 15.
Aprendizaje Automático No Supervisado 21
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 15. Etiquetas a partir del análisis gráfico del dendrograma. Fuente: elaboración propia.
A continuación, veremos el vídeo Implementación de clustering jerárquico en
Python.
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=de6618d3-211d-
4070-a01e-b1be010c35ad
Aprendizaje Automático No Supervisado 22
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
4.4. Comparación entre K-Means y clúster
jerárquico
Las principales diferencias entre estos dos algoritmos son a nivel de metodología,
número de clústeres, forma de los clústeres, interpretabilidad, escalabilidad y
sensibilización a la inicialización.
Tabla 1. Principales diferencias entre K-Means y clúster jerárquico. Fuente: elaboración propia.
¿Cuándo usar K-Means y cuándo agrupación jerárquica?
▸ K-Means funciona muy bien cuando la separación entre los grupos está bien
Aprendizaje Automático No Supervisado 23
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
definida. Como el algoritmo busca minimizar la suma de cuadrados dentro del grupo;
es muy eficaz identificando grupos compactos o esféricos.
▸ El clúster jerárquico permite explorar las relaciones dentro de los datos en diferentes
niveles de granularidad.
▸ K-Means es computacionalmente más eficiente y puede manejar gran cantidad de
datos. Es ideal para aplicaciones donde la eficiencia es importante.
▸ El clúster jerárquico es adecuado para conjuntos de datos pequeños o medianos.
▸ K-Means requiere el número de clústeres previamente, si se conoce este valor K-
Means puede ser una opción adecuada.
▸ El clúster jerárquico no requiere que el número este predeterminado.
▸ K-Means funciona muy bien con datos numéricos, gracias al manejo de distancias
entre puntos. Es adecuado para variables continuas o atributos que se puedan
representar numéricamente.
▸ El clúster jerárquico es ideal para datos donde existe una estructura jerárquica
natural, como taxonomías biológicas, jerarquías organizacionales o relaciones
genealógicas.
▸ K-Means ayuda a crear prototipos y a realizar análisis exploratorio de datos.
Proporciona información inicial sobre la estructura de los datos y ayuda a formular
una hipótesis y realizar observaciones iniciales.
▸ El clúster jerárquico es visualmente atractivo e informativo. Es útil cuando se desea
explorar y visualizar cómo se agrupan los datos en diferentes niveles de similitud, lo
que puede proporcionar una visión inicial valiosa antes de aplicar otros métodos de
clustering.
▸ Si tiene una idea de donde se pueden inicializar los clústeres, K-Means puede
converger más rápido y producir resultados más precisos.
Aprendizaje Automático No Supervisado 24
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ En el clúster jerárquico, a diferencia de K-Means, no es necesario especificar el
número de clústeres al principio. El dendrograma permite visualizar y decidir el
número óptimo de clústeres.
A continuación, veremos el vídeo Comparación entre K-Means y clustering
jerárquico.
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=b63b42fc-95ba-
4426-9da1-b1be014b0f73
Aprendizaje Automático No Supervisado 25
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
4.5. Cuaderno de ejercicios
Ejercicio 1
Comparación de métodos
Describe las principales diferencias entre el clustering jerárquico aglomerativo y
divisivo. ¿En qué situaciones crees que es uno mejor que el otro?
Solución
El método aglomerativo comienza con cada punto como un clúster individual y los
fusiona hasta formar un único clúster, mientras que el divisivo comienza con todos
los puntos en un solo clúster y los divide recursivamente. Se puede discutir la
eficiencia computacional y la facilidad de interpretación en diferentes contextos de
datos.
Ejercicio 2
Interpretación de dendrogramas
Dibuja un dendrograma con base en los siguientes puntos dados {2,3,5,8,10,12}.
Describe el proceso de agrupamiento y determina el número óptimo de clústeres a
partir del dendrograma.
Solución
Mostrar un dendrograma donde se fusionan los puntos más cercanos primero (2 y 3,
luego 5, y así sucesivamente) y explicar cómo el corte del dendrograma puede
determinar el número de clústeres óptimos.
Ejercicio 3
Aplicación práctica
Aprendizaje Automático No Supervisado 26
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Implementa un algoritmo de clustering jerárquico aglomerativo en Python utilizando
un conjunto de datos de tu elección. Describe cada paso del proceso, desde la
importación hasta la visualización del dendrograma.
Solución
Un ejemplo sencillo para este punto podría ser el siguiente:
# Import libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
# Import iris data
iris = datasets.load_iris()
iris_data = pd.DataFrame(iris.data)
iris_data.columns = iris.feature_names
iris_data['flower_type'] = iris.target
iris_data.head()
import scipy.cluster.hierarchy as sc
# Plot dendrogram
plt.figure(figsize=(20, 7))
plt.title("Dendrograms")
# Create dendrogram
sc.dendrogram(sc.linkage(iris_X, method='ward'))
plt.title('Dendrogram')
plt.xlabel('Sample index')
plt.ylabel('Euclidean distance')
Ejercicio 4
Evaluación de similitud
Explica cómo se puede definir la similitud inter-clúster utilizando métodos single
linkage, complete linkage y average linkaje y proporciona un ejemplo.
Solución
Aprendizaje Automático No Supervisado 27
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Single linkage
Definición: la distancia entre dos clústeres se define como la distancia entre los dos
puntos más cercanos, uno de cada clúster.
Ejemplo:
▸ Clúster A: puntos (1, 2) y (2, 3).
▸ Clúster B: puntos (4, 5) y (6, 7).
Cálculo de distancias entre todos los puntos:
▸ Distancia entre (1, 2) y (4, 5): sqrt((4-1)² + (5-2)²) = sqrt(18) = 4.24.
▸ Distancia entre (1, 2) y (6, 7): sqrt((6-1)² + (7-2)²) = sqrt(50) = 7.07.
▸ Distancia entre (2, 3) y (4, 5): sqrt((4-2)² + (5-3)²) = sqrt(8) = 2.83.
▸ Distancia entre (2, 3) y (6, 7): sqrt((6-2)² + (7-3)²) = sqrt(32) = 5.66.
Single linkage: la distancia mínima es 2.83.
Complete linkage
Definición: la distancia entre dos clústeres se define como la distancia entre los dos
puntos más alejados, uno de cada clúster.
Ejemplo:
▸ Clúster A: puntos (1, 2) y (2, 3).
▸ Clúster B: puntos (4, 5) y (6, 7).
Cálculo de distancias entre todos los puntos:
▸ Distancia entre (1, 2) y (4, 5): sqrt((4-1)² + (5-2)²) = sqrt(18) = 4.24.
Aprendizaje Automático No Supervisado 28
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Distancia entre (1, 2) y (6, 7): sqrt((6-1)² + (7-2)²) = sqrt(50) = 7.07.
▸ Distancia entre (2, 3) y (4, 5): sqrt((4-2)² + (5-3)²) = sqrt(8) = 2.83.
▸ Distancia entre (2, 3) y (6, 7): sqrt((6-2)² + (7-3)²) = sqrt(32) = 5.66.
Complete linkage: la distancia máxima es 7.07.
Average linkage
Definición: la distancia entre dos clústeres se define como el promedio de todas las
distancias entre pares de puntos, uno de cada clúster.
Ejemplo:
▸ Clúster A: puntos (1, 2) y (2, 3).
▸ Clúster B: puntos (4, 5) y (6, 7).
Cálculo de distancias entre todos los puntos:
▸ Distancia entre (1, 2) y (4, 5): sqrt((4-1)² + (5-2)²) = sqrt(18) = 4.24.
▸ Distancia entre (1, 2) y (6, 7): sqrt((6-1)² + (7-2)²) = sqrt(50) = 7.07.
▸ Distancia entre (2, 3) y (4, 5): sqrt((4-2)² + (5-3)²) = sqrt(8) = 2.83.
▸ Distancia entre (2, 3) y (6, 7): sqrt((6-2)² + (7-3)²) = sqrt(32) = 5.66.
Average linkage: el promedio de estas distancias es (4.24 + 7.07 + 2.83 + 5.66) / 4 =
4.95.
Aprendizaje Automático No Supervisado 29
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
4.6. Referencias bibliográficas
Dissanayake, K. (2024, junio 6). Machine Learning Algorithms(14)— K-Means
Clustering andHierarchical Clustering. Medium. https://towardsdev.com/machine-
learning-algorithms-14-k-means-clustering-and-hierarchical-clustering-46acc005057d
Prakash, C. (2023, junio 25). Everything to know about Hierarchical Clustering:
Agglomerative Clustering & Divisive Clustering. Medium.
https://medium.com/@chandu.bathula16/everything-to-know-about-hierarchical-
clustering-agglomerative-clustering-divisive-clustering-badf31ae047
Van Der Post, H. y Smith, M. (2023). Unsupervised Machine Learning: with Python.
Reactive Publishing.
Aprendizaje Automático No Supervisado 30
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
A fondo
Una introducción al clustering jerárquico en
Python
Keita, Z. (2023, enero). An introduction to Hierarchical clustering in Python.
Datacamp. https://www.datacamp.com/es/tutorial/introduction-hierarchical-clustering-
python
Este artículo proporciona los detalles de la agrupación jerárquica y su
implementación en Python.
Aprendizaje Automático No Supervisado 31
Tema 4. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
¿Cómo se analiza el clúster jerárquico en la
herramienta estadística SPSS?
Elías Alvarado. (2023, diciembre 31). Análisis clúster jerárquico en SPSS [Vídeo].
YouTube. https://www.youtube.com/watch?v=jUAVEHXdjUI&t=4s
Elías a través de un ejemplo práctico enseña cómo utilizar el SPSS para crear y
analizar clústeres jerárquicos.
Aprendizaje Automático No Supervisado 32
Tema 4. A fondo
© Universidad Internacional de La Rioja (UNIR)
Test
1. ¿Qué método de clustering jerárquico comienza con todos los puntos en un solo
clúster y los divide recursivamente en clústeres más pequeños?
A. Clustering aglomerativo.
B. Clustering divisivo.
C. K-Means.
D. DBSCAN.
2. ¿Cuál de las siguientes técnicas de enlace calcula la distancia entre dos
clústeres basándose en la distancia mínima entre puntos?
A. Complete linkage.
B. Average linkage.
C. Single linkage.
D. Centroid linkage.
3. ¿Qué representa un dendrograma en el contexto del clustering jerárquico?
A. Un gráfico de dispersión.
B. Una jerarquía de clústeres.
C. Un histograma de frecuencias.
D. Un gráfico de líneas.
4. ¿Cuál es la principal diferencia entre el clustering jerárquico aglomerativo y el
divisivo?
A. El aglomerativo es más rápido que el divisivo.
B. El aglomerativo requiere el número de clústeres previamente establecidos.
C. El divisivo usa técnicas de enlace, mientras que el aglomerativo no.
D. El aglomerativo fusiona los clústeres, mientras que el divisivo los divide.
Aprendizaje Automático No Supervisado 33
Tema 4. Test
© Universidad Internacional de La Rioja (UNIR)
Test
5. ¿Cuál de las siguientes técnicas de enlace calcula la distancia entre dos
clústeres basándose en la distancia máxima de puntos?
A. Complete linkage.
B. Average linkage.
C. Single linkage.
D. Método Ward.
6. ¿Qué tipos de datos son más adecuados para el clustering jerárquico?
A. Datos con forma esférica.
B. Datos categóricos.
C. Datos con estructuras complejas y arbitrarias.
D. Datos que requieren particionamiento rápido.
7. ¿Cuál es una desventaja del clustering jerárquico comparado con K-Means?
A. No puede manejar datos categóricos.
B. Es computacionalmente más costoso.
C. Requiere el número de clústeres previamente.
D. No proporciona visualización de resultados.
8. En el contexto del clustering jerárquico, ¿qué método de enlace se basa en la
minimización de la varianza?
A. Single linkage.
B. Complete linkage.
C. Average linkage.
D. Método Ward.
Aprendizaje Automático No Supervisado 34
Tema 4. Test
© Universidad Internacional de La Rioja (UNIR)
Test
9. ¿Cuál es el principal beneficio de usar el clustering jerárquico sobre K-Means
cuando no se conoce el número de clústeres?
A. Es más rápido.
B. Ofrece una jerarquía de clústeres.
C. Es menos sensible a la inicialización.
D. Maneja mejor los datos categóricos.
10. En el clustering jerárquico, ¿qué se utiliza para representar las relaciones de
inclusión entre diferentes grupos?
A. Gráfico de barras.
B. Diagrama de cajas.
C. Dendrograma.
D. Gráfico de líneas.
Aprendizaje Automático No Supervisado 35
Tema 4. Test
© Universidad Internacional de La Rioja (UNIR)
Tema 5
Aprendizaje Automático No Supervisado
Tema 5. Clustering basado en
densidad DBSCAN
Índice
Esquema
Ideas clave
5.1. Introducción y objetivos
5.2. ¿Por qué DBSCAN?
5.3. Parametrización
5.4. Pasos para seguir con el DBSCAN
5.5. Métricas de evaluación DBSCAN
5.6. Implementación en Python
5.7. Comparación entre DBSCAN y K-Means
5.8. Cuaderno de ejercicios
5.9. Referencias bibliográficas
A fondo
Vídeo explicativo sobre DBSCAN
Tutorial de codificación de DBSCAN en Python
Test
Esquema
Aprendizaje Automático No Supervisado 3
Tema 5. Esquema
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
5.1. Introducción y objetivos
El algoritmo DBSCAN (Density-Based Spatial Clustering of Applications with Noise)
es una técnica de agrupamiento no supervisada ampliamente utilizada en el campo
de la inteligencia artificial y el análisis de datos. Desarrollado por Martin Ester, Hans-
Peter Kriegel, Jörg Sander y Xiaowei Xu en 1996. DBSCAN se destaca por su
capacidad para identificar clústeres de forma arbitraria en conjuntos de datos que
contienen ruido y distribuciones no lineales.
A diferencia de otros algoritmos de agrupamiento, como K-Means, que requieren que
el usuario especifique el número de clústeres, DBSCAN trabaja identificando
regiones densas de puntos y expandiéndose a partir de estos. Utiliza dos parámetros
principales: ε (épsilon), que define el radio de vecindad de un punto, y MinPts, que
determina el número mínimo de puntos necesarios para formar un clúster. Un punto
se considera parte de un clúster si al menos MinPts puntos caen dentro de su radio ε.
Si un punto no cumple con este criterio y no pertenece a ningún clúster, se clasifica
como ruido.
DBSCAN es particularmente útil en aplicaciones donde los datos tienen estructuras
complejas y no se conoce de antemano el número de clústeres. Además, su
capacidad para manejar ruido y su eficiencia con grandes conjuntos de datos lo
hacen ideal para tareas de minería de datos, reconocimiento de patrones y detección
de anomalías.
En este tema, exploraremos en detalle cómo funciona DBSCAN, sus ventajas y
desventajas, y presentaremos casos de uso prácticos que demuestran su
aplicabilidad en el mundo real.
Como objetivos de este tema nos planteamos:
▸ Explicar en detalle los conceptos y mecanismos detrás del algoritmo DBSCAN,
Aprendizaje Automático No Supervisado 4
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
incluyendo la definición de los parámetros ε y MinPts, y cómo estos afectan el
proceso de agrupamiento.
▸ Analizar las ventajas y limitaciones de DBSCAN en comparación con otros
algoritmos de agrupamiento, destacando su capacidad para manejar ruido y su
flexibilidad en la identificación de clústeres de formas arbitrarias.
Aprendizaje Automático No Supervisado 5
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
5.2. ¿Por qué DBSCAN?
Los métodos basados en K-Means y agrupación jerárquica encuentran grupos que
tienen forma esférica o convexa; es decir, solamente son adecuados para conjuntos
de datos cuyas clases están bien separadas. Otro problema de los algoritmos más
convencionales es que se ven muy afectados por la presencia de ruido o por valores
atípicos.
DBSCAN puede encontrar clústeres de forma arbitraria y compleja. Esto es gracias a
que se basa en el cálculo de la densidad de los puntos para formar un grupo.
Además, supera uno de los grandes obstáculos de los algoritmos que hemos visto y
es que no es necesario especificar o conocer de antemano el número de clústeres.
En su lugar, utiliza dos parámetros (épsilon), que define la distancia máxima entre
dos puntos para considerarlos vecinos, y MinPts, que es el número mínimo requerido
para formar un clúster.
En la vida real los datos tienen muchas irregularidades, los grupos tienen diferentes
formas, contienen ruido y los valores atípicos son muy comunes. Basándose en la
idea de que un grupo en el espacio de datos es una región contigua de alta densidad
de puntos, separada de otros grupos similares por regiones contiguas de baja
densidad de puntos, DBSCAN tiene la capacidad de identificar puntos de datos que
no pertenecen a ningún clúster, y los etiqueta fácilmente como posible ruido.
Otra característica del DBSCAN es su eficiencia en conjuntos de grandes cantidades
de datos, utilizando sus variantes KD-Trees o R-Trees para buscar vecinos de
manera eficiente.
Aprendizaje Automático No Supervisado 6
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
5.3. Parametrización
Para utilizar DBSCAN es importante entender y ajustar sus dos parámetros clave:
▸ Épsilon (ϵ): es la distancia máxima entre dos puntos para que se consideren
vecinos el uno del otro. Es decir, si la distancia entre dos puntos es menor o igual a
ϵ se consideran vecinos. Si este valor es muy pequeño, una gran parte de los datos
se considerarán como valor atípico. En cambio, si el valor es muy grande, los grupos
se fusionarán y la mayoría de los puntos de datos estarán en los mismos grupos.
▸ Mínimo número de puntos: el número mínimo de puntos que debe formar un grupo
denso. Como regla general, los mínimos se pueden derivar del número de
dimensiones D en el conjunto de datos como mínimo número de puntos >= D+1. El
valor debe ser elegido, y como sugerencia es que sea 3 como mínimo.
En este algoritmo tenemos tres tipos de puntos de datos:
▸ Punto central: es considerado punto central si tiene más puntos MinPts dentro de
los eps (ϵ).
▸ Punto fronterizo: un punto que tiene menos de MinPts dentro de los eps (ϵ), pero
que está en las proximidades de un punto central.
▸ Ruido o valor atípico: un punto que no es un punto central o un punto fronterizo.
Estos parámetros se pueden ajustar utilizando prueba y error o a través de la gráfica
del codo. También se puede usar la matriz de distancia, de esta forma se pueden
estimar valores razonables.
Aprendizaje Automático No Supervisado 7
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
5.4. Pasos para seguir con el DBSCAN
Los pasos que sigue el algoritmo son los siguientes:
▸ Encuentra todos los puntos vecinos dentro de eps (ϵ) e identifica los puntos
centrales o visitados con más vecinos teniendo en cuenta el número.
▸ Para cada punto central, si aún no le han asignado grupo, se crea un nuevo grupo.
▸ De manera recursiva encuentra todos los puntos conectados por densidad y
asígnalos al mismo grupo que el punto central. Un punto a y b están conectados por
densidad si existe un punto c que tiene un número suficiente de puntos en sus
vecinos y ambos puntos a y b están dentro de la distancia ϵ. Es un proceso de
encadenamiento; entonces, si a es vecino de c, c es vecino de d y d es vecino de e,
lo que a su vez indica que d es vecino de a, además implica que b es vecino de a.
▸ Repetir con todos los puntos restantes no visitados en el conjunto de datos. Aquellos
puntos que no pertenecen a ningún grupo son considerados ruido o outliers.
Pseudocódigo (GeeksforGeeks, 2023):
DBSCAN(conjunto de datos, eps, MinPts){
# índice de clúster
C = 1
para cada punto no visitado p en el conjunto de datos {
marcar p como visitado
# encontrar vecinos
Vecinos N = encontrar los puntos vecinos de p
si |N|>=Ptos Mínimos:
N = NU N'
si p' no es miembro de ningún grupo:
agregue p' al grupo C
Veamos un ejemplo de aplicación utilizando datos de peso y talla:
Asumamos que hemos recopilado datos de peso y talla de un grupo de personas:
Aprendizaje Automático No Supervisado 8
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Tabla 1. Recopilación de datos. Fuente: elaboración propia.
Dibujamos los puntos originales (Figura 1).
Figura 1. Puntos originales de peso y talla. Fuente: elaboración propia.
Aprendizaje Automático No Supervisado 9
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 2. Identificación de un punto y sus vecinos. Fuente: elaboración propia.
El punto rojo está cerca de otros seis puntos (Figura 2).
Figura 3. Identificación de varios puntos y sus vecinos. Fuente: elaboración propia.
En la Figura 3 vemos dos puntos que tienen seis puntos cerca y un punto (el número
3) está cerca solo de 1 punto y no hay otros puntos en sus proximidades. Así se
Aprendizaje Automático No Supervisado 10
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
repite el proceso para cada uno de los puntos del conjunto de datos.
En este ejemplo estamos considerando que un punto central debe tener cerca al
menos otros cinco puntos. Sin embargo, debemos tener en cuenta que el número de
puntos cercanos para un punto central está definido por el usuario.
Para el ejemplo de la Figura 3, los puntos 1 y 2 son puntos centrales, pero el punto 3
no lo es, no cumple la condición.
Elegimos aleatoriamente un punto central y lo asignamos al primer grupo como se
puede observar en la Figura 4.
Figura 4. Empezamos a crear un clúster a partir de la elección aleatoria de un punto. Fuente: elaboración
propia.
Luego todos los puntos centrales que están cerca de este primer grupo creado se
unen a él y lo extienden a los otros puntos centrales que están cerca.
Existen puntos cercanos a puntos centrales, pero no cumplen la condición de tener
un número de puntos cercanos. Dichos puntos no pueden unirse al grupo; haciendo
que el grupo no pueda extenderse más.
Aprendizaje Automático No Supervisado 11
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Veamos el código y el resultado de utilizar DBSCAN en este ejemplo:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler
# Generar datos aleatorios
np.random.seed(42) # Fijar la semilla para reproducibilidad
peso = np.random.randint(50, 100, 100)
talla = np.random.randint(150, 200, 100)
# Crear un conjunto de datos combinando peso y talla
X = np.column_stack((peso, talla))
# Escalar los datos
X = StandardScaler().fit_transform(X)
# Aplicar DBSCAN
db = DBSCAN(eps=0.5, min_samples=5).fit(X)
labels = db.labels_
# Número de clusters en los datos, ignorando el ruido si está presente
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
# Graficar los resultados
unique_labels = set(labels)
colors = [plt.cm.Spectral(each) for each in np.linspace(0, 1,
len(unique_labels))]
# Graficar cada cluster con colores diferentes
for k, col in zip(unique_labels, colors):
if k == -1:
# El color negro es para el ruido.
col = [0, 0, 0, 1]
class_member_mask = (labels == k)
xy = X[class_member_mask]
plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
markeredgecolor='k', markersize=6)
plt.title(f'Número estimado de clusters: {n_clusters_}')
plt.xlabel('Peso (escalado)')
plt.ylabel('Talla (escalado)')
plt.show()
Aprendizaje Automático No Supervisado 12
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Finalmente, todos los puntos centrales se han asignado a un grupo. Hemos
terminado de crear nuevos grupos (Figura 5).
Figura 5. Resultado final al aplicar DBSCAN a los datos de peso y talla. Fuente: elaboración propia.
Al utilizar DBSCAN, podemos agrupar los datos de manera más precisa y eficiente.
El DBSCAN puede identificar clústeres anidados en grandes dimensiones. DBSCAN
imita la identificación de grupos por las densidades de los puntos en los que se
encuentran los grupos, mientras que los valores atípicos tienden a estar en áreas de
baja densidad.
Aprendizaje Automático No Supervisado 13
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
5.5. Métricas de evaluación DBSCAN
Veamos dos métricas que nos permiten evaluar y comparar algoritmos de clustering:
índice Rand y la puntuación silueta.
Índice Rand
Este índice mide la similitud entre dos agrupaciones (clústeres) de un conjunto de
datos: una agrupación «predicha» y una agrupación de referencia que puede ser una
agrupación hecha por otro algoritmo de clustering.
El índice Rand se basa en la idea de contar las decisiones de pares correctas y las
incorrectas hechas por el algoritmo de clustering. Se consideran las siguientes cuatro
cantidades:
▸ a: número de pares de puntos que están en el mismo clúster en ambos
agrupamientos (predicho y real).
▸ b: número de pares de puntos que están en clústeres diferentes en ambos
agrupamientos.
▸ c: número de pares de puntos que están en el mismo clúster en el agrupamiento
real, pero en clústeres diferentes en el agrupamiento predicho.
▸ d: número de pares de puntos que están en el mismo clúster en el agrupamiento
predicho, pero en clústeres diferentes en el agrupamiento real.
El índice Rand se calcula usando la siguiente fórmula:
Donde:
▸ a+ba + ba+b es el número total de acuerdos (pares que están en el mismo clúster
Aprendizaje Automático No Supervisado 14
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
en ambos agrupamientos o en diferentes clústeres en ambos agrupamientos).
▸ a+b+c+da + b + c + da+b+c+d es el número total de pares de puntos en el conjunto
de datos.
Interpretación del índice Rand:
▸ Valor de 1: indica una coincidencia perfecta entre los dos agrupamientos.
▸ Valor de 0: indica que no hay acuerdo entre los agrupamientos (esto es
teóricamente posible, pero improbable).
▸ Valor cercano a 1: indica un alto grado de similitud entre los agrupamientos.
▸ Valor cercano a 0.5: indica que la similitud entre los agrupamientos es similar a la
que se esperaría al azar.
Puntuación silueta
La puntuación de silueta mide qué tan similar es un punto a los puntos de su propio
clúster (cohesión) en comparación con los puntos del clúster más cercano
(separación). Se define para cada punto y luego se puede promediar para todos los
puntos en el conjunto de datos.
Cálculo de la puntuación de silueta
Para un punto i:
▸ Cohesión ( ): la distancia promedio entre el punto i y todos los demás puntos en
el mismo clúster.
▸ Separación ( ): la distancia promedio entre el punto i y todos los puntos en el
clúster más cercano diferente del suyo.
La puntuación de silueta para el punto i se define como:
Aprendizaje Automático No Supervisado 15
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Donde:
▸ puede variar entre -1 y 1.
▸ Un valor cercano a 1 indica que el punto está bien agrupado.
▸ Un valor cercano a -1 indica que el punto está mal agrupado.
▸ Un valor cercano a 0 indica que el punto está en el límite entre dos clústeres.
A continuación, veremos el vídeo Comparación de dos algoritmos de clustering
utilizando el índice Rand y puntuación silueta.
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=906d592f-2449-
4f71-aacf-b1be01528d68
Aprendizaje Automático No Supervisado 16
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
5.6. Implementación en Python
El DBSCAN utiliza el KD-Tree y el R-Tree para optimizar la búsqueda de clústeres.
Vamos a ver cómo construir e implementar un KD-Tree, su aplicación en el algoritmo
DBSCAN para mejorar el rendimiento de la búsqueda de puntos centrales y su
implementación en Python.
KD-Tree
U n KD-Tree (K-Dimensional Tree) es una estructura de datos en forma de árbol
utilizada para organizar puntos en un espacio k-dimensional. Es particularmente útil
para operaciones como la búsqueda de vecinos más cercanos y la agrupación de
datos en algoritmos de aprendizaje automático y minería de datos.
Estructura del árbol
Un KD-Tree es un árbol binario en el que cada nodo representa una partición de los
puntos de datos en el espacio k-dimensional.
Cada nodo tiene una «dimensión de corte» asociada y divide los puntos según su
valor en esa dimensión.
Construcción del KD-Tree
▸ La construcción del KD-Tree es un proceso recursivo.
▸ Comenzamos con todos los puntos y elegimos una dimensión para dividirlos.
▸ Encontramos el punto mediano en esa dimensión y usamos ese punto para dividir el
conjunto de datos en dos subconjuntos: uno con puntos a la izquierda del mediano y
otro con puntos a la derecha.
▸ Recursivamente repetimos el proceso para cada subconjunto, alternando las
dimensiones en cada nivel del árbol (primera dimensión, segunda dimensión, ..., k-
Aprendizaje Automático No Supervisado 17
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
ésima dimensión, y luego volvemos a la primera dimensión).
Búsqueda en el KD-Tree
Para buscar los vecinos más cercanos de un punto dado, navegamos el árbol
comparando el punto con los nodos del árbol y decidiendo si ir a la izquierda o a la
derecha.
Podemos podar (descartar) ramas del árbol que no pueden contener un vecino más
cercano que el mejor encontrado hasta ahora, reduciendo así el número de
comparaciones necesarias.
Supongamos que tenemos un conjunto de puntos en un espacio 2D (x, y):
▸ Primera división (dimensión x):
• Ordenamos los puntos por la coordenada x.
• Elegimos el punto mediano (mediano en x) como la raíz del árbol.
• Los puntos a la izquierda del mediano se convertirán en el subárbol izquierdo y los
puntos a la derecha en el subárbol derecho.
▸ Segunda división (dimensión y):
• En el nivel siguiente, ordenamos los puntos en cada subárbol por la coordenada y.
• Elegimos el punto mediano en y para dividir nuevamente los puntos en subárboles
izquierdo y derecho.
▸ Continuamos recursivamente:
• Alternamos las dimensiones x y y en cada nivel del árbol.
Si tenemos los siguientes puntos: (3, 6), (17, 15), (13, 15), (6, 12), (9, 1),
(2, 7), (10, 19).
Aprendizaje Automático No Supervisado 18
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Ordenamos los puntos teniendo en cuenta la coordenada X: (2, 7), (3, 6),
(6, 12), (9, 1), (10, 19), (13, 15), (17, 15).
Primera división (x):
Mediana en x: (9, 1).
Raíz: (9, 1).
Izquierda: (3, 6), (2, 7), (6, 12)
Derecha: (10, 19), (13, 15), (17, 15).
Ordenamos los puntos teniendo en cuenta la coordenada Y del subárbol
izquierdo que obtuvimos con la coordenada x: (3, 6), (2, 7), (6, 12).
Primera división (y):
Mediana en x: (2,7).
Raíz: (2, 7).
Izquierda: (3, 6)
Derecha: (6,12).
Y así sucesivamente alternando las dimensiones x y y en cada nivel del
árbol.
Ventajas del KD-Tree
▸ Eficiencia en búsquedas: reduce el número de comparaciones necesarias para
buscar puntos cercanos.
Desventajas
Aprendizaje Automático No Supervisado 19
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Desequilibrio: si los datos no están distribuidos uniformemente, el árbol puede
volverse desequilibrado, afectando el rendimiento.
▸ Actualizaciones: insertar o eliminar puntos puede requerir la reconstrucción del
árbol.
Una de las partes críticas del algoritmo DBSCAN es la consulta de vecindad:
determinar los puntos que están dentro de un cierto radio (eps) de un punto dado.
Este proceso puede ser computacionalmente costoso, especialmente para grandes
conjuntos de datos, debido a la necesidad de calcular distancias entre muchos pares
de puntos.
El Kd-Tree se puede utilizar para acelerar estas consultas de vecindad. En lugar de
comparar cada punto con todos los demás para encontrar vecinos dentro del radio
eps, se puede utilizar el Kd-Tree para reducir significativamente el número de
comparaciones necesarias.
R-Tree
E l R-Tree es una estructura de datos en forma de árbol utilizada para indexar
información espacial o multidimensional. Es particularmente útil para realizar
consultas espaciales eficientes, como encontrar todos los objetos dentro de una
región dada. A diferencia de otros árboles, como el KD-Tree, el R-Tree está diseñado
para manejar datos que no solo se representan como puntos, sino también como
objetos de mayor dimensión (rectángulos, polígonos, etc.).
Estructura del árbol
Un R-Tree está compuesto por nodos que contienen un número variable de entradas.
Cada entrada en un nodo no hoja es un par formado por un identificador de nodo hijo
y el MBR (Minimum Bounding Rectangle) de todos los objetos contenidos en ese
nodo hijo.
Aprendizaje Automático No Supervisado 20
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Las hojas del árbol contienen las entradas reales, que son los MBR de los objetos
almacenados.
Minimum Bounding Rectangle (MBR)
Un MBR es el rectángulo más pequeño que puede contener un conjunto de objetos
en el espacio.
Cada nodo del R-Tree almacena el MBR de sus hijos, proporcionando una jerarquía
de MBRs que permite la indexación eficiente.
Construcción
▸ Los datos se insertan en el R-Tree uno a uno.
▸ Durante la inserción, se elige la hoja que requerirá la menor expansión de su MBR
para incluir el nuevo objeto.
▸ Si una hoja excede su capacidad, se divide en dos nuevas hojas, y se ajustan los
MBRs de los nodos padre.
Consultas
Las consultas pueden buscar todos los objetos dentro de un MBR dado o encontrar
el vecino más cercano.
La estructura del árbol permite que muchas ramas se podan durante la búsqueda,
reduciendo significativamente el número de comparaciones.
Ventajas
▸ Eficiencia en búsquedas espaciales: el R-Tree permite realizar búsquedas
espaciales de manera eficiente, reduciendo el número de comparaciones
necesarias.
▸ A diferencia del KD-Tree, el R-Tree puede manejar objetos de diferentes tamaños y
Aprendizaje Automático No Supervisado 21
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
formas, no solo puntos.
Desventajas
▸ La implementación y ajuste del R-Tree pueden ser más complejos que otras
estructuras de datos.
▸ En ciertos casos, el rendimiento puede verse afectado si los MBRs de los nodos
superiores tienen mucha superposición.
¿Cómo funciona el KD-Tree y el R-Tree con DBSCAN?
▸ Construimos un KD-Tree o un R-Tree a partir del conjunto de datos. Esto organiza
los puntos de manera que las consultas espaciales sean más eficientes.
▸ Para cada punto en el conjunto de datos, en lugar de calcular la distancia a todos los
otros puntos, utilizamos el árbol generado por el KD-Tree o el R-Tree para encontrar
rápidamente todos los puntos dentro del radio eps.
▸ El KD-Tree y R-Tree permiten búsquedas eficientes en el espacio, lo que reduce el
número de comparaciones y, por lo tanto, acelera el proceso de encontrar vecinos.
▸ Una vez que tenemos los vecinos, el algoritmo DBSCAN puede clasificar el punto
actual como parte de un clúster, expandir el clúster o marcar el punto como ruido,
según corresponda.
Veamos un ejemplo de implementación en Python con KD-Tree:
import numpy as np
from sklearn.cluster import DBSCAN
from sklearn.neighbors import KDTree
import matplotlib.pyplot as plt
# Generamos datos de ejemplo
np.random.seed(0)
n_points_per_cluster = 250
C1 = [-5, -2] + .8 * np.random.randn(n_points_per_cluster, 2)
C2 = [4, -1] + .1 * np.random.randn(n_points_per_cluster, 2)
Aprendizaje Automático No Supervisado 22
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
C3 = [1, -2] + .2 * np.random.randn(n_points_per_cluster, 2)
C4 = [-2, 3] + .3 * np.random.randn(n_points_per_cluster, 2)
X = np.vstack((C1, C2, C3, C4))
# Creamos un árbol KD
tree = KDTree(X, leaf_size=30)
# Configuramos DBSCAN con los parámetros deseados y el árbol KD
db = DBSCAN(eps=0.3, min_samples=10, algorithm='kd_tree', leaf_size=30)
db.fit(X)
# Obtenemos las etiquetas de los clusters
labels = db.labels_
# Número de clusters en los datos, ignorando ruido si hay (-1).
n_clusters = len(set(labels)) - (1 if -1 in labels else 0)
n_noise = list(labels).count(-1)
print(f'Número estimado de clusters: {n_clusters}')
print(f'Número estimado de puntos de ruido: {n_noise}')
# Visualizamos los resultados
unique_labels = set(labels)
colors = [plt.cm.Spectral(each)
for each in np.linspace(0, 1, len(unique_labels))]
for k, col in zip(unique_labels, colors):
if k == -1:
# Negro se utiliza para ruido en la visualización.
col = [0, 0, 0, 1]
class_member_mask = (labels == k)
xy = X[class_member_mask & ~np.isnan(X).any(axis=1)]
plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
markeredgecolor='k', markersize=6)
plt.title(f'Número estimado de clusters: {n_clusters}')
plt.show()
Aprendizaje Automático No Supervisado 23
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 6. Resultado final al aplicar DBSCAN utilizando KD-Tree. Fuente: elaboración propia.
Aprendizaje Automático No Supervisado 24
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
5.7. Comparación entre DBSCAN y K-Means
En la Tabla 2 vemos las diferencias entre DBSCAN y K-Means:
Tabla 2. Diferencias entre DBSCAN y K-Means. Fuente: basado en GeeksforGeeks, 2023.
A continuación, veremos el vídeo DBSCAN: aplicaciones avanzadas y
optimización en Python.
Aprendizaje Automático No Supervisado 25
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=5f972c9e-00bc-
4478-a1c6-b1be015c8563
Aprendizaje Automático No Supervisado 26
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
5.8. Cuaderno de ejercicios
Ejercicio 1. Conceptos básicos
Explica en tus propias palabras qué es el algoritmo DBSCAN y cuáles son sus
principales ventajas en comparación con otros algoritmos de clustering como K-
Means. Asegúrate de mencionar al menos tres ventajas clave y dar ejemplos de
situaciones en las que DBSCAN sería más adecuado que K-Means.
Solución
El alumno debería explicar que DBSCAN (Density-Based Spatial Clustering of
Applications with Noise) es un algoritmo de clustering que agrupa puntos de datos en
función de la densidad de puntos en una región.
Ventajas:
▸ No requiere especificar el número de clústeres: a diferencia de K-Means, que
necesita que se defina el número de clústeres antes de ejecutarse.
▸ Forma arbitraria de clústeres: puede identificar clústeres de cualquier forma, no solo
esféricos como K-Means.
▸ Manejo del ruido: DBSCAN puede detectar y manejar ruido y valores atípicos,
etiquetándolos como ruido en lugar de forzarlos a un clúster.
Ejercicio 2. Parametrización
Describe los dos parámetros principales de DBSCAN, épsilon () y MinPts, y explica
cómo afectan al resultado del clustering. Proporciona un ejemplo de cómo ajustar
estos parámetros en un conjunto de datos específico.
Solución
es la distancia máxima entre dos puntos para que se consideren vecinos. Si es
Aprendizaje Automático No Supervisado 27
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
muy pequeño, muchos puntos serán considerados ruido. Si es muy grande, clústeres
diferentes pueden fusionarse.
MinPts es el número mínimo de puntos que debe tener una región para ser
considerada un clúster denso. Por ejemplo, en un conjunto de datos de dos
dimensiones, MinPts debería ser al menos 3 o 4. Ajustar estos parámetros puede
implicar el uso de una gráfica de distancia para encontrar un buen valor de y
establecer MinPts basado en el conocimiento del dominio.
Ejercicio 3. Implementación DBSCAN en Python
Describe los pasos básicos para implementar el algoritmo DBSCAN en Python
utilizando la biblioteca Scikit-learn. Incluye un breve código de ejemplo y explica cada
parte del código.
Solución
▸ Importar las bibliotecas necesarias: numpy , matplotlib , sklearn.cluster.DBSCAN .
▸ Generar o cargar el conjunto de datos.
▸ Preprocesar los datos: normalización o estandarización.
▸ Aplicar el algoritmo DBSCAN: configurar los parámetros ϵ y MinPts.
▸ Visualizar los resultados: graficar los clústeres identificados.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler
# Generar datos aleatorios
np.random.seed(42)
X = np.random.rand(100, 2)
# Escalar los datos
X = StandardScaler().fit_transform(X)
Aprendizaje Automático No Supervisado 28
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
# Aplicar DBSCAN
db = DBSCAN(eps=0.3, min_samples=5).fit(X)
labels = db.labels_
# Graficar los resultados
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.show()
Ejercicio 4. Evaluación de clustering con DBSCAN
Explica cómo se puede evaluar la calidad de un clustering realizado con DBSCAN
utilizando la puntuación de la silueta y la puntuación de Rand. Proporciona ejemplos
de cómo interpretar estos valores en un conjunto de datos.
Solución
La silueta mide la cohesión y separación de los clústeres, con valores que van de -1
a 1. Una puntuación cercana a 1 indica clústeres bien definidos. La puntuación de
Rand compara la similitud entre las agrupaciones generadas y una verdad conocida,
con valores entre 0 y 1. Un valor superior a 0.9 indica un modelo muy bueno.
Ejemplo de interpretación: si la puntuación de la silueta es 0.75 y la puntuación de
Rand es 0.85, se puede concluir que el clustering es de alta calidad, con buena
separación entre clústeres y consistencia con las etiquetas reales, si existen.
Aprendizaje Automático No Supervisado 29
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
5.9. Referencias bibliográficas
GeeksforGeeks. (2023, mayo 23). Agrupación DBSCAN en ML | agrupación basada
en densidad. https://www.geeksforgeeks.org/dbscan-clustering-in-ml-density-based-
clustering/
Aprendizaje Automático No Supervisado 30
Tema 5. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
A fondo
Vídeo explicativo sobre DBSCAN
StatQuest with Josh Starmer. (2022, enero 10). Clustering with DBSCAN, Clearly
Explained!!! [Vídeo]. YouTube. https://www.youtube.com/watch?v=RDZUdRSDOok
Este vídeo ofrece una explicación clara y detallada del algoritmo DBSCAN,
abordando sus conceptos básicos, cómo funciona y ejemplos prácticos de
implementación en Python.
Aprendizaje Automático No Supervisado 31
Tema 5. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
Tutorial de codificación de DBSCAN en Python
Greg Hogg. (2022, agosto 22). DBSCAN Clustering Coding Tutorial in Python &
Scikit-Learn [Vídeo]. YouTube. https://www.youtube.com/watch?v=VO_uzCU_nKw
Este tutorial se centra en la implementación práctica del algoritmo DBSCAN
utilizando Python y la biblioteca Scikit-learn. Cubre desde la configuración de los
parámetros hasta la visualización de los resultados, proporcionando una guía paso a
paso.
Aprendizaje Automático No Supervisado 32
Tema 5. A fondo
© Universidad Internacional de La Rioja (UNIR)
Test
1. ¿Qué significa DBSCAN?
A. Density-Based Spatial Clustering of Applications with Noise.
B. Data-Based Spatial Clustering Algorithm.
C. Density-Balanced Spatial Clustering Algorithm.
D. Distance-Based Spatial Clustering of Applications with Noise.
2. ¿Cuál de los siguientes parámetros es clave en DBSCAN?
A. K.
B. Épsilon (ϵ).
C. Sigma (σ).
D. Alpha (α).
3. ¿Qué tipo de clústeres puede identificar el DBSCAN?
A. Solamente esféricos.
B. Solamente convexos.
C. De cualquier forma.
D. Solamente cóncavos.
4. ¿A qué hace referencia el parámetro MinPts?
A. El número mínimo de puntos en el dataset.
B. El número mínimo de clústeres.
C. El número mínimo de puntos para formar un clúster denso.
D. La distancia mínima entre dos puntos.
Aprendizaje Automático No Supervisado 33
Tema 5. Test
© Universidad Internacional de La Rioja (UNIR)
Test
5. ¿Qué ocurre si el valor de épsilon (ϵ) es muy pequeño?
A. Todos los puntos se considerarán clústeres.
B. La mayoría de los puntos serán considerados ruido.
C. Todos los puntos se unirán en un solo clúster.
D. Se formarán clústeres de forma esférica.
6. ¿Cómo se denomina un punto que tiene menos de MinPts dentro de la distancia
ϵ pero que está cerca de un punto central?
A. Punto central.
B. Punto de ruido.
C. Punto aislado.
D. Punto fronterizo.
7. ¿Cuál es una ventaja importante de DBSCAN frente a K-Means?
A. Requiere menos parámetros.
B. Identifica clústeres de forma esférica.
C. Es más rápido.
D. No necesita especificar el número de clústeres de antemano.
8. ¿Qué métrica de evaluación se puede usar para evaluar la calidad de un
clustering con DBSCAN?
A. Puntaje de la silueta.
B. Error cuadrático medio.
C. Puntaje de Z-Score.
D. Prueba t de Student.
Aprendizaje Automático No Supervisado 34
Tema 5. Test
© Universidad Internacional de La Rioja (UNIR)
Test
9. En el contexto de DBSCAN, ¿para qué se utiliza un KD-Tree?
A. Acelerar la búsqueda de vecinos.
B. Reducir el número de puntos en el dataset.
C. Mejorar la precisión del clustering.
D. Aumentar el número de clústeres.
10. ¿Qué hace DBSCAN con los puntos que no pertenecen a ningún clúster?
A. Los redistribuye a clústeres existentes.
B. Los etiqueta como ruido.
C. Los elimina del dataset.
D. Los marca como puntos centrales.
Aprendizaje Automático No Supervisado 35
Tema 5. Test
© Universidad Internacional de La Rioja (UNIR)
Tema 6
Aprendizaje Automático No Supervisado
Tema 6. Técnicas lineales.
Análisis de componentes
principales (PCA)
Índice
Esquema
Ideas clave
6.1. Introducción y objetivos
6.2. ¿Qué es PCA?
6.3. ¿Por qué PCA simplifica los datos para el clustering?
6.4. Ventajas y desventajas de PCA
6.5. ¿Cómo evaluar y mejorar PCA?
6.6. Implementación en Python
6.7. Cuaderno de ejercicios
6.8. Referencias bibliográficas
A fondo
Vídeo explicativo sobre PCA
Diferencia entre análisis factorial (FA) y análisis de
componentes principales (PCA)
Test
Esquema
Aprendizaje Automático No Supervisado 3
Tema 6. Esquema
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
6.1. Introducción y objetivos
En el análisis de datos, simplificar la información es una tarea compleja, pero a la vez
clave para obtener información útil. El análisis de componentes principales
(Principal Component Analysis - PCA) es una herramienta eficaz que ayuda a
descubrir estructuras ocultas en grandes conjuntos de datos. No es un simple
algoritmo matemático, es una técnica estadística utilizada en aprendizaje automático
no supervisado que permite reducir la dimensionalidad, ver patrones y relaciones en
los datos que de otra forma no se podría observar.
Esta técnica es esencial para simplificar la información y mejorar la eficiencia en
diversas aplicaciones, desde la compresión de imágenes hasta la bioinformática y el
análisis financiero (Ma y Dai, 2011; Boutsidis, Mahoney y Drineas, 2008; Xie y Yu,
2021).
Como objetivos de este tema nos planteamos:
▸ Explicar detalladamente los conceptos y mecanismos detrás del algoritmo PCA,
incluyendo la estandarización de datos, la matriz de covarianza, y el cálculo de
valores y vectores propios.
▸ Demostrar cómo la aplicación de PCA puede simplificar los datos y mejorar la
efectividad de los algoritmos de clustering, a través de ejemplos prácticos y
ejercicios en Python.
Aprendizaje Automático No Supervisado 4
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
6.2. ¿Qué es PCA?
Vamos a imaginarnos que queremos tomar una foto a la Sagrada Familia de
Barcelona. Queremos capturar su esencia, su diseño único y su construcción
prolongada, pero después de muchos intentos, vemos que es imposible. Lo que
podemos hacer es buscar un buen ángulo que muestre sus mejores características.
Principal Component Analysis (PCA) o análisis de componentes principales examina
los datos complejos y multidimensionales para encontrar las perspectivas que nos
den la mayor cantidad de información sobre los datos. Resalta los patrones más
importantes y reduce aquellos menos importantes.
El objetivo de PCA es reducir la dimensionalidad de los datos; ayuda a simplificar
los datos en un conjunto más pequeño denominado «de componentes principales».
Los componentes principales son variables que se construyen como combinación
lineal de las variables originales, intentando capturar la máxima variación o
información del conjunto de datos.
La varianza de los datos es como la diversidad de información. Una varianza alta es
un indicador de que tiene una amplia gama de valores, lo que posiblemente indica
una fuente rica en información. Entonces, PCA lo que hace es buscar direcciones
donde esa variación sea máxima. Para elegir el primer componente principal, se
intenta representar en una variable la mayor varianza posible. El segundo
componente es independiente del primero; captura al igual que el primero la mayor
varianza posible. Y así se crea cada uno de los componentes, reduciendo la
dimensionalidad.
Estructura matemática de PCA
Comenzamos con un conjunto de datos generalmente grande; representado como
una matriz donde las filas representan las observaciones y las columnas
corresponden a los atributos o características. El algoritmo sigue estos pasos:
Aprendizaje Automático No Supervisado 5
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Estandarización de datos
Recordemos que lo que hace la estandarización es centrar los datos. Se resta la
media y se divide por la desviación estándar cada uno de los datos. Así
garantizamos que todas las características tengan la misma importancia.
Matriz de covarianza
Es una matriz cuadrada que describe la variabilidad conjunta de dos variables. Para
un conjunto de datos con n características, la matriz de covarianza será de tamaño
. La matriz de covarianza es el corazón del algoritmo PCA. Podemos pensar en
la matriz de covarianza como una tabla que responde a la pregunta cuando una
variable aumenta, ¿qué sucede con las demás? Los valores positivos indican una
relación positiva (es decir, aumentan juntos), los valores negativos indican una
relación negativa y cero indica que no hay relación.
Cálculo de valores y vectores propios
Un vector propio o vector característico es un vector que cuando se transforma
mediante una matriz solo se escala por un factor, conocido como el valor propio que
representa la cantidad de varianza explicada por cada vector propio, a esto le
llamaremos componente principal.
▸ Valores propios (eigenvalues): indica cuánto estira o encoge un vector cuando se
aplica una transformación lineal representada por una matriz.
▸ Vectores propios (eigenvectors): son vectores que cuando se aplica una
transformación lineal solo cambian en magnitud, no en dirección. Es donde la magia
de PCA comienza a desarrollarse. Cada vector propio representa un componente.
Lo interesante de estos vectores es que están orientados hacia donde los datos
varían más.
La relación matemática entre una matriz , un vector propio y su valor propio
Aprendizaje Automático No Supervisado 6
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
se expresa a través de la siguiente ecuación:
Aplicamos la matriz al vector y el resultado es el vector escalado por .
Figura 1. Vectores propios dibujados sobre un gráfico de dispersión. Fuente: elaboración propia.
Ordenar valores y vectores propios
Para poder identificar los componentes principales, se deben ordenar los valores
propios de forma descendente, de tal manera que mayor valor sea el primero de la
lista.
Seleccionar los componentes principales
Se seleccionan los vectores propios con mayor valor propio. El primer componente
principal corresponde al vector propio con el valor propio más grande, explicando la
mayor varianza existente en el conjunto de datos. El segundo componente principal
corresponde al vector propio con el segundo valor propio más grande, y así
sucesivamente. Los componentes principales son ortogonales, lo que significa que
Aprendizaje Automático No Supervisado 7
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
no están correlacionados. El resultado es una matriz que proyecta los datos
originales en un espacio de menor dimensión, reduciendo el conjunto de datos.
El análisis de componentes principales (PCA) no solo destaca por su elegancia
matemática, sino que también se presenta como una herramienta esencial y eficaz
para solucionar problemas reales.
Aprendizaje Automático No Supervisado 8
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
6.3. ¿Por qué PCA simplifica los datos para el
clustering?
Cuando tenemos un conjunto de datos de alta dimensionalidad, sufrimos la maldición
de la dimensionalidad. A medida que aumenta el número de dimensiones
(características o variables) en un conjunto de datos, pueden ocurrir varios
fenómenos complejos:
▸ Escasez de datos: los puntos de datos tienden a estar más dispersos. Esto significa
que para mantener la misma densidad de datos que en espacios de menor
dimensión, se necesitarían más datos, lo cual rara vez es posible.
▸ Grandes distancias entre datos: la distancia entre puntos de datos tiende a
aumentar y las diferencias entre las distancias se vuelven menos pronunciadas. Esto
puede dificultar la identificación de patrones y la agrupación de datos.
▸ Relevancia de las variables: es probable que muchas dimensiones o atributos
sean ruidosas o irrelevantes, complicando la aplicación de modelos o reduciendo su
rendimiento.
▸ Problemas computacionales: el procesamiento y análisis de datos en alta
dimensión suele ser costoso en términos de tiempo y recursos computacionales. Los
algoritmos que funcionan bien en baja dimensión pueden volverse ineficientes o
ineficaces en alta dimensión.
PCA reduce la dimensionalidad al proyectar los datos en nuevos espacios de
dimensiones, facilitando la visualización, la eliminación de ruido y las redundancias.
Al trabajar con un conjunto de datos de menor dimensionalidad, la complejidad
computacional se reduce, se tienen procesamientos más rápidos y menor exigencia
en recursos computacionales. Los datos a menudo vienen con ruido, variaciones que
no son de interés pero que pueden oscurecer otros patrones. Los datos proyectados
Aprendizaje Automático No Supervisado 9
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
en los componentes principales son menos susceptibles al ruido y a las variaciones
aleatorias de las características originales, mejorando la separabilidad de los
posibles grupos existentes.
Ejemplo de cómo PCA nos ayuda cuando queremos realizar clustering.
Imaginemos que estamos trabajando con un conjunto de datos de clientes
con 50 características, como edad, ingresos, hábitos de compra, etc. Si
aplicamos PCA, podemos reducir de 50 características a un conjunto de 2
o 3 componentes principales que capturan la mayor parte de la variabilidad
de los datos. Al realizar clustering sobre las componentes principales, es
probable que obtengamos clústeres más claros y significativos, lo que
facilita la segmentación de clientes y la identificación de patrones de
comportamiento.
Aprendizaje Automático No Supervisado 10
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
6.4. Ventajas y desventajas de PCA
Algunas de las ventajas que podemos resaltar de PCA son las siguientes:
▸ Reducción de dimensionalidad: al reducir el número de variables, los modelos se
vuelven más simples. Mejora el rendimiento computacional de los modelos que se
aplican después de aplicar PCA y, por ende, el tiempo de entrenamiento es menor.
▸ Eliminación de redundancia: ayuda a eliminar la multicolinealidad al transformar
las variables originales en un nuevo conjunto de variables independientes.
▸ Visualización en 2D y 3D: facilita la visualización de datos complejos en dos o tres
dimensiones, ayudando sobre todo en el análisis exploratorio de los datos.
▸ Reducción de ruido: al enfocarse en las componentes principales que captura la
mayor varianza, deja de lado los componentes que representan ruido en el conjunto
de datos.
▸ Mejora de la interpretabilidad: facilita la identificación de patrones y relaciones
subyacentes en los datos que no son evidentes en el espacio original.
PCA se aplica en diferentes dominios, tales como (Dey, 2023):
▸ Compresión de imágenes: al reducir la dimensionalidad de las imágenes y
preservar su esencia, se pueden almacenar y transferir las imágenes.
▸ Bioinformática: las expresiones genéticas suelen ser conjuntos de datos de alta
dimensionalidad. Con PCA se pueden identificar patrones y reducir el ruido.
▸ Reconocimiento facial: permite la extracción de rasgos faciales esenciales para
tareas de reconocimiento.
▸ Sistemas de recomendación: usar PCA suele obtener recomendaciones muy
eficientes en datos de interacción entre un usuario y elementos en particular,
Aprendizaje Automático No Supervisado 11
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
generalmente elementos web.
A continuación, veremos el vídeo de PCA utilizando Python.
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=00d8d339-9b7c-
4478-acb7-b1be0170d19f
Aprendizaje Automático No Supervisado 12
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
6.5. ¿Cómo evaluar y mejorar PCA?
Existen algunos métodos para determinar el valor óptimo para el parámetro
. Se puede realizar a través de dos visualizaciones diferentes.
L a primera visualización es graficar el porcentaje de varianza explicada de los
componentes individuales y el porcentaje de varianza total que capturan todos los
componentes principales. Veamos el código que hace posible dicha visualización
(Kavlakoglu, 2024):
# Calcular la matriz de covarianza, los vectores y valores propios
cov_mat = np.cov(X_train_scaled.T)
eigen_vals, eigen_vecs = np.linalg.eig(cov_mat)
exp_var = []
# Ordenar los valores propios en orden descendente
eigen_vals = np.sort(eigen_vals)[::-1]
for i in eigen_vals:
var = (i / np.sum(eigen_vals)) * 100
exp_var.append(var)
bar = plt.bar(range(1, 14), exp_var, align='center',
label='Individual explained variance')
# Agregar etiquetas a las barras más altas.
for i, bar in enumerate(bar):
plt.text(bar.get_x() + bar.get_width() / 2, bar.get_height(),
f'{exp_var[i]:.1f}%',
ha='center', va='bottom')
plt.ylabel('Percentage of variance explained (%)')
plt.xlabel('Principal component index')
plt.xticks(ticks=list(range(1, 14)))
plt.legend(loc='best')
plt.tight_layout()
Aprendizaje Automático No Supervisado 13
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 2. Varianza explicada vs. índice de componente principal. Fuente: Kavlakoglu, 2024.
La segunda visualización es utilizar la técnica del codo utilizando el porcentaje de
varianza explicada frente al número de componentes principales. Para poder decidir
cuál es el número de componentes principales ideal. Veamos el código que hace
posible dicha visualización (Kavlakoglu, 2024):
# generate scree plot
pca = PCA()
X_train = pca.fit_transform(X_train_scaled)
explained_variance = pca.explained_variance_ratio_
plt.plot(pca.explained_variance_, marker='o')
plt.xlabel("Eigenvalue number")
plt.ylabel("Eigenvalue size")
plt.title("Scree Plot")
Aprendizaje Automático No Supervisado 14
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 3. Valor y número de valores propios, gráfica del codo. Fuente: (Kavlakoglu, 2024).
Aprendizaje Automático No Supervisado 15
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
6.6. Implementación en Python
En este apartado veremos dos ejemplos. Empecemos con un ejemplo sencillo de
implementación en Python de PCA utilizando la biblioteca de Scikit-learn.
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
# Generar datos aleatorios de ejemplo
np.random.seed(42)
data = np.random.rand(100, 5) # 100 muestras, 5 características
df = pd.DataFrame(data, columns=[f'Feature_{i+1}' for i in range(5)])
# 1. Estandarización de los datos
scaler = StandardScaler()
scaled_data = scaler.fit_transform(df)
# 2. Aplicación de PCA
# Reducimos de 5 características a 2 componentes principales
pca = PCA(n_components=2)
principal_components = pca.fit_transform(scaled_data)
pca_df = pd.DataFrame(data=principal_components, columns=['Principal
Component 1', 'Principal Component 2'])
# 3. Explicación de la varianza
explained_variance = pca.explained_variance_ratio_
# 4. Visualización de los resultados
#Creamos un gráfico de dispersión para visualizar los datos proyectados en
las dos componentes principales.
plt.figure(figsize=(8, 6))
plt.scatter(pca_df['Principal Component 1'], pca_df['Principal Component
2'], c='blue', edgecolor='k', s=40)
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('2 Component PCA')
plt.grid()
plt.show()
Aprendizaje Automático No Supervisado 16
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
# Mostrar la varianza explicada por cada componente
# Se imprime la proporción de varianza explicada por cada componente
principal para entender cuánta información se retiene en las nuevas
componentes.
print(f'Varianza explicada por la componente principal 1:
{explained_variance[0]:.2f}')
print(f'Varianza explicada por la componente principal 2:
{explained_variance[1]:.2f}')
Figura 4. Resultado final de aplicar PCA a un conjunto de datos de cinco características. Fuente:
elaboración propia.
Continuemos con un ejemplo más complejo, utilizaremos el conjunto de datos que se
puede encontrar en: https://github.com/jgscott/STA380/blob/master/data/protein.csv.
Contiene la cantidad de alimentos consumidos por país: leche, huevos, pescado,
cereales, carnes rojas, carnes blancas, nueces y verduras. Inspirados en el artículo
de Lee (2024) desarrollaremos el siguiente ejercicio:
▸ Leemos el conjunto de datos.
Aprendizaje Automático No Supervisado 17
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
url = "https://raw.githubusercontent.com/fenago/datasets/main/protein.csv"
food_data = pd.read_csv(url)
▸ Estandarizamos los datos para que tengan una media de 0 y una desviación de 1.
scaler = StandardScaler()
food_scaled = scaler.fit_transform(food_data.iloc[:, 1:])
▸ Aplicamos PCA sobre los datos estandarizados. No vamos a especificar cuántos
componentes deseamos, después hacemos un análisis sobre esto.
pca = PCA()
principal_components = pca.fit_transform(food_scaled)
▸ Analizamos los componentes principales y determinamos cuántas componentes
debemos tener.
loadings = pd.DataFrame(pca.components_.T, columns=[f'PC{i}' for i in
range(1, len(food_data.columns))], index=food_data.columns[1:])
print(loadings)
▸ ¿Cuáles son las características más importantes de cada componente principal?
import pandas as pd
# Establecer un umbral de 0.3 para saber con qué características trabajar.
threshold = 0.3
# Encontrar características con cargas por encima del umbral para cada
componente principal.
important_features = {}
for column in loadings.columns:
important_features[column] = loadings.index[loadings[column].abs() >
threshold].tolist()
# Ahora el diccionario ‘important_features’ contiene las características
Aprendizaje Automático No Supervisado 18
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
importantes
for pc, features in important_features.items():
print(f"{pc}: {', '.join(features)}")
▸ Veamos el mapa de calor de todos los componentes principales.
import seaborn as sns
# Creamos un mapa de calor
plt.figure(figsize=(12, 8))
sns.heatmap(loadings, annot=True, cmap='coolwarm')
plt.title('PCA Loadings Heatmap')
plt.show()
Figura 5. Mapa de calor de las componentes principales. Fuente: elaboración propia.
▸ ¿Con cuántos componentes me quedo?
import numpy as np
# Crear un diagrama del codo
plt.figure(figsize=(8,5))
plt.plot(range(1, len(pca.explained_variance_ratio_) + 1),
pca.explained_variance_ratio_, marker='o', linestyle='--')
plt.title('Scree Plot')
Aprendizaje Automático No Supervisado 19
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
plt.xlabel('Number of components')
plt.ylabel('Explained variance ratio')
plt.show()
# Calcular la varianza acumulada
cumulative_explained_variance = np.cumsum(pca.explained_variance_ratio_)
# Crear un gráfico para explicar la varianza acumulada
plt.figure(figsize=(8,5))
plt.plot(range(1, len(cumulative_explained_variance) + 1),
cumulative_explained_variance, marker='o', linestyle='--')
plt.title('Cumulative Explained Variance')
plt.xlabel('Number of components')
plt.ylabel('Cumulative explained variance')
plt.axhline(y=0.9, color='r', linestyle='-') # 90% variance line
plt.text(0.5, 0.85, '90% cut-off threshold', color = 'red', fontsize=16)
plt.show()
Figura 6. Gráfico del codo: número de componentes vs. varianza acumulada explicada. Fuente:
Aprendizaje Automático No Supervisado 20
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
elaboración propia.
Según el resultado gráfico, el umbral que supera el 90 % está entre 4 y 5
componentes. Si elegimos el 4 estamos justo por debajo del umbral y si agregamos
los cinco componentes podemos superarlo. Entonces nos quedaremos con los
componentes PC1, PC2, PC3, PC4 y PC5. Si se eligen cuatro componentes es
totalmente válido, sería un modelo más simple y con menos varianza acumulada
explicada.
Existe otro método para decidir qué componentes principales son las mejores. Se
llama el método del criterio de Kaiser:
eigenvalues = pca.explained_variance_
# Aplicando el criterio Kaiser
kaiser_criterion = eigenvalues > 1
# Obtener el valor que satisfaga el criterio Kaiser.
n_components_kaiser = sum(kaiser_criterion)
# Imprimir las components que satisfacen el criterio Kaiser
print(f"Number of components with eigenvalue > 1: {n_components_kaiser}")
important_components = np.arange(1, n_components_kaiser + 1)
print(f"Important components according to Kaiser Criterion:
{important_components}")
for i, (ev, satisfy) in enumerate(zip(eigenvalues, kaiser_criterion),
start=1):
if satisfy:
print(f"Component {i} with eigenvalue: {ev}")
Number of components with eigenvalue > 1: 3
Important components according to Kaiser Criterion: [1 2 3]
Component 1 with eigenvalue: 4.173372472563685
Component 2 with eigenvalue: 1.7031244242017378
Component 3 with eigenvalue: 1.1749161502198004
Dataframe final:
import pandas as pd
Aprendizaje Automático No Supervisado 21
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
# Convertir componentes a un DataFrame
principal_components_df = pd.DataFrame(principal_components, columns=
[f'PC{i}' for i in range(1, len(food_data.columns))])
# Concatenar con la columna país
final_df = pd.concat([food_data['Country'], principal_components_df],
axis=1)
# Desplegar las 5 primeras filas del DataFrame
final_df.head()
Figura 7. Datos. Fuente: elaboración propia.
Cómo interpretarlo:
▸ PC1: carnes rojas, carnes blancas, huevos, leche, cereales y nueces. PC1
representa los elementos fundamentales de una dieta basada en proteínas junto con
alimentos básicos como cereales y nueces. Se utilizaría esta componente para
comprender patrones generales de consumo de proteínas y calorías.
▸ PC2: pescado, almidón, frutas y vegetales. PC2 representa patrones dietéticos que
se inclinan hacia una dieta basada en pescado como fuente principal de proteína y
gran cantidad de frutas y vegetales.
▸ PC3: carne blanca, leche, pescado, frutas y vegetales. PC3 contiene elementos que
contrastan entre la carne blanca y el pescado, además la presencia de leche. Podría
explicar una dieta donde el elemento común es la leche y se podría explorar con
este componente la interacción entre el consumo de aves, mariscos y lácteos.
▸ PC4: carnes rojas, huevos, almidón, frutos secos, alimentos frescos y vegetales.
Aprendizaje Automático No Supervisado 22
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
PC4 representa una dieta mixta, que combina proteína animal, huevos y una
variedad de alimentos de origen vegetal. No se inclina por una única fuente de
proteínas.
▸ PC5: carne roja, carne blanca y almidón. En PC5 la carne roja, blanca y almidón son
importantes. Parece ser una dieta que busca el equilibrio entre consumo de carne y
carbohidratos.
▸ PC6: carnes rojas, huevos, leche y nueces.
▸ PC7: huevos, leche, cereales, nueces, frutas y vegetales.
▸ PC8: huevos, pescado y cereales.
▸ PC9: carne blanca, huevos, pescado y frutos secos.
Cada componente resume un aspecto diferente de los hábitos alimenticios, y estos
conocimientos pueden ser muy valiosos para estudios relacionados con la nutrición,
la salud pública o la investigación de mercados de productos.
A continuación, veremos el vídeo PCA: aplicaciones avanzadas y optimización en
Python.
Aprendizaje Automático No Supervisado 23
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=9ed75fc9-515e-
43d6-9697-b1be017a858c
Aprendizaje Automático No Supervisado 24
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
6.7. Cuaderno de ejercicios
Ejercicio 1. Conceptos básicos
Explica con tus propias palabras qué es el análisis de componentes principales
(PCA) y cuál es su objetivo principal. Luego aplica PCA a un conjunto de datos que
desees y muestra los dos primeros componentes principales.
Solución
PCA es una técnica de reducción de dimensionalidad que transforma un conjunto de
datos de alta dimensión en un espacio de menor dimensión, capturando la mayor
varianza posible en las nuevas componentes principales. Su objetivo es simplificar
los datos sin perder información relevante. Para aplicar PCA en Python, primero
estandarizamos los datos y luego utilizamos la biblioteca Scikit-learn para calcular los
componentes principales:
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
# Generar datos aleatorios
np.random.seed(42)
data = np.random.rand(100, 5)
df = pd.DataFrame(data, columns=[f'Feature_{i+1}' for i in range(5)])
# Estandarizar los datos
scaler = StandardScaler()
scaled_data = scaler.fit_transform(df)
# Aplicar PCA
pca = PCA(n_components=2)
principal_components = pca.fit_transform(scaled_data)
print(principal_components[:5]) # Mostrar las dos primeras componentes
principales
Ejercicio 2. Detalle del paso a paso en PCA
Aprendizaje Automático No Supervisado 25
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Describe los pasos básicos para implementar PCA en Python utilizando un conjunto
de datos de cinco características. Luego muestra un gráfico de dispersión de los dos
primeros componentes principales.
Solución
Para implementar PCA se deben seguir estos pasos: estandarizar los datos, calcular
las componentes principales y visualizar los resultados. El siguiente código muestra
cómo hacerlo:
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
# Generar datos aleatorios
np.random.seed(42)
data = np.random.rand(100, 5)
df = pd.DataFrame(data, columns=[f'Feature_{i+1}' for i in range(5)])
# 1. Estandarizar los datos
scaler = StandardScaler()
scaled_data = scaler.fit_transform(df)
# 2. Aplicar PCA
pca = PCA(n_components=2)
principal_components = pca.fit_transform(scaled_data)
pca_df = pd.DataFrame(data=principal_components, columns=['Principal
Component 1', 'Principal Component 2'])
# 3. Visualizar los resultados
plt.figure(figsize=(8, 6))
plt.scatter(pca_df['Principal Component 1'], pca_df['Principal Component
2'], c='blue', edgecolor='k', s=40)
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('2 Component PCA')
plt.grid()
plt.show()
Ejercicio 3. Identificación de componentes principales e interpretabilidad del
primer componente
Aprendizaje Automático No Supervisado 26
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Se tiene un conjunto de datos de calidad del aire con las siguientes columnas:
ciudad, PM2.5, PM10, NO2, CO, SO2, O3, temperatura, humedad y velocidad del
viento.
Contiene los siguientes datos:
data = { 'Ciudad': ['CiudadA', 'CiudadB', 'CiudadC', 'CiudadD'], 'PM2.5':
[30, 70, 40, 50], 'PM10': [50, 90, 60, 70], 'NO2': [20, 60, 30, 40], 'CO':
[0.5, 1.0, 0.7, 0.8], 'SO2': [10, 30, 15, 20], 'O3': [25, 35, 30, 28],
'Temperatura': [22, 25, 20, 23], 'Humedad': [55, 65, 60, 58], 'Velocidad
del Viento': [3.5, 4.0, 3.8, 4.2] }
▸ Interpreta los componentes principales obtenidos mediante PCA.
▸ Utilizando el conjunto de datos de calidad del aire en diferentes ciudades, identifica
las características más importantes en el primer componente principal.
Solución
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
# Conjunto de datos de calidad del aire
data = {
'Ciudad': ['CiudadA', 'CiudadB', 'CiudadC', 'CiudadD'],
'PM2.5': [30, 70, 40, 50],
'PM10': [50, 90, 60, 70],
'NO2': [20, 60, 30, 40],
'CO': [0.5, 1.0, 0.7, 0.8],
'SO2': [10, 30, 15, 20],
'O3': [25, 35, 30, 28],
'Temperatura': [22, 25, 20, 23],
'Humedad': [55, 65, 60, 58],
'Velocidad del Viento': [3.5, 4.0, 3.8, 4.2]
}
# Crear DataFrame
df = pd.DataFrame(data)
df.set_index('Ciudad', inplace=True)
Aprendizaje Automático No Supervisado 27
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
# Estandarización de los datos
scaler = StandardScaler()
scaled_data = scaler.fit_transform(df)
# Aplicar PCA
pca = PCA(n_components=2) # Reducimos a 2 componentes para simplificar la
visualización
pca_result = pca.fit_transform(scaled_data)
# Interpretación de las componentes principales
pc1 = pca.components_[0]
explained_variance_ratio = pca.explained_variance_ratio_
# Crear un DataFrame para visualizar las cargas de las variables en la PC1
loadings = pd.DataFrame(pc1, index=df.columns, columns=['PC1'])
# Mostrar el DataFrame de cargas de las variables en la PC1
print("Cargas de las variables en la PC1:\n", loadings)
# Varianza explicada por cada componente principal
explained_variance_ratio = pca.explained_variance_ratio_
cumulative_explained_variance = explained_variance_ratio.cumsum()
# Crear el gráfico de varianza explicada acumulada
plt.figure(figsize=(10, 6))
plt.plot(range(1, len(explained_variance_ratio) + 1),
cumulative_explained_variance, marker='o', linestyle='--', color='b')
plt.title('Gráfico de Varianza Explicada Acumulada')
plt.xlabel('Número de Componentes Principales')
plt.ylabel('Varianza Explicada Acumulada')
plt.grid(True)
plt.show()
# Mostrar varianza explicada por cada componente principal
for i, var_exp in enumerate(explained_variance_ratio, start=1):
print(f"Componente Principal {i}: Varianza Explicada = {var_exp:.4f}")
# Mostrar varianza explicada acumulada
print("Varianza Explicada Acumulada:\n", cumulative_explained_variance)
Interpretación:
Cargas de las variables en la PC1:
Aprendizaje Automático No Supervisado 28
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Tabla 1. Cargas de las variables en la PC1. Fuente: elaboración propia.
En este ejemplo, las variables PM2.5, PM10 y NO2 son las que más contribuyen al
primer componente principal. Esto sugiere que estos contaminantes son las
características más importantes para explicar la variabilidad en la calidad del aire en
estas ciudades.
Ejercicio 4. Interpretación de todos los componentes principales
Explica cómo se puede evaluar la cantidad de varianza explicada por cada
componente principal en PCA. Luego genera un gráfico de varianza explicada
acumulada utilizando el conjunto de datos del ejercicio anterior.
Solución
La varianza explicada por cada componente principal se puede evaluar observando
Aprendizaje Automático No Supervisado 29
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
los valores propios (eigenvalues). Un gráfico de varianza explicada acumulada
muestra cuánta varianza total se captura al agregar más componentes. Para generar
este gráfico:
import matplotlib.pyplot as plt
pca = PCA()
principal_components = pca.fit_transform(scaled_data)
explained_variance = np.cumsum(pca.explained_variance_ratio_)
# Graficar la varianza explicada acumulada
plt.figure(figsize=(8, 5))
plt.plot(range(1, len(explained_variance) + 1), explained_variance,
marker='o', linestyle='--')
plt.xlabel('Número de componentes')
plt.ylabel('Varianza acumulada explicada')
plt.title('Gráfico de varianza explicada acumulada')
plt.axhline(y=0.9, color='r', linestyle='-')
plt.text(0.5, 0.85, 'Umbral del 90%', color='red', fontsize=16)
plt.show()
Figura 8. Gráfico de varianza explicada acumulada. Fuente: elaboración propia.
Aprendizaje Automático No Supervisado 30
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
El estudiante analizará las características que más pesan en cada componente.
Aprendizaje Automático No Supervisado 31
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
6.8. Referencias bibliográficas
Boutsidis, C., Mahoney, M. W. y Drineas, P. (2008). Unsupervised feature selection
for principal components analysis. Proceedings of the 14th ACM SIGKDD
international conference on Knowledge discovery and data mining.
Dey, R. (2023, octubre 6). Understanding Principal Component Analysis (PCA).
M e d i u m . https://medium.com/@roshmitadey/understanding-principal-component-
analysis-pca-d4bb40e12d33
Kavlakoglu, E. (2024, marzo 6). Reducing dimensionality with principal component
analysis with Python. IBM Developer. https://developer.ibm.com/tutorials/awb-
reducing-dimensionality-with-principal-component-analysis/
Lee, E. (2024, abril 9). Secrets of PCA: A Comprehensive Guide to Principal
Component Analysis with Python and Colab. Medium. https://drlee.io/secrets-of-pca-
a-comprehensive-guide-to-principal-component-analysis-with-python-and-colab-
6f7f3142e721
Ma, S. y Dai, Y. (2011). Principal component analysis based methods in
bioinformatics studies. Briefings in bioinformatics, 12(6), 714-722.
Xie, L. y Yu, S. (2021). Unsupervised feature extraction with convolutional
autoencoder with application to daily stock market prediction. Concurrency and
Computation: Practice and Experience, 33(16), e6282.
Aprendizaje Automático No Supervisado 32
Tema 6. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
A fondo
Vídeo explicativo sobre PCA
Stanford Online. (2023, agosto 14). Stanford CS229 Machine Learning I Factor
Analysis/PCA I 2022 I Lecture 14 [Vídeo]. YouTube. https://www.youtube.com/watch?
v=o2KzJdbOwMc
En la lección 14 de Stanford CS229, se explica el análisis de componentes
principales (PCA) y el análisis factorial. La clase cubre cómo estas técnicas de
reducción de dimensionalidad ayudan a identificar y eliminar la redundancia en los
datos, mejorando la eficiencia de los algoritmos de aprendizaje automático. Además,
se discuten ejemplos prácticos y aplicaciones en diversos campos.
Aprendizaje Automático No Supervisado 33
Tema 6. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
Diferencia entre análisis factorial (FA) y análisis de
componentes principales (PCA)
Thesis Helper. (2023, octubre 9). Differences Between Factor Analysis and Principal
Component Analysis [Vídeo]. YouTube. https://www.youtube.com/watch?
v=8vH0WH7p39M
Explica las diferencias clave entre el análisis factorial (FA) y el análisis de
componentes principales (PCA). FA se enfoca en modelar la estructura de las
correlaciones entre variables observadas para identificar factores subyacentes no
observados, mientras que PCA es una técnica de reducción de dimensionalidad que
transforma las variables originales en un nuevo conjunto de variables no
correlacionadas, llamadas componentes principales.
Aprendizaje Automático No Supervisado 34
Tema 6. A fondo
© Universidad Internacional de La Rioja (UNIR)
Test
1. ¿Qué significa PCA?
A. Principal Component Analysis.
B. Pattern Classification Algorithm.
C. Probability Calculation Approach.
D. Partial Correlation Adjustment.
2. ¿Cuál es el principal objetivo de PCA?
A. Aumentar el número de variables en un conjunto de datos.
B. Reducir la dimensionalidad manteniendo la mayor cantidad de variabilidad.
C. Clasificar datos categóricos.
D. Eliminar datos redundantes sin considerar la variabilidad.
3. ¿Qué se estandariza en PCA?
A. Las filas de la matriz de datos.
B. Los valores y vectores propios.
C. Las columnas de la matriz de datos.
D. Los clústeres resultantes.
4. ¿Qué representa un valor propio en PCA?
A. La cantidad de varianza explicada por cada componente principal.
B. El valor de la covarianza entre dos variables.
C. La media de los datos.
D. La distancia entre clústeres.
Aprendizaje Automático No Supervisado 35
Tema 6. Test
© Universidad Internacional de La Rioja (UNIR)
Test
5. ¿Qué se utiliza para calcular la matriz de covarianza en PCA?
A. La matriz transpuesta de los datos originales.
B. Los datos estandarizados.
C. Los datos en su forma original.
D. Los valores propios de los datos.
6. ¿Por qué es importante reducir la dimensionalidad de los datos?
A. Para aumentar la complejidad computacional.
B. Para facilitar la visualización y el análisis.
C. Para eliminar toda la variabilidad.
D. Para duplicar los datos disponibles.
7. ¿Qué es un vector propio en PCA?
A. Un vector que cambia de dirección durante la transformación.
B. Un vector que se utiliza para estandarizar datos.
C. Un vector que solo cambia en magnitud, no en dirección.
D. Un vector que se elimina tras la transformación.
8. ¿Qué técnica de visualización se utiliza para decidir el número de componentes
en PCA?
A. Matriz de confusión.
B. Gráfica de codo.
C. Histograma.
D. Análisis de regresión.
Aprendizaje Automático No Supervisado 36
Tema 6. Test
© Universidad Internacional de La Rioja (UNIR)
Test
9. ¿Cuál es una ventaja de PCA en clustering?
A. Incrementa la dimensionalidad de los datos.
B. Facilita la identificación de clústeres en datos de alta dimensionalidad.
C. Elimina completamente el ruido de los datos.
D. Siempre produce mejores resultados que otros algoritmos.
10. ¿Cómo se seleccionan las componentes principales en PCA?
A. Por orden alfabético de los nombres de las variables originales.
B. Por el orden de aparición en el conjunto de datos original.
C. Ordenando los valores propios de mayor a menor y seleccionando los
vectores propios correspondientes.
D. Aleatoriamente.
Aprendizaje Automático No Supervisado 37
Tema 6. Test
© Universidad Internacional de La Rioja (UNIR)
Tema 7
Aprendizaje Automático No Supervisado
Tema 7. Técnicas no lineales.
t-SNE, MDS e ISOMAP
Índice
Esquema
Ideas clave
7.1. Introducción y objetivos
7.2. Entendiendo el t-SNE
7.3. t-SNE vs. PCA
7.4. Implementación del t-SNE en Python
7.5. Multi-Dimensional Scaling (MDS)
7.6. Isometric mapping (Isomap)
7.7. Tabla comparativa entre las diferentes técnicas de
reducción de dimensiones
7.8. Cuaderno de ejercicios
7.9. Referencias bibliográficas
A fondo
Reducción de dimensiones: t-SNE
Entendiendo cómo trabaja la reducción de
dimensionalidad
Test
Esquema
Aprendizaje Automático No Supervisado 3
Tema 7. Esquema
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
7.1. Introducción y objetivos
Cuando vimos PCA nos dimos cuenta de que la visualización y el análisis de grandes
cantidades de datos puede ser complejo, pero es importante para la comprensión y
detección de patrones.
En este tema seguiremos explorando diversas técnicas de reducción de
dimensionalidad, siendo el t-SNE (t-Distributed Stochastic Neighbor Embedding) una
de las más destacadas (Belkina, Ciccolella, Anno, Halpert, Spidlen y Snyder-
Cappione, 2019). El t-SNE permite transformar datos de múltiples dimensiones a
representaciones bidimensionales o tridimensionales, facilitando la identificación de
estructuras y relaciones intrínsecas que serían difíciles de observar en su espacio
original. Su capacidad para preservar las relaciones locales entre los puntos de datos
la convierte en una técnica invaluable para la exploración de conjuntos de datos
complejos (Soni, Prabakar y Upadhyay, 2020; Cheng, Wang y Xia, 2021).
Además del t-SNE, exploraremos otras dos técnicas: MDS (Multi-Dimensional
Scaling) e Isomap (Abdi, 2007; Tenenbaum, de Silva y Langford, 2000). Cada una de
estas ofrece distintos enfoques y ventajas para la reducción de dimensionalidad y la
visualización de datos. PCA es particularmente útil para datos lineales, mientras que
t-SNE, MDS e Isomap son eficaces para descubrir estructuras no lineales. A través
de la implementación práctica y comparación de estas técnicas, los estudiantes
podrán entender mejor cada uno de los métodos.
Como objetivos de este tema nos planteamos:
▸ Comprender los fundamentos teóricos de las técnicas de reducción de
dimensionalidad, explicando conceptos y diferencias entre t-SNE, MDS e Isomap.
▸ Aplicar los algoritmos de t-SNE, MDS e Isomap, implementando cada técnica en
Python utilizando Scikit-learn.
Aprendizaje Automático No Supervisado 4
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Evaluar las ventajas y limitaciones de cada una de las técnicas de reducción de
dimensionalidad, identificando fortalezas y analizando las ventajas y desafíos del uso
de cada técnica.
Aprendizaje Automático No Supervisado 5
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
7.2. Entendiendo el t-SNE
t-SNE o incrustación de vecinos estocásticos distribuidos en t es un método
estadístico que permite visualizar datos de alta dimensionalidad en un espacio de
menor dimensionalidad, generalmente dos o tres dimensiones.
La idea central de t-SNE es mapear los puntos de datos de alta dimensionalidad en
un espacio de menor dimensionalidad, preservando las relaciones locales entre los
puntos. Se mide la similitud entre puntos de datos en el espacio de dimensión alta y
se representa dicha similitud en función de sus probabilidades. Una vez se tienen las
distancias se construye una distribución de probabilidad similar en el espacio de
dimensiones inferiores y se minimiza la diferencia entre las dos distribuciones
utilizando la técnica del descenso del gradiente. De esta forma se captura de manera
efectiva la estructura local de los datos, lo que hace particularmente útil la
visualización de datos complejos y el descubrimiento de patrones.
Cuando se habla de preservar las relaciones entre los puntos, se refiere a mantener
las distancias relativas y las similitudes entre puntos de datos vecinos cuando se
asignan desde un espacio de alta dimensionalidad a un espacio de menor dimensión.
Imaginemos que tenemos un conjunto de datos que se encuentran muy cercanos
unos de otros en el espacio. Una vez que se reduce la dimensionalidad, los puntos
siguen estando muy juntos en el espacio 2D o 3D. De igual forma, si dos puntos
están lejos uno del otro en el espacio original, deberían permanecer alejados en un
espacio de 2D o 3D.
El concepto base del t-SNE es calcular las similitudes entre cada punto de datos con
todos los demás puntos del conjunto de datos. Una vez se tienen estas
puntuaciones, el algoritmo reduce la dimensionalidad a 2D o 3D, mientras se
preservan las relaciones locales, encontrando los vecinos más cercanos entre
Aprendizaje Automático No Supervisado 6
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
puntos.
Algoritmo
Vamos a ver el paso a paso del algoritmo:
▸ Selección del conjunto de datos.
▸ Preprocesamiento y normalización de los datos.
▸ Cálculo de distancias en la dimensión original: calcular las distancias entre
puntos no es muy confiable debido a la «maldición de la dimensionalidad», por lo
que t-SNE utiliza probabilidades. Para cada punto de datos, se traza una distribución
gaussiana a su alrededor con una media cero y una desviación estándar que se
determina en función de la densidad de los puntos cercanos alrededor de un punto
.
• En el eje X (x-axis), se van a representar las distancias desde un punto de
referencia, como (imaginemos que es un punto específico en nuestro conjunto de
datos). Para cada punto en nuestro conjunto de datos, calculamos la distancia a .
Las distancias se trazan a lo largo del eje X. Esto quiere decir que para cada punto
del conjunto de datos se tendrá una posición en el eje X basada en qué tan lejos
está de .
• En el eje Y (y-axis), vamos a representar la densidad de probabilidad. La idea es
representar qué tan probable es que un punto de datos se encuentre a cierta
distancia de . Esto se calcula utilizando la función de densidad de probabilidad,
que nos permite determinar la probabilidad de cada punto de datos en relación con
. Esta probabilidad actúa como una puntuación de similitud, indicando qué tan
similar es un punto al punto de referencia .
• De manera similar, se aplican los dos pasos anteriores a cada punto del conjunto de
datos, lo que nos da como resultado una matriz de . Donde la puntuación de
similitud para cada punto se registra en relación con todos los demás puntos de
Aprendizaje Automático No Supervisado 7
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
datos. La distribución es única alrededor de cada punto, la probabilidad del punto
dado un punto es y no es necesariamente igual a la
probabilidad de dado un punto . Un valor alto de P entre dos
puntos significa que son vecinos entre sí, y un valor bajo indica que están lejos el
uno del otro.
▸ Distribución de probabilidades t de Student: para reducir la dimensionalidad, se
distribuyen puntos aleatoriamente en el eje x. Se calcula la puntuación de similitud
de cada punto con relación a los demás, obteniendo otra matriz de .
▸ Con las dos matrices de , donde una representa las puntuaciones de similitud
en la dimensión superior y la otra representa las puntuaciones de similitud en una
dimensión inferior, se define una función de coste basada en la divergencia de
Kullback-Leibler entre las distribuciones de alta y baja dimensión. Se alinean la
matriz de dimensión inferior con la de dimensión superior, utilizando técnicas de
optimización como el descenso del gradiente, para minimizar la función de coste.
Esto implica ajustar la posición de los puntos de forma iterativa hasta que la matriz
de similitud en la dimensión inferior se parezca lo máximo posible a la de dimensión
superior. Dicho de otra forma, se itera hasta que las posiciones de los puntos en el
espacio de baja dimensión converjan a una configuración que minimice la función de
coste.
▸ Visualización y análisis: se generan visualizaciones de los datos en el espacio de
baja dimensión, interpretando los resultados y analizando las agrupaciones
formadas.
Formulación matemática del t-SNE
Para cada punto de datos en el espacio de alta dimensión calculamos su similitud
con todos los demás puntos utilizando una distribución gaussiana. De igual manera,
en el espacio de baja dimensionalidad, se calculan las similitudes usando una
distribución t.
Aprendizaje Automático No Supervisado 8
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Similitud en alta dimensionalidad
Dado un conjunto de datos con una similitud por pares ,
donde representa la probabilidad condicional de elegir como vecino de
bajo una distribución gaussiana centrada en , definida como:
Similitud en baja dimensionalidad
Para el espacio bajo-dimensional la similitud está
definida por la similitud en el espacio bajo-dimensional usando la distribución t-
Student con un grado de libertad:
La función objetivo
Deseamos minimizar la diferencia entre las similitudes de puntos en el espacio de
alta dimensión y sus contrapartes en el espacio de baja dimensión. Se mide esta
diferencia utilizando la divergencia de Kullback-Leibler (KL). La divergencia KL mide
qué tanto diverge una distribución de probabilidad de otra. En este caso, vamos a
medir qué tanto divergen los espacios de alta y de baja dimensionalidad.
La función objetivo C está definida como la divergencia Kullback-Leibler entre la
distribución y la , ponderado por la constante Perplexity que controla el
número efectivo de vecinos.
Aprendizaje Automático No Supervisado 9
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Descenso del gradiente
Para minimizar la divergencia de KL, utilizamos el descenso del gradiente. Lo que
hace es ajustar las posiciones de los puntos en el espacio de baja dimensionalidad.
En cada iteración, se calcula el gradiente con respecto a las posiciones de los puntos
en el espacio de baja dimensionalidad. El gradiente lo que nos indica es la dirección
en la que debemos movernos en cada punto para reducir la diferencia entre
similitudes entre alta y baja dimensión. Una vez actualizada la posición de los puntos
en función del gradiente, converge gradualmente hacia una configuración donde las
similitudes de baja dimensión coinciden con las del espacio de alta dimensionalidad.
El gradiente de la función objetivo con respecto a los puntos Y de baja dimensión se
calcula utilizando las posiciones de los puntos en el espacio de baja dimensión de
forma iterativa.
Gradiente de la función de coste con respecto a los puntos está dado por:
En lugar de calcular el gradiente de la función objetivo usando todos los puntos de
datos a la vez (lo cual sería muy costoso computacionalmente), el SGD actualiza las
posiciones de los puntos de manera iterativa y estocástica. Esto significa que, en
cada iteración, se selecciona un subconjunto aleatorio (mini-batch) de los datos para
calcular una aproximación del gradiente.
Aplicaciones del t-SNE (Awan, 2023)
▸ Agrupación y clasificación: agrupar puntos de datos similares en dimensiones
inferiores. Se suele utilizar para encontrar patrones en los datos.
Aprendizaje Automático No Supervisado 10
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Detección de anomalías: se pueden identificar valores atípicos y anomalías en los
datos.
▸ Procesamiento del lenguaje natural: visualiza incrustaciones de palabras
generadas a partir de un gran corpus de texto que facilita la identificación de
similitudes y relaciones entre palabras.
▸ Seguridad informática: se pueden visualizar patrones de tráfico de red y detectar
anomalías.
▸ Investigación del cáncer: para visualizar perfiles moleculares de muestras de
tumores e identificar subtipos de cáncer.
▸ Interpretaciones geológicas: visualización de atributos sísmicos e identificación de
anomalías geológicas.
▸ Procesamiento de señales biomédicas: para visualizar electroencefalogramas y
detectar patrones de actividad cerebral.
Ventajas y desventajas del t-SNE (Sachinsoni, 2024)
▸ Si se aplica correctamente, puede ofrecer visualizaciones muy intuitivas preservando
la estructura local de los datos en las dimensiones inferiores.
▸ Es costoso computacionalmente.
▸ No es muy bueno preservando la estructura global.
▸ Sensible a hiperparámetros.
▸ Puede quedarse atascado en los mínimos locales.
▸ La interpretación puede ser un desafío.
Aprendizaje Automático No Supervisado 11
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
7.3. t-SNE vs. PCA
Tanto t-SNE como PCA son técnicas de reducción de dimensionalidad. PCA
funciona mejor con datos lineales; busca identificar los componentes principales
subyacentes en los datos proyectándolos en dimensiones inferiores, minimizando la
variación y preservando grandes distancias por pares.
A t-SNE no le interesa si los datos son lineales o no, se centra en preservar las
similitudes por pares entre puntos de datos en un espacio de dimensiones inferiores.
t-SNE se preocupa por preservar pequeñas distancias por pares, mientras que PCA
se enfoca en mantener grandes distancias por pares para maximizar la varianza. En
la Figura 1, se muestra un ejemplo de reducción de dimensionalidad del conjunto de
datos MNIST utilizando PCA y t-SNE.
Figura 1. PCA vs. t-SNE conjunto de datos MNIST. Fuente: elaboración propia.
En la figura 1, podemos ver como t-SNE nos da una mejor visualización de los
grupos de datos que perteneces a los diferentes dígitos en comparación con PCA.
Los datos del MNIST son no lineales y t-SNE captura mejor los datos que PCA.
Aprendizaje Automático No Supervisado 12
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
7.4. Implementación del t-SNE en Python
Veamos el ejemplo con el conjunto de datos MNIST; un conjunto de datos que
contiene imágenes de dígitos del 0 al 9 escrito a mano.
#Importar las librerías necesarias
import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
from sklearn.datasets import fetch_openml
from sklearn.preprocessing import StandardScaler
# Descargar el conjunto de datos MNIST
mnist = fetch_openml('mnist_784', version=1)
X = mnist.data
y = mnist.target.astype(int)
# Normalizar los datos
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# Reducir la dimensionalidad a 2 componentes usando t-SNE (puede tardar
varios minutos)
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X_scaled)
# Crear una gráfica de los datos proyectados
plt.figure(figsize=(10, 8))
scatter = plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='tab10',
alpha=0.7)
plt.colorbar(scatter)
plt.xlabel('Componente t-SNE 1')
plt.ylabel('Componente t-SNE 2')
plt.title('Proyección t-SNE de MNIST')
plt.show()
Aprendizaje Automático No Supervisado 13
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 2. t-SNE sobre el conjunto de datos MNIST. Fuente: elaboración propia.
A continuación, veremos el vídeo t-SNE utilizando Python.
Aprendizaje Automático No Supervisado 14
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=0d3c083c-0cb4-
4bdd-9d37-b1bf00149af2
Aprendizaje Automático No Supervisado 15
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
7.5. Multi-Dimensional Scaling (MDS)
E l escalado multidimensional (MDS) es una herramienta estadística que ayuda a
descubrir conexiones entre puntos en un espacio de dimensiones más bajo que las
dimensiones originales. Utiliza técnicas de análisis de datos de similitud o disimilitud
canónica.
El objetivo principal es mantener las proximidades originales entre conjuntos de
datos; los datos más similares se ubican muy cerca unos de otros, mientras que los
datos más separados se colocan separados en el espacio de dimensión menor.
Utiliza algoritmos de optimización avanzados para minimizar las discrepancias entre
las distancias originales en el espacio de altas dimensiones y el espacio de bajas
dimensiones. Para poder lograrlo, el algoritmo ajusta las posiciones de los puntos
para que las distancias en las dimensiones más bajas sean lo más cercanas posibles
a los datos originales.
Sus aplicaciones se han dado especialmente en áreas como la psicología,
sociología, marketing, geografía y biología.
Existen tres tipos de escala multidimensional:
▸ Algoritmo clásico: toma una matriz de entrada que representa diferencias entre
pares de elementos y produce una matriz de coordenadas que minimiza la
dimensionalidad.
▸ Escalamiento multidimensional métrico que generaliza el procedimiento de
optimización a varias funciones de pérdida y matrices de entrada con distancias y
pesos desconocidos. Minimiza una función de coste llamada «stress».
▸ Escalado multidimensional no métrico: encuentra la relación monótona no
paramétrica entre las diferencias y distancias euclidianas entre elementos, junto con
Aprendizaje Automático No Supervisado 16
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
la ubicación de cada elemento en el espacio de baja dimensionalidad. Se define una
función de «stress» a optimizar y se considera que es monótonamente creciente.
Veamos un ejemplo de implementación en Python:
#Cargamos la librería de Isomap
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import fetch_openml
from sklearn.preprocessing import StandardScaler
from sklearn.manifold import MDS
# Descargar el conjunto de datos MNIST
mnist = fetch_openml('mnist_784', version=1)
X = mnist.data
y = mnist.target.astype(int)
# Usar solo una muestra del conjunto de datos para reducir la carga de
memoria
sample_size = 10000 # Puedes ajustar este número según sea necesario
X_sample = X[:sample_size]
y_sample = y[:sample_size]
# Normalizar los datos
scaler = StandardScaler()
X_sample_scaled = scaler.fit_transform(X_sample)
# Reducir la dimensionalidad a 50 componentes usando PCA
pca = PCA(n_components=50)
X_sample_pca = pca.fit_transform(X_sample_scaled)
# Reducir la dimensionalidad a 2 componentes usando MDS
mds = MDS(n_components=2, random_state=42)
X_sample_mds = mds.fit_transform(X_sample_pca)
# Crear una gráfica de los datos proyectados
plt.figure(figsize=(10, 8))
scatter = plt.scatter(X_sample_mds[:, 0], X_sample_mds[:, 1], c=y_sample,
cmap='tab10', alpha=0.7)
plt.colorbar(scatter)
plt.xlabel('Componente MDS 1')
plt.ylabel('Componente MDS 2')
plt.title('Proyección MDS de una muestra de MNIST')
plt.show()
Aprendizaje Automático No Supervisado 17
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 3. MDS sobre el conjunto de datos MNIST. Fuente: elaboración propia.
Aprendizaje Automático No Supervisado 18
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
7.6. Isometric mapping (Isomap)
Mapeo isométrico o Isomap combina varios algoritmos que le permiten utilizar una
forma no lineal para reducir las dimensiones preservando las estructuras locales.
Algoritmo
▸ Utiliza KNN para encontrar los K vecinos más cercanos de cada uno de los puntos. K
es un número elegido arbitrariamente.
▸ Una vez se han encontrado los vecinos, se construye un gráfico de vecindad donde
los puntos están conectados entre sí si son vecinos. Los demás puntos permanecen
desconectados.
▸ Se calcula el camino más corto entre cada par de puntos, utilizando el algoritmo
Floyd-Warshall o también el de Dijkstra. Este paso halla la distancia geodésica entre
puntos. Este es el secreto de la capacidad que tiene el algoritmo para reducir la
dimensionalidad no lineal y al mismo tiempo equilibrar la relación entre las
estructuras locales y globales.
▸ Utiliza el escalado multidimensional (MDS) para calcular la incrustación de
dimensiones inferiores. Como se conocen las distancias entre puntos, MDS coloca
cada objeto en el espacio N-dimensional de tal manera que las distancias entre
puntos se conservan bastante bien.
Veamos cómo implementarlo en Python utilizando el mismo conjunto de datos que
venimos trabajando en los ejemplos anteriores, el de los dígitos escritos a mano-
MNIST.
#Cargamos la librería de Isomap
from sklearn.manifold import Isomap
# Reducir la dimensionalidad a 2 componentes usando Isomap
isomap = Isomap(n_components=2)
X_isomap = isomap.fit_transform(X_scaled)
Aprendizaje Automático No Supervisado 19
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
# Crear una gráfica de los datos proyectados
plt.figure(figsize=(10, 8))
scatter = plt.scatter(X_isomap[:, 0], X_isomap[:, 1], c=y, cmap='tab10',
alpha=0.7)
plt.colorbar(scatter)
plt.xlabel('Componente Isomap 1')
plt.ylabel('Componente Isomap 2')
plt.title('Proyección Isomap de MNIST')
plt.show()
El código anterior tiene un problema requiere gran cantidad de memoria. Para poder
ejecutarlo en Python es necesario trabajar con una muestra más pequeña.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import fetch_openml
from sklearn.preprocessing import StandardScaler
from sklearn.manifold import Isomap
# Descargar el conjunto de datos MNIST
mnist = fetch_openml('mnist_784', version=1)
X = mnist.data
y = mnist.target.astype(int)
# Usar solo una muestra del conjunto de datos para reducir la carga de
memoria
sample_size = 10000 # Se puede ajustar este número
X_sample = X[:sample_size]
y_sample = y[:sample_size]
# Normalizar los datos
scaler = StandardScaler()
X_sample_scaled = scaler.fit_transform(X_sample)
# Reducir la dimensionalidad a 2 componentes usando Isomap
isomap = Isomap(n_components=2)
X_isomap = isomap.fit_transform(X_sample_scaled)
# Crear una gráfica de los datos proyectados
plt.figure(figsize=(10, 8))
scatter = plt.scatter(X_isomap[:, 0], X_isomap[:, 1], c=y_sample,
cmap='tab10', alpha=0.7)
plt.colorbar(scatter)
plt.xlabel('Componente Isomap 1')
Aprendizaje Automático No Supervisado 20
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
plt.ylabel('Componente Isomap 2')
plt.title('Proyección Isomap de una muestra de MNIST')
plt.show()
Figura 4. Isomap sobre el conjunto de datos MNIST. Fuente: elaboración propia.
Isoamp también se utiliza como parte del análisis de procesamiento del lenguaje
natural para reducir la dimensionalidad de los datos de texto antes de entrenar un
modelo de clasificación.
Aprendizaje Automático No Supervisado 21
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
7.7. Tabla comparativa entre las diferentes
técnicas de reducción de dimensiones
Veamos las diferencias y características de las técnicas que hemos visto en este
tema a través de la Tabla 1:
Tabla 1. Características de las técnicas de reducción de dimensiones. Fuente: basado en GeeksforGeeks,
2024.
A continuación, veremos el vídeo Comparación de técnicas de reducción de
dimensionalidad en Python.
Aprendizaje Automático No Supervisado 22
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=e84afe29-0480-
4b59-aa21-b1bf000dd216
Aprendizaje Automático No Supervisado 23
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
7.8. Cuaderno de ejercicios
Ejercicio 1. Conceptos básicos
Explica brevemente en qué se diferencian las técnicas de PCA y t-SNE en términos
de sus objetivos y aplicaciones.
Solución
PCA (Principal Component Analysis) busca maximizar la variación de los datos a lo
largo de ejes ortogonales y es particularmente eficaz para transformaciones lineales,
capturando la estructura global. t-SNE, por otro lado, se centra en preservar las
relaciones locales entre puntos de datos en un espacio de menor dimensionalidad,
siendo más adecuado para la visualización de datos no lineales y complejos, como
en el caso del conjunto de datos MNIST.
Ejercicio 2. Implementación t-SNE
Describe los pasos básicos necesarios para implementar t-SNE en Python utilizando
un conjunto de datos de ejemplo.
Solución
Para implementar t-SNE en Python, primero se importan las librerías necesarias
(numpy, matplotlib, sklearn). Luego se descarga y normaliza el conjunto de datos.
Posteriormente, se aplica t-SNE con TSNE (n_components=2 o 3) y se transforma el
conjunto de datos. Finalmente, se visualizan los datos proyectados en un gráfico 2D
usando plt.scatter() .
Ejercicio 3. Aplicaciones de MDS
Menciona dos aplicaciones del escalado multidimensional (MDS) y explica
brevemente cómo esta técnica es útil en esos contextos.
Aprendizaje Automático No Supervisado 24
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Solución
MDS se utiliza en psicología para descubrir patrones en respuestas de encuestas y
en marketing para analizar preferencias de consumidores. En ambos casos, MDS
ayuda a visualizar y entender las similitudes y diferencias entre elementos (como
individuos o productos) en un espacio de menor dimensionalidad, manteniendo las
distancias relativas entre los datos.
Ejercicio 4. Ventajas y desventajas de Isomap
Menciona dos ventajas y dos desventajas del uso de Isomap en la reducción de
dimensionalidad.
Solución
Dos ventajas de Isomap son su capacidad para preservar relaciones no lineales y
descubrir la estructura intrínseca de los datos, lo que es útil para datos complejos
como imágenes o redes de sensores. Dos desventajas son su alta demanda
computacional y la sensibilidad a la elección del número de vecinos más cercanos
(K), lo cual puede afectar significativamente los resultados.
Aprendizaje Automático No Supervisado 25
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
7.9. Referencias bibliográficas
Abdi, H. (2007). Metric multidimensional scaling (MDS): analyzing distance matrices.
Encyclopedia of measurement and statistics, 1-13.
Awan, A. (2023, march). Introduction to t-SNE. Datacamp.
https://www.datacamp.com/tutorial/introduction-t-sne?
dc_referrer=https%3A%2F%2F2.zoppoz.workers.dev%3A443%2Fhttps%2Fwww.google.com%2F
Belkina, A. C., Ciccolella, C. O., Anno, R., Halpert, R., Spidlen, J. y Snyder-Cappione,
J. E. (2019). Automated optimized parameters for T-distributed stochastic neighbor
embedding improve visualization and analysis of large datasets. Nature
communications, 10(1), 5415.
Cheng, Y., Wang, X. y Xia, Y. (2021). Supervised t-distributed stochastic neighbor
embedding for data visualization and classification. INFORMS journal on computing,
33(2), 566-585.
GeeksforGeeks. (2024, Mayo 19). What is Multidimensional Scaling?
https://www.geeksforgeeks.org/what-is-multidimensional-scaling/
Sachinsoni. (2024, febrero 11). Mastering t-SNE (t-distributed stochastic neighbor
embedding). M e d i u m . https://medium.com/@sachinsoni600517/mastering-t-sne-t-
distributed-stochastic-neighbor-embedding-0e365ee898ea
Soni, J., Prabakar, N. y Upadhyay, H. (2020). Visualizing high-dimensional data using
t-distributed stochastic neighbor embedding algorithm. Principles of data science,
189-206.
Tenenbaum, J. B., de Silva, V. y Langford, J. C. (2000). A global geometric
framework for nonlinear dimensionality reduction. Science, 290(5500), 2319-2323.
https://doi.org/10.1126/science.290.5500.2319
Aprendizaje Automático No Supervisado 26
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Aprendizaje Automático No Supervisado 27
Tema 7. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
A fondo
Reducción de dimensiones: t-SNE
Organización de datos. (2020, junio 6). Reducción de dimensiones: t-SNE [Vídeo].
YouTube. https://www.youtube.com/watch?v=NtvFoZORPB8&t=620s
Explica de forma detallada el paso a paso del algoritmo con base en un artículo de
investigación.
Aprendizaje Automático No Supervisado 28
Tema 7. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
Entendiendo cómo trabaja la reducción de
dimensionalidad
Wang, Y., Huang, H., Rudin, C. y Shaposhnik, Y. (2021). Understanding How
Dimension Reduction Tools Work: An Empirical Approach to Deciphering t-SNE,
UMAP, TriMap, and PaCMAP for Data Visualization. Journal of Machine Learning
Research, 22, 1-73. https://www.jmlr.org/papers/volume22/20-1061/20-1061.pdf
El objetivo del paper es que el lector comprenda los aspectos más importantes de
algunas técnicas de reducción de dimensiones. A partir de las técnicas estudiadas,
los autores diseñan un nuevo algoritmo denominado proyección de aproximación de
colector controlado por pares (PaMAP), que preserva tanto la estructura local como
la global.
Aprendizaje Automático No Supervisado 29
Tema 7. A fondo
© Universidad Internacional de La Rioja (UNIR)
Test
1. ¿Cuál es el objetivo principal del t-SNE?
A. Maximizar la variación global en los datos.
B. Preservar las relaciones locales entre puntos de datos.
C. Minimizar el uso de recursos computacionales.
D. Garantizar la linealidad de los datos.
2. ¿Cuál de las siguientes técnicas es más adecuada para datos lineales?
A. t-SNE.
B. PCA.
C. MDS.
D. Isomap.
3. ¿Cuál es una de las desventajas del t-SNE?
A. Es muy eficiente computacionalmente.
B. Preserva la estructura global de los datos.
C. Puede quedarse atascado en mínimos locales.
D. Es muy sensible a los hiperparámetros.
4. ¿Qué técnica utiliza distribuciones gaussianas para calcular similitudes en alta
dimensionalidad?
A. PCA.
B. MDS.
C. t-SNE.
D. Isomap.
Aprendizaje Automático No Supervisado 30
Tema 7. Test
© Universidad Internacional de La Rioja (UNIR)
Test
5. ¿Qué significa MDS en el contexto de la reducción de dimensionalidad?
A. Minimum Dimension Search.
B. Multi-Dimensional Scaling.
C. Maximum Distance Sorting.
D. Multi-Data Scaling.
6. ¿Cuál de las siguientes técnicas es especialmente útil para datos no lineales?
A. Isomap.
B. t-SNE
C. MDS.
D. Todas las anteriores.
7. ¿Qué técnica de reducción de dimensionalidad utiliza la divergencia de Kullback-
Leibler?
A. PCA.
B. MDS.
C. t-SNE.
D. Isomap.
8. ¿Cuál de las siguientes aplicaciones es adecuada para t-SNE?
A. Reducción de dimensionalidad de datos lineales.
B. Visualización de datos complejos y no lineales.
C. Análisis de encuestas de preferencias.
D. Cálculo de distancias euclidianas entre puntos.
Aprendizaje Automático No Supervisado 31
Tema 7. Test
© Universidad Internacional de La Rioja (UNIR)
Test
9. ¿Qué técnica utiliza el algoritmo de Floyd-Warshall para calcular el camino más
corto entre pares de puntos?
A. PCA.
B. MDS.
C. t-SNE.
D. Isomap.
10. ¿Cuál de las siguientes afirmaciones sobre las técnicas de reducción de
dimensionalidad es correcta?
A. MDS es más adecuado que t-SNE para datos con estructuras no lineales.
B. PCA puede preservar mejor las relaciones locales entre los datos que t-
SNE.
C. t-SNE es computacionalmente más eficiente que PCA para grandes
conjuntos de datos.
D. Isomap utiliza el cálculo de distancias geodésicas para preservar las
relaciones no lineales en los datos.
Aprendizaje Automático No Supervisado 32
Tema 7. Test
© Universidad Internacional de La Rioja (UNIR)
Tema 8
Aprendizaje Automático No Supervisado
Tema 8. Detección de
anomalías
Índice
Esquema
Ideas clave
8.1. Introducción y objetivos
8.2. Métodos estadísticos para la detección de anomalías
8.3. Algoritmos basados en distancia
8.4. Algoritmos basados en densidad
8.5. Isolation Forest
8.6. Cuaderno de ejercicios
8.7. Referencias bibliográficas
A fondo
¿Cuáles son los algoritmos más comunes de aprendizaje
no supervisado para detectar anomalías?
Detección de anomalías en tiempo real
Test
Esquema
Aprendizaje Automático No Supervisado 3
Tema 8. Esquema
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
8.1. Introducción y objetivos
Los problemas de detección de anomalías son una aplicación común del
aprendizaje automático. Pero ¿qué es la detección de anomalías? Imagina que
trabajas en una empresa que fabrica motores de aviones. A medida que los motores
salen de la cadena de montaje, se realiza una fase de aseguramiento de la calidad
en la cual se miden algunas características de los motores (ejemplo: calor generado
y vibración). Supongamos que tenemos un conjunto de datos con m motores que han
sido evaluados positivamente y han dado como resultado lo dibujado en la siguiente
gráfica.
Figura 1. Distribución de valores de vibración y calor generado por motores. Fuente: Indira, 2020.
Supongamos que al día siguiente se fabrica un nuevo motor y se utiliza un método
de detección de anomalías para comprobar su correcto funcionamiento, comparando
el de este motor nuevo con respecto a los motores previos. Obtenemos una gráfica
como la Figura 2.
Aprendizaje Automático No Supervisado 4
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 2. Distribución de valores de vibración y calor generado por motores. Ejemplo de una instancia
correcta. Fuente: adaptado de Indira, 2020.
Lo más probable es que el motor funcione correctamente, pues su comportamiento
es muy similar al de motores previos. Sin embargo, la gráfica es como la Figura 3.
Figura 3. Distribución de valores de vibración y calor generado por motores. Ejemplo de una instancia
anómala. Fuente: adaptado de Indira, 2020.
Lo más probable es que el motor presente algún tipo de anomalía.
Aprendizaje Automático No Supervisado 5
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
En este tipo de problemas partimos de un conjunto de datos que contiene registros
normales, o bien la gran mayoría de ellos lo son. El objetivo es utilizar este conjunto
como referencia y observar si existen nuevos ejemplos que son anómalos.
La detección de anomalías combina las técnicas de aprendizaje
supervisado para generar un modelo de valores normales y,
posteriormente, se utiliza este modelo con nuevos registros para
detectar valores anómalos o inusuales.
Una anomalía es una observación que se desvía del comportamiento o patrón
esperado de un conjunto de datos determinado. Estas técnicas también se conocen
en la literatura con el nombre de detección de outliers. En esencia, un outlier es un
valor poco habitual y, por tanto, puede ser considerado una anomalía.
La detección de anomalías se utiliza ampliamente en diversas aplicaciones, como
detección de fraude, detección de intrusiones en la red, diagnóstico médico,
mantenimiento predictivo, control de calidad de fabricación, monitoreo de redes
sociales, robo de identidad, monitoreo de tráfico, violación de datos, video vigilancia,
detección de fake news, entre otros.
Técnicas para detectar anomalías
Existen diversas técnicas que nos ayudan a detectar anomalías, pero las más
comunes son (Desai, 2023):
▸ Detección de anomalías con algoritmos supervisados: se utilizan datos
etiquetados para entrenar un modelo que incluye instancias normales y anómalas.
▸ Detección de anomalías con algoritmos no supervisados: el modelo aprende a
identificar anomalías sin conocimiento previo de lo que constituye un
comportamiento normal. Muy útil cuando no hay etiquetas disponibles o cuando las
Aprendizaje Automático No Supervisado 6
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
anomalías son raras o difíciles de encontrar.
▸ Detección de anomalías con algoritmos semisupervisados: utiliza la
combinación de datos etiquetados y no etiquetados para entrenar el modelo. El
modelo aprende a identificar anomalías en los datos sin etiquetar en función de lo
que aprende de los datos etiquetados.
▸ Detección estadística de anomalías: utilizando técnicas estadísticas para detectar
anomalías basadas en la distribución de los datos. Implica identificar puntos de datos
que quedan fuera de un rango predefinido de valores o que tienen propiedades
estadísticas inusuales.
Cada técnica de detección de anomalías tiene sus propias fortalezas y debilidades, y
la elección de la técnica depende de la aplicación específica y las características del
conjunto de datos.
La detección de valores atípicos y el análisis de agrupamiento son tareas muy
relacionadas. La agrupación encuentra la mayoría de los patrones en un conjunto de
datos y los organiza en consecuencia, mientras que la detección de valores atípicos
intenta capturar aquellos casos excepcionales que se desvían de la mayoría de los
patrones.
Tipos de valores atípicos
Se pueden clasificar en tres categorías:
▸ Valor atípico global: hay una desviación significativa del resto de datos.
▸ Valor atípico contextual: el objeto se desvía significativamente según un contexto
seleccionado. Por ejemplo, 28 grados centígrados es atípico para un invierno en
Siberia, pero no un valor atípico para un verano en España.
▸ Valor atípico colectivo: cuando un subconjunto de datos en un conjunto se desvía
del conjunto completo, incluso si los objetos de datos individuales pueden no ser
Aprendizaje Automático No Supervisado 7
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
valores atípicos. Por ejemplo, un electrocardiograma cuando a un paciente le quitan
los electrodos presenta un trazo diferente a un electrocardiograma normal.
En este tema veremos métodos estadísticos, algoritmos no supervisados de
agrupamiento basados en distancias y basados en densidad que nos ayudan a
detectar anomalías.
Ventajas y desventajas
Antes de entrar en materia veamos algunas ventajas y desventajas de los algoritmos
de detección de anomalías.
Ventajas:
▸ Detección temprana de anomalías: ayuda a identificar problemas potenciales y
oportunidades de mejora antes de que se vuelvan críticos. Tomando medidas
proactivas se pueden prevenir o mitigar los impactos negativos.
▸ Precisión mejorada: una vez se eliminan los valores atípicos, los análisis
estadísticos y los modelos de aprendizaje automático pueden lograr una mayor
precisión y confiabilidad.
▸ Seguridad mejorada: la detección de anomalías puede ayudar a identificar posibles
amenazas a la seguridad, como intrusiones en la red, fraude o ataques cibernéticos.
▸ Eficiencia mejorada: identificar y eliminar valores atípicos, se pueden optimizar
operaciones, reducir errores y mejorar la productividad.
Desventajas:
▸ Falsos positivos: con la detección de anomalías se puede identificar puntos de
datos normales como valores atípicos, lo que genera falsos positivos. Esto puede
generar alertas o acciones innecesarias y una pérdida de tiempo y de recursos.
▸ Preprocesamiento de datos: para poder detectar bien las anomalías es necesario
Aprendizaje Automático No Supervisado 8
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
realizar un preprocesamiento de datos cuidadoso y una selección de funciones para
garantizar resultados precisos y confiables. Este proceso puede ser engorroso y
consumir mucho tiempo y recursos.
▸ Selección del modelo: es un desafío encontrar el modelo correcto, ya que cada
modelo tiene sus fortalezas y sus debilidades y puede ser más o menos adecuado
para ciertos tipos de datos o aplicaciones.
▸ Datos desequilibrados: puede ser un desafío en conjuntos de datos
desequilibrados, donde las anomalías son la minoría. Conduciendo a bajas tasas de
detección y altas tasas de falsos negativos.
Como objetivos de este tema nos planteamos:
▸ Introducir los métodos de detección de anomalías y su principal aplicación.
▸ Describir cómo se pueden utilizar métodos estadísticos y de aprendizaje automático
para detectar anomalías.
Aprendizaje Automático No Supervisado 9
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
8.2. Métodos estadísticos para la detección de
anomalías
Para llevar a cabo la tarea de detección de anomalías, existen diversos métodos
estadísticos que se pueden aplicar tanto a variables individuales (univariables) como
a múltiples variables simultáneamente (multivariables).
L o s métodos estadísticos univariables se centran en el análisis de una sola
variable a la vez. Estos métodos incluyen técnicas como el cálculo de la media y la
desviación estándar para identificar valores que se desvían significativamente del
comportamiento esperado, el uso del Z-Score para estandarizar las puntuaciones y
detectar outliers, así como la aplicación de la media móvil para observar tendencias y
detectar irregularidades a lo largo del tiempo. La extensión de estos métodos a
escenarios multivariables también es posible.
Este tipo de métodos se basa en el análisis de las propiedades estadísticas de los
datos para identificar casos que se desvían significativamente de la norma. Es decir,
que las anomalías tienen atributos estadísticos distintos en comparación con los
puntos normales.
En el ámbito de la estadística, las pruebas son fundamentales para la toma de
decisiones y la prueba de hipótesis. Se utilizan pruebas paramétricas y no
paramétricas para discernir patrones y relaciones importantes en los datos, validar
suposiciones o desacreditar ciertas afirmaciones.
▸ Las no paramétricas son herramientas eficaces para detectar anomalías en
conjuntos de datos donde no se pueden hacer suposiciones sobre la distribución de
los datos. Aprovechando estas técnicas, podemos detectar anomalías basadas en
métricas como la media y los cuantiles.
▸ Las paramétricas se basan en el supuesto de que los datos siguen una distribución
Aprendizaje Automático No Supervisado 10
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
específica, normalmente distribución normal o gaussiana. También asume otras
condiciones como homogeneidad de varianzas e independencia de observaciones.
Si se cumplen dichos criterios, las pruebas paramétricas son herramientas
poderosas para detectar anomalías. Las técnicas paramétricas comunes son la
prueba de Z-Score y el test de T-Score.
Veamos en detalle algunas de ellas.
Pruebas no paramétricas
Las pruebas no paramétricas son útiles para detectar anomalías especialmente
cuando no se pueden hacer suposiciones sobre la distribución de los datos. A
continuación, presentamos algunos métodos no paramétricos como el método del
percentil y la media móvil. Existen otras pruebas no paramétricas comunes para la
detección de anomalías: test de Grubbs (test de Grubbs para un outlier), test de
Tukey (prueba de rango intercuartílico), test de Wilcoxon (test de Wilcoxon para
muestras apareadas), test de Kruskal-Wallis y test de Mann-Whitney U.
Método del percentil
El método del percentil define un umbral con base en el rango percentil de los puntos
de datos. Identificar anomalías como valores que están por debajo o por encima de
un percentil específico es útil cuando se trata de distribuciones asimétricas no
gaussianas.
Utilicemos este método con el mismo conjunto de datos del ejemplo anterior:
# Definir percentiles para marcar las anomalías
lower_percentile = 1
upper_percentile = 99
# Calcular los valores de los percentiles
lower_bound = np.percentile(data, lower_percentile)
upper_bound = np.percentile(data, upper_percentile)
# Identificar anomalías
anomalies = np.where((data < lower_bound) | (data > upper_bound))
Aprendizaje Automático No Supervisado 11
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
# Mostrar los datos y marcar las anomalías
plt.figure(figsize=(10, 6))
plt.plot(data, 'bo', markersize=5, label='Dato normal')
plt.plot(anomalies[0], data[anomalies], 'ro', markersize=7,
label='Anomalía')
plt.axhline(y=lower_bound, color='g', linestyle='--',
label=f'{lower_percentile} Percentil')
plt.axhline(y=upper_bound, color='r', linestyle='--',
label=f'{upper_percentile} Percentil')
plt.title('Detección de anomalías utilizando Percentiles')
plt.legend()
plt.show()
# Imprimir las anomalías detectadas
print(f'Anomalías detectadas: {data[anomalies]}')
Figura 4. Detección de datos anómalos utilizando el método del percentil. Fuente: elaboración propia.
Método de la media móvil
Este método calcula la media móvil de los puntos de datos y compara cada dato con
la media. Las anomalías suelen estar desviados significativamente del promedio
móvil.
Aprendizaje Automático No Supervisado 12
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Veamos un ejemplo en Python:
import numpy as np
import matplotlib.pyplot as plt
# Generación de datos sintéticos de una serie temporal
np.random.seed(0)
data = np.random.normal(0, 1, 100) # 100 datos con distribución normal
# Añadir algunas anomalías
data[50] = 8
data[51] = -9
data[70] = 10
data[71] = -10
plt.figure(figsize=(10, 6))
plt.plot(data, 'bo-', markersize=5)
plt.title('Serie temporal con posibles anomalías')
plt.show()
Figura 5. Ejemplo de serie temporal creada a partir de datos generados al azar. Fuente: elaboración
propia.
# Definir la ventana para la media móvil
window_size = 10
# Calcular la media móvil
rolling_mean = np.convolve(data, np.ones(window_size)/window_size,
mode='valid')
Aprendizaje Automático No Supervisado 13
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
# Calcular la desviación estándar de la ventana móvil
rolling_std = np.array([np.std(data[i:i+window_size]) for i in
range(len(data) - window_size + 1)])
# Definir el umbral para considerar un punto como anomalía (por ejemplo, 2
desviaciones estándar)
threshold = 2
# Identificar anomalías
anomalies = []
for i in range(len(rolling_mean)):
if np.abs(data[i + window_size - 1] - rolling_mean[i]) > threshold *
rolling_std[i]:
anomalies.append(i + window_size - 1)
# Mostrar los datos, la media móvil y las anomalías
plt.figure(figsize=(10, 6))
plt.plot(data, 'bo-', markersize=5, label='Dato')
plt.plot(range(window_size - 1, len(data)), rolling_mean, 'r-',
label='Media Móvil')
plt.plot(anomalies, data[anomalies], 'ro', markersize=7, label='Anomalía')
plt.title('Detección de anomalías utilizando Media Móvil')
plt.legend()
plt.show()
# Imprimir las anomalías detectadas
print(f'Anomalías detectadas: {data[anomalies]}')
Aprendizaje Automático No Supervisado 14
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 6. Ejemplo de detección de anomalía en una serie temporal utilizando la técnica de media móvil.
Fuente: elaboración propia.
Pruebas paramétricas
Estas técnicas se basan en parámetros estadísticos como la media y la desviación
estándar para identificar puntos de datos que se desvían significativamente de la
norma. Cada prueba actúa sobre un escenario diferente, por ejemplo, Z-Score y T-
Score se utilizan para comparar las medias de uno o dos grupos. Mientras que
ANOVA se utiliza para comparar las medias de tres o más grupos.
Z-Score
El Z-Score es una técnica estadística que nos permite detectar anomalías. Una vez
calculado el valor de Z para cada punto de datos, aquellos que superen un umbral de
x desviaciones estándar que se alejen de la media, se consideran anomalías.
Veamos un ejemplo donde el umbral está en 3 desviaciones estándar:
import numpy as np
import matplotlib.pyplot as plt
# Generación de datos sintéticos
np.random.seed(0)
data = np.random.normal(0, 1, 100) # 100 datos con distribución normal
# Añadir algunas anomalías
data = np.append(data, [8, 9, 10, -10, -9, -8])
plt.figure(figsize=(10, 6))
plt.plot(data, 'bo', markersize=5)
plt.title('Datos con posibles anomalías')
plt.show()
Aprendizaje Automático No Supervisado 15
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 7. Diagrama de dispersión de datos generados aleatoriamente. Fuente: elaboración propia.
from scipy import stats
# Calcular la media y desviación estándar
mean = np.mean(data)
std_dev = np.std(data)
# Calcular el Z-Score
z_scores = stats.zscore(data)
# Determinar los umbrales para marcar anomalías
threshold = 3
anomalies = np.where(np.abs(z_scores) > threshold)
# Mostrar los datos y marcar las anomalías
plt.figure(figsize=(10, 6))
plt.plot(data, 'bo', markersize=5, label='Dato normal')
plt.plot(anomalies[0], data[anomalies], 'ro', markersize=7,
label='Anomalía')
plt.title('Detección de anomalías utilizando Z-Score')
plt.legend()
plt.show()
# Imprimir las anomalías detectadas
print(f'Anomalías detectadas: {data[anomalies]}')
Aprendizaje Automático No Supervisado 16
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 8. Detección de datos anómalos utilizando DBSCAN. Fuente: elaboración propia.
T-Score
T-Score es similar al Z-Score, pero el T-Score se utiliza principalmente cuando el
tamaño de la muestra es pequeño y la desviación estándar de la población no es
conocida.
Mostramos un ejemplo en Python utilizando datos sintéticos:
import numpy as np
import pandas as pd
from scipy import stats
# Generar datos de ejemplo
np.random.seed(0)
data = np.random.normal(50, 10, 30) # 30 datos con media 50 y desviación
estándar 10
data = np.append(data, [100, 110, 120]) # Añadir algunas anomalías
# Convertir a DataFrame para mayor comodidad
df = pd.DataFrame(data, columns=['Valor'])
# Calcular el T-Score
t_scores = stats.t.sf(np.abs(stats.t.cdf((df['Valor'] - df['Valor'].mean())
Aprendizaje Automático No Supervisado 17
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
/ df['Valor'].std(), len(df)-1)), len(df)-1)
# Añadir el T-Score al DataFrame
df['T-Score'] = (df['Valor'] - df['Valor'].mean()) /
df['Valor'].std(ddof=1)
# Identificar las anomalías (por ejemplo, T-Score > 3 o T-Score < -3)
df['Anomalía'] = df['T-Score'].apply(lambda x: 'Sí' if np.abs(x) > 3 else
'No')
# Mostrar resultados
print(df)
# Si quieres mostrar solo las anomalías
print("\nAnomalías detectadas:")
print(df[df['Anomalía'] == 'Sí'])
Aprendizaje Automático No Supervisado 18
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 9. Detección de datos anómalos utilizando T-Score. Fuente: elaboración propia.
A continuación, veremos el vídeo Métodos estadísticos utilizados para detectar
anomalías.
Aprendizaje Automático No Supervisado 19
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=3635fb20-9410-
4cc7-8157-b1bf001bf30b
Aprendizaje Automático No Supervisado 20
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
8.3. Algoritmos basados en distancia
Los métodos basados en distancia detectan anomalías midiendo la distancia entre
puntos de datos en el espacio de características. La idea principal es que los puntos
de datos que están lejos de otros puntos se consideran anomalías.
Principios básicos
▸ Distancia euclidiana: a menudo se usa para medir la distancia entre puntos en el
espacio de características.
▸ Distancia al vecino más cercano: los puntos de datos que tienen una distancia
mayor que un umbral a su vecino más cercano se consideran anomalías.
▸ Distancia media a k-vecinos más cercanos: similar al anterior, pero considera la
distancia media a los k-vecinos más cercanos para determinar si un punto es una
anomalía.
Métodos comunes basados en distancia
k-Nearest Neighbors (k-NN) para detección de anomalías
▸ Detecta anomalías basándose en la distancia a los k vecinos más cercanos.
▸ Cómo funciona:
• Calcular distancias: calcula la distancia de cada punto a sus k vecinos más
cercanos.
• Determinar umbral: define un umbral de distancia.
• Detección de anomalías: los puntos cuya distancia a sus k vecinos más cercanos
excede el umbral se consideran anomalías.
Distance-Based Outlier Detection (DBOD)
Aprendizaje Automático No Supervisado 21
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Detecta anomalías considerando la distancia a un conjunto de vecinos.
▸ Cómo funciona:
• Definir vecinos: para cada punto, encuentra sus k vecinos más cercanos.
• Calcular distancia: calcula la distancia al vecino más cercano y a otros vecinos.
• Detección de anomalías: los puntos con las mayores distancias son considerados
anomalías.
Distancia de Mahalanobis
▸ Utiliza la distancia de Mahalanobis para detectar anomalías en datos multivariados
considerando la correlación entre variables.
▸ Cómo funciona:
• Calcular la distancia: usa la media y la covarianza de los datos para calcular la
distancia de Mahalanobis.
• Detección de anomalías: los puntos con una distancia de Mahalanobis alta se
consideran anomalías.
Métodos de distancia basados en agrupamiento
▸ Usa algoritmos de clustering (como K-Means) para detectar anomalías basado en la
distancia a los centroides de los clústeres.
▸ Cómo funciona:
• Aplicar clustering: aplica un algoritmo de clustering para agrupar los datos.
• Calcular distancias: calcula la distancia de cada punto al centroide de su clúster.
• Detección de anomalías: los puntos con grandes distancias a sus centroides son
considerados anomalías.
Aprendizaje Automático No Supervisado 22
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Aprendizaje Automático No Supervisado 23
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
8.4. Algoritmos basados en densidad
Los algoritmos basados en densidad identifican anomalías detectando puntos en el
espacio de datos que están en regiones de baja densidad. Los puntos de datos que
no tienen suficientes vecinos cercanos o están significativamente alejados de otros
puntos se consideran anomalías. Tienen en cuenta lo siguiente:
▸ La densidad local de un punto se calcula considerando su proximidad a otros
puntos. Los puntos en áreas de baja densidad se consideran anomalías.
▸ Los puntos que tienen una densidad significativamente menor que la densidad
media de sus vecinos se consideran anomalías.
Los algoritmos más comunes son: Local Outlier Factor (LOF), Density-Based Spatial
Clustering of Applications with Noise (DBSCAN) y One-Class SVM con Kernel
Gaussiano (RBF).
Veamos en detalle el DBSCAN y el LOF:
DBSCAN
Una simple analogía nos ayuda a entender cómo funciona DBSCAN para detectar
anomalías. Imaginemos que tenemos un montón de datos dibujados en un mapa y
queremos encontrar los que son raros o no encajan en el grupo.
Algoritmo
Vamos a ver el paso a paso del algoritmo:
▸ Comenzamos seleccionando aleatoriamente un punto de datos.
▸ Definimos un radio ϵ y un número mínimo de puntos.
▸ Verifiquemos los puntos vecinos. Examinemos los puntos de datos dentro del radio
Aprendizaje Automático No Supervisado 24
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
definido alrededor del punto seleccionado.
▸ Si hay al menos tantos puntos como lo definimos inicialmente dentro de un radio
épsilon, consideramos que el punto seleccionado y los puntos cercanos conforman
un grupo.
▸ Ahora, se repite el proceso con cada punto dentro del grupo recién formado. Si se
encuentran puntos adicionales los agregamos al grupo. Continuamos de forma
iterativa, expandiendo el grupo hasta que no se puedan agregar más puntos.
▸ Identificación de valores atípicos o ruido. Cualquier punto que este fuera del grupo
después del proceso de expansión se etiqueta como valor atípico o ruido.
Imaginemos que estamos en un campo con un grupo de personas
dispersas. Algunas personas están juntas y otras están solas. DBSCAN
nos ayuda a identificar dos cosas (Hiraltalsaniya, 2023):
Grupos de jugadores: es como si cogiésemos a una persona cualquiera,
le ponemos un hula hoop imaginario simulando una distancia máxima y
comprobamos cuántas personas más hay dentro de ese hula hoop. Si el
número de personas es suficiente, se conformaría el grupo.
Jugadores solitarios: una vez conformado el grupo, se elige una persona
dentro del grupo y se le coloca un hula hoop y comprobamos si hay más
personas dentro. Las personas que están dentro del hula hoop se agregan
al grupo y el proceso se continúa hasta que no existan más personas para
agregar.
Ahora viene lo interesante, cualquier persona que no esté en un grupo, es
un caso atípico o jugador en solitario.
A continuación, vamos a poner un ejemplo de implementación en Python:
Aprendizaje Automático No Supervisado 25
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn.datasets import make_blobs
from sklearn.preprocessing import StandardScaler
# Generación de datos sintéticos
centers = [[0, 0], [5, 5]]
X, labels_true = make_blobs(n_samples=300, centers=centers,
cluster_std=0.5, random_state=0)
# Añadir ruido (anomalías)
np.random.seed(0)
X = np.vstack([X, np.random.uniform(low=-5, high=10, size=(20, 2))])
# Escalar los datos
X = StandardScaler().fit_transform(X)
# Aplicación del algoritmo DBSCAN
db = DBSCAN(eps=0.3, min_samples=10).fit(X)
labels = db.labels_
# Identificación de núcleos y ruido
core_samples_mask = np.zeros_like(labels, dtype=bool)
core_samples_mask[db.core_sample_indices_] = True
n_clusters = len(set(labels)) - (1 if -1 in labels else 0)
n_noise = list(labels).count(-1)
print(f'Número de clusters estimados: {n_clusters}')
print(f'Número de puntos de ruido: {n_noise}')
# Visualización de los resultados
unique_labels = set(labels)
colors = [plt.cm.Spectral(each) for each in np.linspace(0, 1,
len(unique_labels))]
for k, col in zip(unique_labels, colors):
if k == -1:
# Negro para el ruido.
col = [0, 0, 0, 1]
class_member_mask = (labels == k)
xy = X[class_member_mask & core_samples_mask]
plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
markeredgecolor='k', markersize=14)
xy = X[class_member_mask & ~core_samples_mask]
plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
markeredgecolor='k', markersize=6)
plt.title('Clusters detectados por DBSCAN')
Aprendizaje Automático No Supervisado 26
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
plt.show()
Figura 10. Detección de datos anómalos utilizando DBSCAN. Fuente: elaboración propia.
A continuación, veremos el vídeo DBSCAN para detectar anomalías.
Aprendizaje Automático No Supervisado 27
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=0f32b4f1-1a0f-
4a0a-9e9f-b1bf00257807
Local Outlier Factor (LOF)
El LOF mide la densidad local de un punto en comparación con la densidad de sus
vecinos más cercanos. Detecta anomalías en datos de alta dimensión y en clústeres
de diferentes densidades.
¿Cómo funciona?
▸ Distancia k-vecino más cercano: para cada punto, se calcula la distancia al k-
ésimo vecino más cercano.
▸ Densidad local: se calcula la densidad local de un punto como la inversa de la
distancia promedio a sus k vecinos más cercanos.
▸ Factor de outlier local (LOF): compara la densidad local del punto con la densidad
local de sus vecinos. Un LOF significativamente mayor que 1 indica una anomalía.
Ejemplo en Python
from sklearn.neighbors import LocalOutlierFactor
import numpy as np
# Generar datos de ejemplo
np.random.seed(0)
data = np.random.normal(50, 10, (100, 2))
# Añadir algunas anomalías
data = np.append(data, [[100, 100], [110, 110], [120, 120]], axis=0)
# Aplicar LOF para detección de anomalías
lof = LocalOutlierFactor(n_neighbors=20)
outlier_labels = lof.fit_predict(data)
# Los puntos con etiqueta -1 son anomalías
anomalías = data[outlier_labels == -1]
Aprendizaje Automático No Supervisado 28
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
print(anomalías)
Figura 11. Detección de datos anómalos utilizando LOF. Fuente: elaboración propia.
Aprendizaje Automático No Supervisado 29
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
8.5. Isolation Forest
Existen otros métodos como el Isolation Forest que no están basados ni en distancia
ni en densidad. Es un algoritmo de aprendizaje automático no supervisado. Como su
nombre lo indica, es un método basado en árboles de decisión, similar al Random
Forest.
La idea principal del Isolation Forest se basa en que las anomalías son datos «poco
frecuentes» y «diferentes» que se aíslan fácilmente. Es decir, se necesitan pocas
particiones para aislar una anomalía (Liu, Ting y Zhou, 2008).
Algoritmo
Supongamos que tenemos los siguientes puntos:
Figura 12. Paso 1, algoritmo Isolation Forest. Fuente: elaboración propia.
Aprendizaje Automático No Supervisado 30
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Se crean múltiples árboles de aislamiento (isolation trees). Y en cada uno de los
árboles se selecciona aleatoriamente una característica y un valor de corte para
particionar el espacio.
Por ejemplo, un primer árbol selecciona una dimensión de forma aleatoria y se
dividen aleatoriamente los datos a lo largo de la dimensión. En la Figura 13 se puede
observar una división sobre el eje X.
Figura 13. Selección aleatoria de dimensión y primera división de los datos. Fuente: elaboración propia.
Cada espacio define su propio subárbol. En el caso de la Figura 13, el corte separa
un punto solitario del resto del conjunto. Como se muestra en la Figura 14.
Aprendizaje Automático No Supervisado 31
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 14. Subárbol generado a partir de la primera división sobre el eje X de los datos. Fuente:
elaboración propia.
Veamos otro ejemplo de un segundo árbol donde se seleccionan divisiones
diferentes. En la Figura 15 se puede ver como la primera división no aísla el valor
atípico.
Aprendizaje Automático No Supervisado 32
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 15. División de otro subárbol sobre el eje X. Fuente: elaboración propia.
En el segundo caso, el árbol tiene dos nodos, uno con los puntos de la izquierda y
otro con los puntos de la derecha, como se muestra en la Figura 16.
Aprendizaje Automático No Supervisado 33
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 16. Segundo subárbol generado a partir de la división realizada en el eje X. Fuente: elaboración
propia.
Este proceso se realiza recursivamente hasta que todos los puntos del conjunto de
datos estén aislados o se llegue a la profundidad máxima establecida como
parámetro.
Aprendizaje Automático No Supervisado 34
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 17. Segunda división realizada sobre el eje X y subárbol resultante. Fuente:
elaboración propia.
Las instancias que quedan aisladas más rápidamente suelen ser anomalías,
requieren menos particiones.
La profundidad promedio en las que una observación finaliza en todos los árboles es
la que se utiliza para calcular la puntuación de una anomalía. Las puntuaciones bajas
indican que la observación fue aislada rápidamente, y, por ende, es muy probable
Aprendizaje Automático No Supervisado 35
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
que se trate de una anomalía. En la Figura 18 creamos un ejemplo hipotético donde
analizamos una observación y contamos el número de divisiones en cada árbol antes
del aislamiento definitivo, promediamos y ese es el puntuaje de anomalía que se le
asigna.
Figura 18. Promedio de divisiones de una observación en diferentes árboles. Fuente: elaboración propia.
Veamos un ejemplo de su implementación en Python:
import numpy as np
import pandas as pd
from sklearn.ensemble import IsolationForest
import matplotlib.pyplot as plt
# Crear un DataFrame con datos sintéticos
np.random.seed(42)
data = np.random.normal(0, 1, 100).tolist() # Datos normales
data.extend([10, 15, -10, -15]) # Añadir anomalías
df = pd.DataFrame(data, columns=['value'])
# Visualizar los datos
plt.figure(figsize=(10, 6))
plt.plot(df['value'], label='Value')
plt.title('Datos Sintéticos con Anomalías')
plt.xlabel('Índice')
plt.ylabel('Valor')
plt.legend()
Aprendizaje Automático No Supervisado 36
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
plt.show()
# Ajustar el modelo Isolation Forest
model = IsolationForest(contamination=0.1, random_state=42) # Ajustar el
parámetro contamination según tus necesidades
df['anomaly_score'] = model.fit_predict(df[['value']])
# Filtrar anomalías
df['anomaly'] = df['anomaly_score'] == -1
# Mostrar los resultados
print(df)
# Visualizar resultados
plt.figure(figsize=(10, 6))
plt.plot(df['value'], label='Value')
plt.scatter(df[df['anomaly']].index, df[df['anomaly']]['value'],
color='red', label='Anomaly')
plt.title('Detección de Anomalías usando Isolation Forest')
plt.xlabel('Índice')
plt.ylabel('Valor')
plt.legend()
plt.show().
Aprendizaje Automático No Supervisado 37
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
8.6. Cuaderno de ejercicios
Ejercicio 1. Detección de anomalías con Z-Score
El Z-Score es una técnica estadística utilizada para identificar anomalías. Esta
técnica calcula cuántas desviaciones estándar se aleja un punto de datos de la
media del conjunto de datos. Con los siguientes datos sintéticos generados en
Python responde a las preguntas planteadas.
import numpy as np
# Generación de datos sintéticos
np.random.seed(42)
data = np.random.normal(0, 1, 100) # 100 datos con distribución normal
data = np.append(data, [8, -8, 10, -10]) # Añadir algunas anomalías
▸ Calcula el Z-Score para cada punto de datos en el conjunto.
▸ Identifica los puntos de datos que se consideran anomalías usando un umbral de 3
desviaciones estándar.
▸ ¿Cuáles son las anomalías detectadas y por qué se consideran como tales?
Solución
1. Calcular el Z-Score:
import numpy as np
from scipy import stats
# Generación de datos sintéticos
np.random.seed(42)
data = np.random.normal(0, 1, 100)
data = np.append(data, [8, -8, 10, -10])
# Calcular el Z-Score
z_scores = stats.zscore(data)
2. Identificar anomalías con umbral de 3 desviaciones estándar:
Aprendizaje Automático No Supervisado 38
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
threshold = 3
anomalies = np.where(np.abs(z_scores) > threshold)
3. Anomalías detectadas:
detected_anomalies = data[anomalies]
print(f'Anomalías detectadas: {detected_anomalies}')
Anomalías detectadas: [ 8. -8. 10. -10.].
Los valores que se encuentran a más de 3 desviaciones estándar de la media son
considerados anomalías. En este caso, los valores 8, -8, 10 y -10 son detectados
como anomalías.
Ejercicio 2. Detección de anomalías con media móvil
La media móvil es un método utilizado para analizar series temporales. Ayuda a
suavizar las fluctuaciones de corto plazo y destacar las tendencias de largo plazo.
Con los datos sintéticos generados en Python responde a las siguientes preguntas:
▸ Calcula la media móvil para la serie temporal usando una ventana de tamaño 5.
▸ Identifica las anomalías en los datos comparando cada punto con la media móvil y
usando un umbral de 2 desviaciones estándar.
▸ ¿Qué puntos de datos se consideran anomalías y cuál es la razón?
import numpy as np
import matplotlib.pyplot as plt
# Generación de datos sintéticos de una serie temporal
np.random.seed(0)
data = np.random.normal(0, 1, 100) # 100 datos con distribución normal
data[50] = 8 # Añadir anomalías
data[70] = -8
# Definir la ventana para la media móvil
window_size = 5
Aprendizaje Automático No Supervisado 39
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Solución
1. Calcular la media móvil para la serie temporal usando una ventana de tamaño 5.
import numpy as np
import matplotlib.pyplot as plt
# Generación de datos sintéticos de una serie temporal
np.random.seed(0)
data = np.random.normal(0, 1, 100)
data[50] = 8
data[70] = -8
# Definir la ventana para la media móvil
window_size = 5
rolling_mean = np.convolve(data, np.ones(window_size)/window_size,
mode='valid')
2. Identificar las anomalías en los datos comparando cada punto con la media móvil y
usando un umbral de 2 desviaciones estándar.
rolling_std = np.array([np.std(data[i:i+window_size]) for i in
range(len(data) - window_size + 1)])
threshold = 2
anomalies = [i + window_size - 1 for i in range(len(rolling_mean)) if
np.abs(data[i + window_size - 1] - rolling_mean[i]) > threshold *
rolling_std[i]]
3. ¿Qué puntos de datos se consideran anomalías y cuál es la razón?
detected_anomalies = data[anomalies]
print(f'Anomalías detectadas: {detected_anomalies}')
Anomalías detectadas: [ 8. -8.].
Los puntos de datos que se desvían significativamente de la media móvil, más de 2
desviaciones estándar, son considerados anomalías. En este caso, los valores 8 y -8
son detectados como anomalías.
Ejercicio 3. Detección de anomalías con DBSCAN
Aprendizaje Automático No Supervisado 40
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
DBSCAN (Density-Based Spatial Clustering of Applications with Noise) es un
algoritmo de agrupamiento que identifica anomalías basándose en la densidad de
puntos de datos.
Con los datos sintéticos generados en Python responde a las siguientes preguntas:
▸ ¿Cuántos clústeres se han detectado? ¿Cuántos puntos se consideran ruido
(anomalías)?
▸ Explica cómo DBSCAN diferencia entre puntos de datos densamente agrupados y
puntos aislados.
▸ Identifica y lista los puntos de datos considerados como anomalías.
from sklearn.datasets import make_blobs
from sklearn.cluster import DBSCAN
import numpy as np
# Generación de datos sintéticos
centers = [[0, 0], [5, 5]]
X, _ = make_blobs(n_samples=300, centers=centers, cluster_std=0.5,
random_state=0)
X = np.vstack([X, np.random.uniform(low=-5, high=10, size=(20, 2))]) #
Añadir ruido
# Aplicación del algoritmo DBSCAN
db = DBSCAN(eps=0.3, min_samples=10).fit(X)
labels = db.labels_
Solución
1. ¿Cuántos clústeres se han detectado? ¿Cuántos puntos se consideran ruido
(anomalías)?
from sklearn.datasets import make_blobs
from sklearn.cluster import DBSCAN
import numpy as np
# Generación de datos sintéticos
centers = [[0, 0], [5, 5]]
Aprendizaje Automático No Supervisado 41
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
X, _ = make_blobs(n_samples=300, centers=centers, cluster_std=0.5,
random_state=0)
X = np.vstack([X, np.random.uniform(low=-5, high=10, size=(20, 2))])
# Aplicación del algoritmo DBSCAN
db = DBSCAN(eps=0.3, min_samples=10).fit(X)
labels = db.labels_
n_clusters = len(set(labels)) - (1 if -1 in labels else 0)
n_noise = list(labels).count(-1)
2. Explicar cómo DBSCAN diferencia entre puntos de datos densamente agrupados y
puntos aislados.
print(f'Número de clústeres estimados: {n_clusters}')
print(f'Número de puntos de ruido: {n_noise}')
Número de clústeres estimados: 2.
Número de puntos de ruido: 20.
DBSCAN detecta 2 clústeres y 20 puntos de ruido. Los puntos de ruido son
considerados anomalías, ya que no pertenecen a ningún clúster.
3. Identificar y listar los puntos de datos considerados como anomalías.
anomalies = X[labels == -1]
print(f'Anomalías detectadas: {anomalies}')
Ejercicio 4. Detección de anomalías con Local Outlier Factor (LOF)
El Local Outlier Factor (LOF) mide la densidad local de un punto comparándola con
la densidad de sus vecinos más cercanos.
Con los datos sintéticos generados en Python responde a las siguientes preguntas:
▸ ¿Cuántos puntos de datos se consideran anomalías según LOF?
▸ Explica brevemente cómo funciona el algoritmo LOF y cómo identifica anomalías.
▸ Lista las coordenadas de los puntos de datos que fueron detectados como
Aprendizaje Automático No Supervisado 42
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
anomalías.
from sklearn.neighbors import LocalOutlierFactor
import numpy as np
# Generar datos de ejemplo
np.random.seed(42)
data = np.random.normal(50, 10, (100, 2))
data = np.append(data, [[100, 100], [110, 110], [120, 120]], axis=0) #
Añadir algunas anomalías
# Aplicar LOF para detección de anomalías
lof = LocalOutlierFactor(n_neighbors=20)
outlier_labels = lof.fit_predict(data)
Solución
1. ¿Cuántos puntos de datos se consideran anomalías según LOF?
from sklearn.neighbors import LocalOutlierFactor
import numpy as np
# Generar datos de ejemplo
np.random.seed(42)
data = np.random.normal(50, 10, (100, 2))
data = np.append(data, [[100, 100], [110, 110], [120, 120]], axis=0)
# Aplicar LOF para detección de anomalías
lof = LocalOutlierFactor(n_neighbors=20)
outlier_labels = lof.fit_predict(data)
2. Explicar brevemente cómo funciona el algoritmo LOF y cómo identifica anomalías.
anomalies = data[outlier_labels == -1]
print(f'Anomalías detectadas: {anomalies}')
Los puntos con una etiqueta de -1 son considerados anomalías por LOF debido a
que tienen una densidad local significativamente menor que sus vecinos.
3. Listar las coordenadas de los puntos de datos que fueron detectados como
anomalías.
Aprendizaje Automático No Supervisado 43
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Anomalías detectadas: [[100. 100.], [110. 110.] y [120. 120.]].
Aprendizaje Automático No Supervisado 44
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
8.7. Referencias bibliográficas
Desai, U. (2023, abril 28). Unsupervised machine learning with anomaly detection.
M e d i u m . https://utsavdesai26.medium.com/unsupervised-machine-learning-with-
anomaly-detection-5fae4fd2c957
Hiraltalsaniya. (2023, diciembre 22). Anomaly detection with unsupervised machine
learning. Medium. https://medium.com/simform-engineering/anomaly-detection-with-
unsupervised-machine-learning-3bcf4c431aff
Indira. (2020, septiembre 25). Machine Learning for Anomaly Detection- The
Mathematics Behind It! Medium. https://medium.com/srm-mic/machine-learning-for-
anomaly-detection-the-mathematics-behind-it-7a2c3b5a755
Liu, F. T., Ting, K. M. y Zhou, Z. H. (2008). Isolation Forest. Eighth IEEE International
Conference on Data Mining, 413-422. https://ieeexplore.ieee.org/document/4781136
Aprendizaje Automático No Supervisado 45
Tema 8. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
A fondo
¿Cuáles son los algoritmos más comunes de
aprendizaje no supervisado para detectar
anomalías?
LinkedIn. (s. f.). ¿Cuáles son los algoritmos de detección de anomalías no
supervisados más comunes? https://www.linkedin.com/advice/1/what-most-common-
unsupervised-anomaly-detection-qqdvf
Describe las técnicas más comunes de detección de anomalías no supervisadas
incluyen varios algoritmos eficaces y ampliamente utilizados.
Aprendizaje Automático No Supervisado 46
Tema 8. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
Detección de anomalías en tiempo real
Moffitt, J. (2024, abril 1). Real-Time Anomaly Detection: Use Cases and Code
Examples. Tinybird. https://www.tinybird.co/blog-posts/real-time-anomaly-detection
Se muestran algunos fragmentos de código de ejemplo que puede utilizar para
inspirar su sistema de detección de anomalías en tiempo real.
Aprendizaje Automático No Supervisado 47
Tema 8. A fondo
© Universidad Internacional de La Rioja (UNIR)
Test
1. ¿Qué es una anomalía en el contexto del análisis de datos?
A. Un valor que es extremadamente común en el conjunto de datos.
B. Un valor que se ajusta perfectamente al modelo de datos.
C. Un valor que se desvía significativamente del comportamiento esperado
del conjunto de datos.
D. Un valor que se encuentra dentro del rango intercuartílico.
2. ¿Cuál de los siguientes métodos se utiliza comúnmente para detectar anomalías
en series temporales?
A. K-Means clustering.
B. PCA.
C. Media móvil.
D. Árboles de decisión.
3. ¿Qué mide el Z-Score en un conjunto de datos?
A. La distancia de un punto de datos al centroide más cercano.
B. El número de desviaciones estándar que un punto de datos se aleja de la
media del conjunto de datos.
C. La densidad local de un punto de datos en comparación con sus vecinos
más cercanos.
D. La correlación entre dos variables en un conjunto de datos.
4. ¿Cuál de los siguientes es un algoritmo basado en densidad para la detección de
anomalías?
A. K-Nearest Neighbors (k-NN).
B. Support Vector Machines (SVM).
C. DBSCAN.
D. Árboles de regresión.
Aprendizaje Automático No Supervisado 48
Tema 8. Test
© Universidad Internacional de La Rioja (UNIR)
Test
5. ¿Cuál es una desventaja común de los algoritmos de detección de anomalías?
A. No pueden manejar grandes volúmenes de datos.
B. Requieren siempre datos etiquetados.
C. Pueden generar falsos positivos.
D. No son compatibles con técnicas de clustering.
6. ¿Qué técnica estadística se basa en suponer que los datos siguen una
distribución normal?
A. Método del percentil.
B. DBSCAN.
C. Z-Score.
D. LOF (Local Outlier Factor).
7. En el contexto de detección de anomalías, ¿qué es un «outlier»?
A. Un valor promedio en el conjunto de datos.
B. Un valor que está en la mediana del conjunto de datos.
C. Un valor que se encuentra dentro del rango intercuartílico.
D. Un valor que se desvía significativamente del resto de los datos.
8. ¿Qué tipo de algoritmo de detección de anomalías utiliza tanto datos etiquetados
como no etiquetados?
A. Algoritmos supervisados.
B. Algoritmos no supervisados.
C. Algoritmos semisupervisados.
D. Algoritmos basados en reglas.
Aprendizaje Automático No Supervisado 49
Tema 8. Test
© Universidad Internacional de La Rioja (UNIR)
Test
9. ¿Cuál de los siguientes métodos es más adecuado para detectar anomalías en
datos multivariados considerando la correlación entre variables?
A. K-Means clustering.
B. Mahalanobis distance.
C. Media móvil.
D. Árboles de decisión.
10. ¿Cuál es una ventaja de la detección temprana de anomalías?
A. Reduce la necesidad de preprocesamiento de datos.
B. Mejora la precisión de los modelos sin eliminar valores atípicos.
C. Ayuda a identificar problemas potenciales antes de que se vuelvan críticos.
D. Elimina la necesidad de técnicas de aprendizaje supervisado.
Aprendizaje Automático No Supervisado 50
Tema 8. Test
© Universidad Internacional de La Rioja (UNIR)
Tema 9
Aprendizaje Automático No Supervisado
Tema 9. Introducción al
aprendizaje por refuerzo
Índice
Esquema
Ideas clave
9.1. Introducción y objetivos
9.2. Definición de agente
9.3. Procesos de decisión de Markov (MDP)
9.4. Aprendizaje por refuerzo y sus aplicaciones
9.5. Cuaderno de ejercicios
9.6. Referencias bibliográficas
A fondo
¿Qué es el aprendizaje por refuerzo y cómo trabaja?
Aprendizaje por refuerzo a partir de la retroalimentación
humana (RLHF).
Test
Esquema
Aprendizaje Automático No Supervisado 3
Tema 9. Esquema
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
9.1. Introducción y objetivos
E l aprendizaje por refuerzo (reinforcement learning, RL) es una rama del
aprendizaje automático que se centra en cómo los agentes deben tomar decisiones
para maximizar alguna noción de recompensa acumulada a lo largo del tiempo. A
diferencia de otros enfoques de aprendizaje, el RL permite a los agentes aprender a
través de la interacción directa con su entorno, ajustando sus estrategias en función
de las consecuencias de sus acciones (Kaelbling, Littman y Moore, 1996;
Szepesvári, 2022).
En este contexto, los agentes se definen como programas de software capaces de
operar de manera autónoma, percibiendo su entorno mediante sensores y actuando
sobre él mediante actuadores. Estos agentes son fundamentales en RL, ya que son
los responsables de experimentar, aprender y mejorar continuamente sus decisiones
para maximizar las recompensas.
El concepto de agente ha evolucionado desde una entidad aislada que opera de
forma independiente a un componente integral de sistemas más amplios, donde
múltiples agentes autónomos interactúan para formar un sistema global. Esta
evolución ha llevado a que el diseño de agentes sea visto tanto desde la perspectiva
de la ingeniería de software como de la inteligencia artificial.
Los objetivos de este tema son:
▸ Definir y comprender los agentes inteligentes: entender qué son los agentes
inteligentes, sus características principales y cómo interactúan con su entorno para
tomar decisiones autónomas.
▸ Explorar los componentes de los procesos de decisión de Markov (MDP):
analizar los componentes esenciales de los MDP, tales como estados, acciones,
recompensas y transiciones, y cómo estos proporcionan una estructura matemática
Aprendizaje Automático No Supervisado 4
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
para modelar problemas de decisión en RL.
▸ Aplicar las ecuaciones de Bellman: comprender y aplicar las ecuaciones de
Bellman para descomponer problemas de optimización a largo plazo en
subproblemas más manejables, facilitando la solución de MDPs y el desarrollo de
políticas óptimas.
▸ Explorar aplicaciones prácticas de RL: examinar diversas aplicaciones del
aprendizaje por refuerzo en áreas como conducción autónoma, automatización
industrial, comercio y finanzas, procesamiento del lenguaje natural, atención
sanitaria e ingeniería, demostrando su versatilidad y potencial en la solución de
problemas complejos en el mundo real.
Aprendizaje Automático No Supervisado 5
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
9.2. Definición de agente
Los agentes son fundamentales en el RL, ya que son los encargados de interactuar
con el entorno, aprender de las consecuencias de sus acciones y mejorar su
comportamiento para maximizar las recompensas a lo largo del tiempo.
Un agente es un tipo de programa software cuya función es observar el entorno y
reaccionar ante él, operando de forma autónoma. El proceso parte de la respuesta a
partir de unos datos de entrada, de tal manera que se puede interpretar lo que se
observa, razonar una respuesta, y luego aplicarla. De esta manera, es posible
considerar lo siguiente:
«Los agentes representan el nuevo paradigma más importante para el
desarrollo de software desde la orientación a objetos» (McBurney,
2004).
El concepto de agente ha pasado de ser un ente aislado que opera de forma
autónoma a un elemento más de un sistema en el que diferentes sistemas
autónomos conforman un sistema global. El concepto de agente desde la perspectiva
de la ingeniería de software se plantea más como un elemento de diseño de software
que como un elemento propio de la inteligencia artificial.
El agente percibe el entorno mediante sensores (reales o virtuales) y actúa sobre él
mediante actuadores (de nuevo, reales o virtuales) (ver Figura 1).
Aprendizaje Automático No Supervisado 6
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 1. Componentes que conforman un agente. Fuente: elaboración propia.
Las características de un agente inteligente son:
▸ Autonomía: capacidad para operar sin intervención humana directa y controlar sus
acciones y estado internos.
▸ Percepción y acción: utiliza sensores para obtener información del entorno y
actuadores para interactuar con él.
▸ Objetivo o función de recompensa: posee un criterio claro de éxito o recompensa
que guía sus decisiones y acciones.
▸ Adaptabilidad: capacidad de modificar su comportamiento basado en experiencias
pasadas o nueva información recibida del entorno.
▸ Persistencia: opera de manera continua a lo largo del tiempo.
Existen diferentes tipos de agentes inteligentes:
▸ Agente reactivo simple: toma decisiones basadas únicamente en la percepción
actual del entorno. Ejemplo: un termostato.
▸ Agente basado en modelo: mantiene un modelo interno del entorno para tomar
Aprendizaje Automático No Supervisado 7
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
decisiones más informadas. Ejemplo: un robot de limpieza que recuerda los
obstáculos.
▸ Agente basado en objetivos: actúa para cumplir ciertos objetivos específicos, no
solo para reaccionar. Ejemplo: un agente de búsqueda en un juego.
▸ Agente basado en utilidad: toma decisiones basadas en la maximización de una
función de utilidad que puede incorporar múltiples objetivos y prioridades. Ejemplo:
sistemas de recomendación personalizados.
A continuación, veremos el vídeo Implementación de aprendizaje por refuerzo a
través de un ejemplo.
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=4937a871-3bf9-
43b2-af16-b1c500f89a95
Aprendizaje Automático No Supervisado 8
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
9.3. Procesos de decisión de Markov (MDP)
Un MDP es un marco matemático utilizado para modelar la toma de decisiones en
situaciones donde los resultados son en parte aleatorios y en parte bajo el control de
un agente (Puterman, 1990; Wei, Xu, Lan, Guo y Cheng, 2017).
Los MDPs se componen de estados, acciones, recompensas y transiciones de
estado.
Son esenciales en el RL porque proporcionan la estructura matemática para modelar
y resolver problemas en los que un agente debe aprender a tomar decisiones
óptimas a través de la interacción con su entorno.
Componentes
▸ Estados (S): representan todas las posibles situaciones en las que puede
encontrarse el agente.
▸ Acciones (A): conjunto de todas las acciones posibles que el agente puede realizar.
▸ Transiciones (T): probabilidades de pasar de un estado a otro dado una acción
específica. Formalmente, , donde es el estado actual,
es la acción tomada y es el estado siguiente.
▸ Recompensas (R): recompensa recibida después de transitar de un estado a otro,
dado una acción. Formalmente, .
▸ Política (π): estrategia que el agente sigue para decidir qué acción tomar en cada
estado.
El paso a paso en los procesos de decisión de Markov se muestra en la Figura 2.
Aprendizaje Automático No Supervisado 9
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 2. Proceso de solución en MDP. Fuente: elaboración propia.
Política óptima y política estacionaria
Política óptima
En el contexto de la teoría de decisiones y el aprendizaje por refuerzo, una política
(denotada usualmente como π) define una estrategia para elegir acciones en cada
estado con el fin de maximizar alguna medida de rendimiento a largo plazo,
generalmente la utilidad.
La política óptima, π*, es aquella que maximiza el rendimiento esperado desde
cualquier estado inicial. Es decir, es la mejor estrategia posible que un agente puede
seguir para obtener el mayor beneficio esperado.
Política estacionaria
Una política es estacionaria si las decisiones que se toman no dependen del tiempo,
sino únicamente del estado actual. Esto significa que, independientemente de
cuándo se encuentra el agente en un determinado estado, la acción que se tomará
será siempre la misma.
Las políticas estacionarias son importantes porque simplifican el análisis y la
implementación de algoritmos en el aprendizaje por refuerzo.
Utilidad
La utilidad es una medida del valor o satisfacción que un agente obtiene de un
Aprendizaje Automático No Supervisado 10
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
determinado resultado. Juega un papel crucial en la definición y evaluación de
políticas, especialmente en contextos de decisión secuencial.
Utilidad aditiva
La utilidad aditiva asume que el valor total de una secuencia de decisiones es
simplemente la suma de las utilidades de cada decisión individual.
Esta suposición simplifica mucho los cálculos y es adecuada en situaciones donde
los efectos de las decisiones no se interrelacionan de manera compleja. La fórmula
de la utilidad aditiva está expresada en la siguiente ecuación.
Utilidad ponderada
En la utilidad ponderada, cada utilidad individual se multiplica por un factor de
ponderación antes de ser sumada.
Esta técnica permite dar más importancia a ciertas decisiones o resultados sobre
otros, reflejando prioridades o preferencias específicas. La fórmula de la utilidad
ponderada está expresada en la siguiente ecuación.
Utilidad descontada
La utilidad descontada introduce la idea de que las recompensas futuras valen
menos que las recompensas inmediatas. Esto se representa con un factor de
descuento γ (0 ≤ γ < 1). La fórmula de la utilidad ponderada está expresada en la
siguiente ecuación.
Aprendizaje Automático No Supervisado 11
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
La utilidad total en un proceso de decisión es la suma de las utilidades descontadas
de todas las decisiones futuras. Formalmente, si es la recompensa en el tiempo
, la utilidad total es . Este concepto es fundamental en muchos
algoritmos de aprendizaje por refuerzo, como el Q-learning y el algoritmo de política
de valor, porque ayuda a equilibrar la explotación de recompensas inmediatas con la
exploración de recompensas futuras.
Aprendizaje Automático No Supervisado 12
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
9.4. Aprendizaje por refuerzo y sus aplicaciones
E l aprendizaje por refuerzo (reinforcement learning, RL) es una rama del
aprendizaje automático que se centra en cómo los agentes deben tomar decisiones
para maximizar alguna noción de recompensa acumulada a lo largo del tiempo. En
este contexto, los agentes aprenden a interactuar con un entorno para descubrir las
mejores estrategias o políticas a seguir. Para entender mejor el aprendizaje por
refuerzo, es esencial familiarizarse con los procesos de decisión de Markov (MDP),
que proporcionan el marco matemático subyacente y que vimos anteriormente.
Las ecuaciones de Bellman juegan un papel fundamental en la solución de MDPs y,
por ende, en el aprendizaje por refuerzo. Estas ecuaciones descomponen el
problema de encontrar la política óptima en subproblemas más pequeños y
manejables.
Ecuaciones de Bellman
Las ecuaciones de Bellman, nombradas en honor al matemático Richard Bellman,
son una formulación matemática que descompone un problema de decisión
secuencial en subproblemas más pequeños y manejables. Estas ecuaciones se
aplican tanto en la optimización estática como dinámica, siendo especialmente útiles
en contextos del aprendizaje por refuerzo.
Antes de abordar las ecuaciones, es útil entender algunos términos clave. Al igual
que los MDP, en las ecuaciones de Bellman existe el concepto de estado, acción,
recompensa y política. Acá se agrega el concepto de valor o utilidad esperada.
▸ Estado (s): la situación actual en la que se encuentra el agente.
▸ Acción (a): una decisión que el agente puede tomar desde un estado.
▸ Recompensa (r): el beneficio inmediato obtenido al tomar una acción en un estado.
Aprendizaje Automático No Supervisado 13
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Valor (V): la utilidad esperada total que se puede obtener a partir de un estado,
siguiendo una política.
▸ Política (π): regla que define qué acción tomar en cada estado.
Donde:
▸ es el valor del estado s siguiendo la política π.
▸ es la recompensa inmediata al tomar la acción a en el estado s.
▸ es el factor de descuento.
▸ es el estado siguiente.
▸ La expectativa E se toma sobre todas las acciones y estados posibles, dado que se
sigue la política π.
Las ecuaciones de Bellman descomponen el problema de optimización a largo plazo
en una serie de decisiones más pequeñas, facilitando su resolución. Son la base
para varios algoritmos de aprendizaje por refuerzo, como el value iteration, policy
iteration y Q-learning. Ayudan a identificar la política óptima que maximiza la
recompensa total esperada en problemas de decisión secuencial.
Imaginemos un agente en un entorno simple con tres estados (A, B, C) y dos
acciones posibles (X, Y). La ecuación de Bellman se utilizaría para actualizar los
valores estimados de cada estado o estado-acción basado en las recompensas
inmediatas y los valores futuros esperados.
Veamos un ejemplo de agente en una cuadrícula.
Ejemplo de agente cuadrícula
Aprendizaje Automático No Supervisado 14
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Supongamos un agente en una cuadrícula de 3x3 que puede moverse en cuatro
direcciones: arriba, abajo, izquierda y derecha. El objetivo del agente es llegar a una
celda de objetivo (recompensa +1) y evitar una celda peligrosa (recompensa -1).
Todas las demás celdas tienen una recompensa de 0. El factor de descuento, γ, es
0.9.
Configuración del problema:
▸ Estados (s): cada celda en la cuadrícula es un estado.
▸ Acciones (a): {Arriba, Abajo, Izquierda, Derecha}.
▸ Recompensas (r): +1 en la celda objetivo y -1 en la celda peligrosa.
▸ 0 en todas las demás celdas.
▸ Factor de descuento (γ): 0.9.
La cuadrícula se ve así:
Tabla 1. Cuadrícula. Fuente: elaboración propia.
Donde S es el estado inicial, G es la celda objetivo y -1 es la celda peligrosa.
Aplicamos las ecuaciones de Bellman.
Primero, inicializamos los valores de estado V(s) a 0 para todas las celdas, excepto
las celdas objetivo y peligrosa, que se inicializan con sus recompensas directas.
Aprendizaje Automático No Supervisado 15
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Tabla 2. Cuadrícula. Fuente: elaboración propia.
Iteración de valores.
Utilizamos la ecuación de Bellman para actualizar los valores de estado
iterativamente hasta que converjan. La ecuación de Bellman para el valor del estado
es:
Donde es la probabilidad de transición al estado dado el estado
actual y la acción . Asumiremos que las transiciones son determinísticas para
este ejemplo.
Primera iteración.
Tomemos un estado no terminal, por ejemplo, la celda (0,1). Evaluamos el valor del
estado V(0,1) considerando las posibles acciones:
▸ Arriba: no es posible (borde de la cuadrícula).
▸ Abajo: transición a (1,1) con V(1,1) = -1.
▸ Izquierda: transición a (0,0) con V(0,0) =0.
▸ Derecha: transición a (0,2) con V(0,2) =1.
Usamos la ecuación de Bellman.
Aprendizaje Automático No Supervisado 16
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
V(0,1)=max{0+0,0+0.9⋅(−1),0+0.9⋅0,0+0.9⋅1}
(0,1)=max{0,−0.9,0,0.9}
V(0,1)=0.9
Actualizamos la tabla:
Tabla 3. Cuadrícula. Fuente: elaboración propia.
Repetimos este proceso para todas las celdas hasta que los valores converjan.
Después de suficientes iteraciones, los valores convergerán a los valores óptimos.
Para nuestro ejemplo, los valores convergentes pueden verse así:
Tabla 4. Cuadrícula. Fuente: elaboración propia.
Una vez que los valores han convergido, podemos derivar la política óptima
seleccionando la acción que maximiza el valor esperado en cada estado. Para cada
estado .
En este ejemplo partimos de la celda (0,0), seguimos con la celda (0,1) y finalizamos
Aprendizaje Automático No Supervisado 17
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
con la celda (0,3) que es la celda objetivo y el camino es el que mayor utilidad nos
proporciona.
A continuación, veremos el vídeo Aplicaciones prácticas del aprendizaje por
refuerzo.
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=85569be3-3884-
4736-841a-b1c501149703
Aplicaciones del aprendizaje por refuerzo (Mwiti, 2023)
Aplicaciones en conducción autónoma
Varios artículos han propuesto el aprendizaje por refuerzo profundo para la
conducción autónoma. En los vehículos autónomos hay varios aspectos a
considerar, como los límites de velocidad en varios lugares, las zonas de conducción
y evitar colisiones, solo por mencionar algunos.
Algunas de las tareas de conducción autónoma en las que se podría aplicar el
Aprendizaje Automático No Supervisado 18
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
aprendizaje por refuerzo incluyen la optimización de trayectorias, la planificación del
movimiento, la trayectoria dinámica, la optimización del controlador y las políticas de
aprendizaje basadas en escenarios para carreteras.
Por ejemplo, el estacionamiento se puede lograr aprendiendo políticas de
estacionamiento automático. El cambio de carril se puede lograr utilizando Q-
learning, mientras que los adelantamientos se pueden implementar aprendiendo una
política de adelantamiento evitando colisiones y manteniendo una velocidad
constante a partir de entonces.
AWS DeepRacer es un coche de carreras autónomo que ha sido diseñado para
probar RL en una pista física. Utiliza cámaras para visualizar la pista y un modelo de
aprendizaje de refuerzo para controlar el acelerador y la dirección (Mwiti, 2023).
Automatización de la industria con aprendizaje por refuerzo
En el refuerzo industrial, se utilizan robots basados en el aprendizaje por refuerzo
para realizar diversas tareas. Los robots pueden realizar tareas que serían peligrosas
para las personas.
Un gran ejemplo es el uso de agentes de inteligencia artificial por parte de Deepmind
para enfriar los centros de datos de Google. Esto llevó a una reducción del 40 % en
el gasto energético. Los centros ahora están totalmente controlados con el sistema
de IA sin necesidad de intervención humana. Obviamente, todavía hay supervisión
por parte de expertos en centros de datos (Olaoye y Potter, 2024). El sistema
funciona de la siguiente manera:
▸ Tomar instantáneas de los datos de los centros de datos cada cinco minutos y
enviarlas a redes neuronales profundas.
▸ Luego predice cómo las diferentes combinaciones afectarán los consumos de
energía futuros.
Aprendizaje Automático No Supervisado 19
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Identificar acciones que conduzcan a un consumo mínimo de energía manteniendo
al mismo tiempo un estándar establecido de criterios de seguridad.
▸ Enviar e implementar estas acciones en el centro de datos.
▸ Las acciones son verificadas por el sistema de control local.
Aplicaciones de aprendizaje por refuerzo en comercio y finanzas
Los modelos de series de tiempo supervisados se pueden utilizar para predecir
ventas futuras, así como para predecir los precios de las acciones. Sin embargo,
estos modelos no determinan la acción a tomar ante un precio de acción en
particular. Un agente de RL puede decidir sobre dicha tarea; si mantener, comprar o
vender. El modelo RL se evalúa utilizando estándares de referencia del mercado
para garantizar que funcione de manera óptima.
Esta automatización aporta coherencia al proceso, a diferencia de los métodos
anteriores en los que los analistas tenían que tomar todas las decisiones. IBM, por
ejemplo, tiene una sofisticada plataforma basada en el aprendizaje por refuerzo que
tiene la capacidad de realizar transacciones financieras. Calcula la función de
recompensa en función de la pérdida o ganancia de cada transacción financiera
(Olaoye y Potter, 2024).
Aprendizaje por refuerzo en PLN (procesamiento del lenguaje natural)
En PLN, RL se puede utilizar para resumir textos, responder preguntas y traducir
automáticamente, solo por mencionar algunos.
Investigadores de la Universidad de Stanford, la Universidad Estatal de Ohio y
Microsoft Research han desarrollado deep RL para su uso en la generación de
diálogos. El RL profundo se puede utilizar para modelar recompensas futuras en un
diálogo de chatbot. Las conversaciones se simulan mediante dos agentes virtuales.
Los métodos de gradiente de políticas se utilizan para recompensar secuencias que
Aprendizaje Automático No Supervisado 20
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
contienen atributos de conversación importantes, como coherencia, informatividad y
facilidad de respuesta (Mwiti, 2023).
Aprendizaje por refuerzo en atención sanitaria
En el sector sanitario, los pacientes pueden recibir tratamiento a partir de políticas
aprendidas de los sistemas RL. RL es capaz de encontrar políticas óptimas utilizando
experiencias previas sin necesidad de información previa sobre el modelo
matemático de sistemas biológicos. Hace que este enfoque sea más aplicable que
otros sistemas basados en control en la atención sanitaria.
La RL en atención médica se clasifica como regímenes de tratamiento dinámico
(DTR) en enfermedades crónicas o cuidados críticos, diagnóstico médico
automatizado y otros dominios generales.
En las DTR, la entrada es un conjunto de observaciones y evaluaciones clínicas de
un paciente. Los resultados son las opciones de tratamiento para cada etapa. Estos
son similares a los estados de RL. La aplicación de RL en DTR es ventajosa porque
es capaz de determinar decisiones dependientes del tiempo para el mejor
tratamiento para un paciente en un momento específico.
El uso de RL en la atención sanitaria también permite mejorar los resultados a largo
plazo al tener en cuenta los efectos retardados de los tratamientos.
RL también se ha utilizado para el descubrimiento y generación de DTR óptimas para
enfermedades crónicas (Olaoye y Potter, 2024).
Aplicaciones del aprendizaje por refuerzo en ingeniería
Facebook ha desarrollado una plataforma de aprendizaje por refuerzo de código
abierto: Horizon. La plataforma utiliza el aprendizaje por refuerzo para optimizar los
sistemas de producción a gran escala. Facebook ha utilizado Horizon internamente
para personalizar sugerencias, entregar notificaciones más significativas a los
Aprendizaje Automático No Supervisado 21
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
usuarios y optimizar la calidad de la transmisión de vídeo.
Otra aplicación del RL es en la visualización de vídeo. Ofrece al usuario un vídeo con
una velocidad de bits baja o alta según el estado de los buffers de vídeo y las
estimaciones de otros sistemas de aprendizaje automático (Mwiti, 2023).
Aprendizaje por refuerzo en recomendación de noticias
Las preferencias de los usuarios pueden cambiar con frecuencia, por lo que
recomendar noticias a los usuarios basándose en reseñas y me gusta podría quedar
obsoleto rápidamente. Con el aprendizaje por refuerzo, el sistema RL puede rastrear
los comportamientos de retorno del lector.
La construcción de dicho sistema implicaría obtener características de noticias,
características de lector, características de contexto y características de noticias de
lector. Las características de las noticias incluyen, entre otras, el contenido, el titular
y el editor. Las características del lector se refieren a cómo el lector interactúa con el
contenido, por ejemplo, hace clic y comparte. Las características de contexto
incluyen aspectos de las noticias como el momento y la actualidad de las noticias.
Luego se define una recompensa en función de estos comportamientos de los
usuarios (Mwiti, 2023).
Aprendizaje Automático No Supervisado 22
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
9.5. Cuaderno de ejercicios
Ejercicio 1. Definición de agentes
Define un agente inteligente y describe las características que lo diferencian de un
programa de software tradicional. Luego, proporciona un ejemplo de un agente
inteligente en un entorno real.
Solución
Un agente inteligente es un programa de software que opera de forma autónoma,
percibe su entorno mediante sensores y actúa sobre él mediante actuadores para
alcanzar ciertos objetivos. Las características que lo diferencian de un programa de
software tradicional incluyen autonomía, percepción y acción, objetivo o función de
recompensa, adaptabilidad y persistencia.
Ejemplo: un robot aspirador en un hogar es un agente inteligente. Utiliza sensores
para detectar obstáculos y suciedad (percepción), y actuadores para moverse y
limpiar (acción). Su objetivo es maximizar la limpieza del área (recompensa). Puede
adaptarse a diferentes configuraciones de muebles y aprender las mejores rutas para
limpiar eficientemente (adaptabilidad y persistencia).
Ejercicio 2. Componentes de los MDP
Describe los componentes de un proceso de decisión de Markov (MDP). Proporciona
un ejemplo simple que ilustre cada uno de estos componentes.
Solución
Un agente en una cuadrícula 3x3 con el objetivo de alcanzar la celda superior
derecha (G):
▸ Estados (S): cada celda en la cuadrícula.
Aprendizaje Automático No Supervisado 23
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Acciones (A): {Arriba, Abajo, Izquierda, Derecha}.
▸ Transiciones (T): probabilidad de moverse a una celda adyacente según la acción
tomada.
▸ Recompensas (R): +1 en la celda objetivo (G), -1 en celdas peligrosas y 0 en otras
celdas.
▸ Política (π): plan para moverse hacia la celda objetivo evitando las celdas
peligrosas.
Ejercicio 3. Ecuaciones de Bellman
Explica la ecuación de Bellman para la utilidad esperada de un estado V(s) y cómo
se aplica en el contexto del aprendizaje por refuerzo. Luego, aplica la ecuación de
Bellman a un estado s en una cuadrícula 2x2 con una celda objetivo (G) y una celda
peligrosa (-1).
Solución
La ecuación de Bellman para la utilidad esperada de un estado V(s) se define como:
, donde γ es el factor
de descuento.
Aplicación (considera una cuadrícula 2x2):
▸ Estados: (0,0), (0,1), (1,0), (1,1).
▸ Recompensas: +1 en (0,1), -1 en (1,0) y 0 en otros.
▸ Factor de descuento γ=0.9.
▸ Para el estado (0,0), evaluamos las posibles acciones (suponiendo transiciones
determinísticas):
Aprendizaje Automático No Supervisado 24
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
•
Arriba: no aplicable.
• Abajo: (1,0) con V(1,0)=−1.
• Izquierda: no aplicable.
• Derecha: (0,1) con V(0,1)=1.
▸ Usamos la ecuación de Bellman:
V(0,0)=max{0+0.9⋅(−1),0+0.9⋅1}=max{−0.9,0.9}=0.9.
Ejercicio 4. Seudocódigo
Proporciona el seudocódigo para un agente que debe aprender a moverse en una
cuadrícula de 2x2 con una celda objetivo (+1) y una celda peligrosa (-1).
Solución
▸ Inicialización: establecer los valores para todas las parejas estado-acción.
▸ Episodios: repetir el proceso para varios episodios.
▸ Selección de acción: elegir una acción basada en la mejor política.
▸ Actualización: actualizar el valor usando la fórmula de Bellman.
▸ Transición: moverse al nuevo estado y repetir hasta alcanzar un estado terminal.
Este algoritmo permite al agente aprender la mejor acción a tomar en cada estado
para maximizar la recompensa total esperada.
Aprendizaje Automático No Supervisado 25
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
9.6. Referencias bibliográficas
Kaelbling, L. P., Littman, M. L. y Moore, A. W. (1996). Reinforcement learning: A
survey. Journal of artificial intelligence research, 4, 237-285.
Mwiti, D. (2023, septiembre 1). 10 Real-life applications of reinforcement learning.
Neptune. https://neptune.ai/blog/reinforcement-learning-applications
Olaoye F. y Potter, K. (2024). Reinforcement Learning and its Real-World
Applications. ReserarchGate. https://www.researchgate.net/publication/379025393
Puterman, M. L. (1990). Markov decision processes. Handbooks in operations
research and management science, 2, 331-434.
Szepesvári, C. (2022). Algorithms for reinforcement learning. Springer nature.
Wei, Z., Xu, J., Lan, Y., Guo, J. y Cheng, X. (2017, August). Reinforcement learning
to rank with Markov decision process. Proceedings of the 40th international ACM
SIGIR conference on research and development in information retrieval, 945-948.
Aprendizaje Automático No Supervisado 26
Tema 9. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
A fondo
¿Qué es el aprendizaje por refuerzo y cómo
trabaja?
Kadari, P. (2024, mayo 26). What is reinforcement learning and how does it work.
Analytics Vidhya. https://www.analyticsvidhya.com/blog/2021/02/introduction-to-
reinforcement-learning-for-beginners/
El aprendizaje por refuerzo (reinforcement learning) es una técnica de machine
learning en la que un agente aprende a tomar decisiones óptimas mediante la
interacción con su entorno, buscando maximizar recompensas acumuladas. Este
proceso implica experimentar acciones, recibir recompensas o penalizaciones, y
ajustar estrategias para mejorar el rendimiento futuro sin intervención humana
directa.
Aprendizaje Automático No Supervisado 27
Tema 9. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
Aprendizaje por refuerzo a partir de la
retroalimentación humana (RLHF).
AWS (s. f.). ¿Qué es el RLHF? https://aws.amazon.com/es/what-is/reinforcement-
learning-from-human-feedback/
El aprendizaje por refuerzo a partir de la retroalimentación humana (RLHF) es una
técnica de machine learning que mejora la precisión de los modelos al incorporar
feedback humano en la función de recompensas. Esto permite que los modelos
realicen tareas de manera más alineada con los objetivos humanos, optimizando su
desempeño y generando respuestas más naturales y satisfactorias en aplicaciones
como chatbots, generación de imágenes y música.
Aprendizaje Automático No Supervisado 28
Tema 9. A fondo
© Universidad Internacional de La Rioja (UNIR)
Test
1. ¿Qué es un agente en el contexto del aprendizaje por refuerzo?
A. Un algoritmo que siempre sigue instrucciones predefinidas.
B. Un programa que interactúa con el entorno y aprende de sus acciones.
C. Un dispositivo de hardware que ejecuta comandos.
D. Un conjunto de datos utilizado para entrenar modelos de aprendizaje
automáticos.
2. ¿Cuál de las siguientes características no es propia de un agente inteligente?
A. Autonomía.
B. Percepción y acción.
C. Almacenamiento de datos en la nube.
D. Adaptabilidad.
3. ¿Qué representan los estados (S) en un proceso de decisión de Markov (MDP)?
A. Todas las posibles acciones que un agente puede realizar.
B. Todos los posibles resultados de una acción.
C. Todas las posibles situaciones en las que puede encontrarse el agente.
D. Las recompensas acumuladas en el tiempo.
4. ¿Cuál es el propósito principal de la ecuación de Bellman en aprendizaje por
refuerzo?
A. Predecir las acciones futuras de otros agentes.
B. Descomponer problemas de optimización a largo plazo en subproblemas
manejables.
C. Almacenar datos históricos de las recompensas.
D. Aumentar la velocidad de procesamiento de los algoritmos.
Aprendizaje Automático No Supervisado 29
Tema 9. Test
© Universidad Internacional de La Rioja (UNIR)
Test
5. ¿Qué se entiende por política (π) en el contexto de un MDP?
A. Una medida de la recompensa inmediata de una acción.
B. Una estrategia que el agente sigue para decidir qué acción tomar en cada
estado.
C. La probabilidad de transición entre estados.
D. El valor esperado de todas las recompensas futuras.
6. ¿Qué tipo de agente utiliza un modelo interno del entorno para tomar decisiones
más informadas?
A. Agente reactivo simple.
B. Agente basado en objetivos.
C. Agente basado en modelo.
D. Agente basado en utilidad.
7. ¿Cuál es el factor de descuento (γ) en el contexto de la utilidad descontada?
A. La tasa a la que se actualizan los estados.
B. La probabilidad de transitar a un nuevo estado.
C. La frecuencia con la que se recompensan las acciones.
D. Un valor que refleja la importancia relativa de las recompensas futuras
frente a las inmediatas.
8. En el aprendizaje por refuerzo, ¿qué función cumple una recompensa (R)?
A. Determina la probabilidad de una transición entre estados.
B. Proporciona una medida inmediata de la bondad de una acción tomada.
C. Define la política que un agente debe seguir.
D. Establece el conjunto de posibles estados.
Aprendizaje Automático No Supervisado 30
Tema 9. Test
© Universidad Internacional de La Rioja (UNIR)
Test
9. ¿Qué significa que una política es estacionaria?
A. Las decisiones del agente dependen del tiempo.
B. La política no se puede modificar una vez establecida.
C. Las decisiones del agente dependen únicamente del estado actual, no del
tiempo.
D. La política cambia en cada iteración.
10. ¿Cuál de las siguientes es una aplicación del aprendizaje por refuerzo en la vida
real?
A. Reconocimiento facial.
B. Optimización de motores de búsqueda.
C. Conducción autónoma.
D. Clasificación de correos electrónicos.
Aprendizaje Automático No Supervisado 31
Tema 9. Test
© Universidad Internacional de La Rioja (UNIR)
Tema 10
Aprendizaje Automático No Supervisado
Tema 10. Q-learning
Índice
Esquema
Ideas clave
10.1. Introducción y objetivos
10.2. Q-learning
10.3. Deep Q Network (DQN)
10.4. Algoritmos REINFORCE
10.5. Proximal Policy Optimization (PPO)
10.6. Implementación de aprendizaje por refuerzo en
Python
10.7. Cuaderno de ejercicios
10.8. Referencias bibliográficas
A fondo
¿Qué es el aprendizaje por refuerzo y cómo trabaja?
Entrenando el juego de Pokemon utilizando aprendizaje
por refuerzo
Conceptos clave en el aprendizaje por refuerzo
Introducción a la optimización de políticas
Test
Esquema
Aprendizaje Automático No Supervisado 3
Tema 10. Esquema
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
10.1. Introducción y objetivos
Ya vimos como el aprendizaje por refuerzo (RL) es un área del aprendizaje
automático donde un agente inteligente interactúa con el entorno y crea una
estrategia optimizando una recompensa acumulada para alcanzar un objetivo. Difiere
del aprendizaje automático supervisado, ya que este último no interactúa con el
entorno y se enfoca en encontrar patrones en datos existentes etiquetados para
hacer predicciones. Por su parte, el aprendizaje no supervisado busca descubrir
patrones ocultos en los datos sin etiquetas, mientras que el aprendizaje por refuerzo
implica un proceso de prueba y error guiado por una recompensa.
El aprendizaje por refuerzo se puede dividir en los siguientes pasos principales:
▸ Definición del entorno y el agente: el entorno es todo lo que interactúa con el
agente y puede ser dinámico o estático. El agente es el que toma decisiones y
aprende a interactuar con el entorno.
▸ Definición del espacio de estados y acciones: los estados representan las
diferentes situaciones en las que puede encontrarse el agente dentro del entorno.
Las acciones son las decisiones o movimientos que el agente puede tomar en cada
estado.
▸ Definición de la función de recompensa: la función de recompensa proporciona
retroalimentación al agente sobre la calidad de sus acciones.
▸ Política de aprendizaje: es la estrategia que el agente sigue para seleccionar
acciones en función del estado actual. Puede ser una función determinista o
probabilística.
▸ Interacción con el entorno: el agente interactúa con el entorno mediante la
ejecución de acciones, observando los estados resultantes y recibiendo
recompensas. Este proceso se repite en un ciclo de percepción-acción.
Aprendizaje Automático No Supervisado 4
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Actualización de la política: basándose en las experiencias obtenidas (estado,
acción, recompensa y nuevo estado), el agente actualiza su política para mejorar su
toma de decisiones futura.
▸ Exploración vs. explotación: el agente debe equilibrar la exploración de nuevas
acciones para descubrir posibles mejores recompensas (exploración) y la utilización
de acciones conocidas que ya han proporcionado buenas recompensas
(explotación).
▸ Evaluación y ajuste: el rendimiento del agente es evaluado y la política puede ser
ajustada si es necesario para mejorar el aprendizaje. Esto puede incluir ajustes en
los parámetros del modelo, como la tasa de aprendizaje o el descuento de
recompensas futuras.
▸ Entrenamiento continuo o episodios múltiples: el proceso de interacción,
actualización y evaluación se repite en múltiples episodios hasta que el agente
converja a una política óptima o satisfactoria.
▸ Implementación y aplicación: una vez que el agente ha aprendido una política
efectiva, esta puede ser implementada y utilizada en aplicaciones reales para
realizar tareas específicas de manera autónoma.
Estos pasos proporcionan un marco general para el aprendizaje por refuerzo, aunque
los detalles específicos pueden variar según el problema y el algoritmo utilizado.
En este tema se presentará una de las principales técnicas de aprendizaje por
refuerzo, Q-learning. El objetivo del Q-learning es aprender una serie de normas que
le diga a un agente qué acción tomar bajo qué circunstancias. No requiere un modelo
del entorno y puede manejar problemas con transiciones estocásticas y
recompensas sin requerir adaptaciones.
Además, veremos DQN (Deep Q-Network) y PPO (Proximal Policy Optimization).
DQN es un algoritmo que combina Q-learning con redes neuronales profundas para
Aprendizaje Automático No Supervisado 5
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
aproximar la función Q, permitiendo que el agente aprenda a tomar decisiones en
entornos complejos y de alta dimensionalidad; mientras que PPO es un algoritmo de
optimización de políticas que mejora la estabilidad y eficiencia del entrenamiento al
restringir la magnitud de las actualizaciones de políticas, logrando un equilibrio entre
exploración y explotación.
Los objetivos del tema son:
▸ Comprender los fundamentos del Q-learning, DQN y PPO, sus características
principales y cómo interactúan con su entorno para tomar decisiones autónomas.
▸ Implementar los algoritmos Q-learning, DQN y PPO en un entorno de simulación.
▸ Explorar aplicaciones prácticas de los algoritmos Q-learning, DQN y PPO.
Aprendizaje Automático No Supervisado 6
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
10.2. Q-learning
Q-learning es un algoritmo de aprendizaje por refuerzo que permite a un agente
aprender cómo actúa en un entorno, con el objetivo de maximizar una recompensa
acumulada a largo plazo. En este algoritmo se tiene en cuenta una función que
estima la utilizad de tomar una acción en un estado .
Se actualizan iterativamente los valores de Q haciendo uso de la ecuación de
Bellman. El objetivo es aplicar una política que maximice la recompensa acumulada.
La fórmula de actualización se muestra en la siguiente ecuación:
Donde:
▸ α es la tasa de aprendizaje, que controla la actualización de los valores Q en cada
paso (0 < α ≤ 1).
▸ γ\gamma es el factor de descuento, que determina la importancia de las futuras
recompensas (0 ≤ γ < 1).
▸ R es la recompensa recibida después de tomar la acción en un estado .
▸ es el valor máximo de Q para el siguiente estado , considerando
todas las posibles acciones .
Al ser un algoritmo de aprendizaje por refuerzo, los conceptos de estado, acción,
recompensa son los mismos. Acá encontramos términos nuevos: episodio, valor
óptimo de Q, estimación de Q, tabla de q y diferencias temporales.
▸ Episodio: es el final de una etapa, donde los agentes no pueden emprender nuevas
acciones. Se produce cuando el agente ha alcanzado el objetivo o ha fracasado.
Aprendizaje Automático No Supervisado 7
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ : es el valor óptimo de Q esperado después de realizar la acción en un
estado concreto.
▸ : es la estimación actual de .
▸ Tabla Q: el agente mantiene la tabla Q de conjuntos de estados acciones.
▸ Diferencias temporales (TD): se usa para estimar el valor esperado de .
Hace uso del estado y la acción actual y el estado y acción anterior.
Algoritmo de aprendizaje Q
En la Figura 1 se representa el paso a paso del algoritmo.
Figura 1. Algoritmo Q-learning. Fuente: elaboración propia.
En la Figura 2 se ilustra cómo un estado y una acción son introducidos y validados
contra una tabla Q, la cual contiene diversos valores de estados y acciones con sus
correspondientes valores óptimos de Q. El resultado que obtenemos es el valor
óptimo de Q para ese estado y esa acción.
Aprendizaje Automático No Supervisado 8
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Figura 2. Resultado de aplicar la función Q en Q-learning. Se genera una tabla donde se cruzan los
estados con las acciones realizadas y en su intersección se calcula la recompensa obtenida. Fuente:
elaboración propia.
Aplicaciones prácticas del Q-learning
▸ El Q-learning se utiliza en robótica para que los robots aprendan a navegar y realizar
tareas específicas de manera autónoma, como evitar obstáculos y recoger objetos
(Barla, 2024).
▸ En el desarrollo de videojuegos, el Q-learning puede ayudar a crear inteligencia
artificial para que los personajes puedan aprender y adaptarse al comportamiento de
otro jugador (DeepMind, s. f.).
▸ Se puede aplicar Q-learning en sistemas de gestión de energía para optimizar el
consumo y almacenamiento de energía en redes inteligentes y edificios inteligentes
(Xiang G, 2018).
▸ Q-learning puede mejorar sistemas de recomendación, permitiendo que estos
sistemas aprendan a ofrecer recomendaciones personalizadas en función del
comportamiento del usuario (Jin, et al., 2018).
▸ En el control de tráfico, el Q-learning puede optimizar la sincronización de semáforos
para reducir la congestión y mejorar el flujo de tráfico (Barla, 2024).
Veamos el algoritmo y el paso a paso utilizando el juego de tres en raya
Ejemplo del algoritmo Q-learning con el juego tres en raya
El juego de tres en raya, también conocido como «tic-tac-toe» en inglés o «triqui» en
Aprendizaje Automático No Supervisado 9
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
algunas regiones, es un juego de mesa sencillo que se juega entre dos personas. El
objetivo del juego es alinear tres de tus propias marcas (X o O) en una fila horizontal,
vertical o diagonal en un tablero de 3x3.
Imaginemos un tablero de tres en raya en un estado inicial vacío y algunos otros
estados posibles:
▸ Estado S0: [ , , , , , , , , ].
▸ Estado S1: [X, , , , , , , , ].
▸ Estado S2: [X, O, , , , , , , ].
▸ Estado S3: [X, O, X, , , , , , ].
Acciones
Las acciones son las posiciones en las que un jugador puede colocar su ficha (de 0 a
8).
▸ Inicializar la tabla Q:
Tabla 1. Ejemplo tres en raya. Fuente: elaboración propia.
▸ Selección de acciones:
• Las acciones son las posiciones en las que un jugador puede colocar su ficha (0-8).
• Después de tomar una acción, actualizamos el valor Q usando la fórmula vista
anteriormente.
Aprendizaje Automático No Supervisado 10
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Ejecutar acciones
Supongamos que estamos en el estado S1 ( [X, , , , , , , , ] ), tomamos la acción 4
(colocar O en el centro) y nos movemos al estado S2 ( [X, , , , O, , , , ] ). La recompensa
R es 0 porque aún no hay ganador.
Tabla 2. Ejemplo tres en raya. Fuente: elaboración propia.
Actualizamos el valor Q para la acción 4:
Supongamos que α = 0.1, γ = 0.9 y la recompensa R es 0:
Al actualizar la tabla queda con los mismos valores porque no hay ganador.
Repetir y aprender
Repetimos este proceso para 10000 partidas, donde la recompensa es 1 si un
jugador gana. Después de varias actualizaciones podemos tener una tabla como la
siguiente:
Tabla 3. Ejemplo tres en raya. Fuente: elaboración propia.
Aprendizaje Automático No Supervisado 11
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
En este punto, el agente ha aprendido que, en el estado S1, la mejor acción es jugar
en la posición 4, ya que tiene el valor Q más alto (0.6).
Avances en Q-learning
El Q-learning es un algoritmo de aprendizaje por refuerzo que busca encontrar la
política óptima para maximizar las recompensas acumuladas en un entorno dado
mediante la actualización iterativa de los valores Q. Una extensión avanzada de Q-
learning es el Deep Q Network (DQN), que utiliza redes neuronales profundas para
aproximar la función de valor Q, permitiendo manejar espacios de estados continuos
y de alta dimensión de manera más eficiente.
Por otro lado, el Proximal Policy Optimization (PPO) es un método de aprendizaje
por refuerzo basado en políticas que optimiza directamente la política mediante la
actualización de parámetros en una dirección que maximiza la recompensa esperada
mientras mantiene la estabilidad y eficiencia del entrenamiento mediante un control
estricto sobre los cambios de la política. En el desarrollo del presente tema,
detallaremos ambos algoritmos.
A continuación, veremos el vídeo Q-learning.
Aprendizaje Automático No Supervisado 12
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=c324a279-3c8e-
4933-9b17-b1c5016f6db9
Aprendizaje Automático No Supervisado 13
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
10.3. Deep Q Network (DQN)
En el primer apartado de este tema vimos el algoritmo Q-learning, que funciona muy
bien en entornos simples, y la función , que se puede representar como una
matriz de valores. Cuando nos enfrentamos a miles o millones de estados, cientos de
acciones distintas, no es viable utilizar una tabla de estados. Con el fin de solventar
este problema, inventaron el algoritmo Deep Q-Network o DQN (Mnih et al., 2015).
Los autores combinan el algoritmo Q-learning con redes neuronales profundas. Con
esta combinación, los autores logran aproximar la función Q, evitando utilizar una
tabla de estados. Se utilizan dos redes neuronales para estabilizar el proceso de
aprendizaje:
▸ La primera red neuronal es la principal y está representada por los parámetros .
Esta red se utiliza para estimar los valores-Q del estado y acción del estado
actual: . En esta red es donde ocurre el proceso de aprendizaje.
▸ La segunda red, denominada red neuronal objetivo, parametrizada con , tendrá la
misma arquitectura que la red principal, pero se usa para aproximar los valores-Q del
siguiente estado y la siguiente acción . Los parámetros no cambian durante
varias iteraciones; después de varias iteraciones los parámetros de la red principal
se copian a la red objetivo. De esta forma se transmite el aprendizaje de una a otra,
haciendo que las estimaciones calculadas por la red objetivo sean más precisas.
Figura 3. Resultado de aplicar la función Q en DQN. Fuente: elaboración propia.
Aprendizaje Automático No Supervisado 14
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
DQN utiliza la red Q para estimar los valores Q para cada acción en un estado, y se
elige la acción con el valor Q más alto. La red tiene como objetivo minimizar la
pérdida del error cuadrático medio (MSE) entre los valores Q predichos y los valores
Q objetivo, como se muestra en la siguiente ecuación:
Los valores Q objetivo se calculan utilizando la ecuación de Bellman con las
recompensas obtenidas y el valor Q máximo del siguiente estado; básicamente lo
mismo que se explicó para el algoritmo Q-learning. Sin embargo, en DQN difiere en
que el Q objetivo lo estima la red neuronal objetivo, que es una copia de la red Q
principal con sus parámetros congelados. Los parámetros congelados se actualizan
periódicamente desde la red Q principal a la de destino y el intervalo de actualización
es un hiperparámetro, utilizando la siguiente ecuación:
Al igual que en Q-learning, la política optima π se obtiene de comenzar en un estado
dado, seleccionar una acción con el valor más alto posible entre las estimadas por la
red Q y continuar con el proceso a medida que el agente se mueve a través del
entorno para maximizar la recompensa esperada.
Aprendizaje Automático No Supervisado 15
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
10.4. Algoritmos REINFORCE
E l algoritmo REINFORCE, que es una abreviatura de «REward Increment =
Nonnegative Factor x Offset Reinforcement x Characteristic Eligibility» (Williams,
1992), es una técnica clásica de aprendizaje por refuerzo basada en el método del
gradiente de políticas.
A diferencia del Q-learning, que se enfoca en aprender el valor de las acciones en un
estado particular, REINFORCE se centra en aprender directamente una política; es
decir, una función que mapea todos los estados-acciones. La política suele estar
parametrizada mediante una aproximación de función, que estima la probabilidad de
una acción dado un estado. El algoritmo actualiza iterativamente los parámetros de la
política calculando estimaciones de gradiente y realizando un ascenso de gradiente
para maximizar la recompensa acumulada esperada.
Un agente REINFORCE interactúa con el entorno siguiendo la política actual
(normalmente la primera política es aleatoria porque los parámetros de la función de
política se inicializan aleatoriamente). Como resultado de aplicar acciones de
secuencia, obtiene una secuencia de recompensas y luego calcula el retorno. Esto
generalmente se hace sumando las recompensas r desde el paso de tiempo actual
hasta el final del episodio como se muestra en la siguiente fórmula:
Donde representa la recompensa en el paso de tiempo , es el factor de
descuento para recompensas futuras y es el último episodio.
El siguiente paso es calcular el gradiente de la política, que representa el gradiente
de la recompensa acumulada esperada con respecto a los parámetros de la política;
utilizando la siguiente fórmula:
Aprendizaje Automático No Supervisado 16
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Donde es la tasa de aprendizaje, es el gradiente logarítmico de
la política y es la recompensa acumulada desde el tiempo en adelante.
REINFORCE ofrece una perspectiva complementaria a Q-learning, proporcionando
una forma efectiva de aprender políticas directamente mediante la optimización de
gradientes de políticas.
Mientras que Q-learning se enfoca en calcular el valor de Q, que estima cuán
beneficiosa es tomar una acción en un estado específico y seguir la mejor estrategia
posible, REINFORCE aprende directamente cuál es la mejor estrategia para
maximizar las recompensas acumuladas. REINFORCE ajusta su estrategia en la
dirección que aumenta la probabilidad de tomar acciones que han resultado en
mayores recompensas, usando un método llamado gradiente de políticas.
Algunos conceptos claves para tener en cuenta:
▸ Política (π): una política es una estrategia que el agente sigue para tomar
decisiones. En REINFORCE, la política se parametriza como , donde
son los parámetros de la política, es la acción y es el estado.
▸ Función de recompensa acumulada (R): la recompensa acumulada es la suma de
las recompensas recibidas a lo largo de un episodio. El objetivo del algoritmo es
maximizar esta recompensa acumulada.
▸ Gradiente de la política: REINFORCE utiliza el gradiente de la política para ajustar
los parámetros θ. La actualización de los parámetros se realiza en la dirección del
gradiente de la recompensa esperada.
A continuación, veremos un ejemplo en Python del algoritmo REINFORCE:
import numpy as np
Aprendizaje Automático No Supervisado 17
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
# Inicialización de parámetros de la política (por ejemplo, una red
neuronal)
theta = np.random.rand(n_parameters)
# Función de política parametrizada
def policy(state, theta):
# Devuelve la acción basada en la política parametrizada por theta
# Ejemplo con softmax:
z = state.dot(theta)
exp = np.exp(z - np.max(z))
return exp / np.sum(exp)
# Entrenamiento con REINFORCE
def reinforce(env, theta, alpha, num_episodes):
for episode in range(num_episodes):
states, actions, rewards = [], [], []
state = env.reset()
done = False
while not done:
action = policy(state, theta)
next_state, reward, done, _ = env.step(action)
states.append(state)
actions.append(action)
rewards.append(reward)
state = next_state
# Cálculo de la recompensa acumulada
G = np.zeros_like(rewards)
for t in range(len(rewards)):
G_sum = sum(rewards[t:])
G[t] = G_sum
# Actualización de los parámetros de la política
for t in range(len(states)):
theta += alpha * G[t] * np.gradient(np.log(policy(states[t],
theta)))
return theta
Aprendizaje Automático No Supervisado 18
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
10.5. Proximal Policy Optimization (PPO)
OpenAI publicó un artículo denominado Algoritmos de optimización de políticas
próximas (PPO) como una nueva familia de métodos de gradiente de políticas
(Schulman et al., 2017). Es conocido por ser robusto y eficiente. PPO se utiliza para
entrenar agentes en entornos donde las decisiones se toman en base a políticas; es
decir, reglas que determinan las acciones a tomar en cada estado del entorno.
Se destacan tres puntos principales:
▸ PPO alterna entre el muestreo de datos a través de la interacción con el medio
ambiente y la optimización de una función objetivo-sustituta mediante un ascenso del
gradiente estocástico.
▸ A diferencia de los métodos de gradiente de políticas estándar que realizan una
actualización de gradiente por muestra de datos, PPO introduce una función objetivo
novedosa que permite múltiples épocas de actualizaciones de minibatch.
▸ PPO ofrece alguno de los beneficios de la optimización de políticas de región
confiable (TRPO), pero es más simple de implementar, más general y tiene una
mejor complejidad de muestra empíricamente.
Conceptos clave en este algoritmo:
▸ Función de valor ( ): mide lo bueno que es estar en un estado en particular.
▸ Ratio de probabilidad ( ): es el ratio entre la nueva política y la política antigua.
Esto es clave en PPO para medir el cambio den la política.
▸ Clip objetivo: se introduce una función objetivo que limita (clip) los ratios de
probabilidad para mantener actualizaciones de política dentro de un rango
Aprendizaje Automático No Supervisado 19
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
razonable. La función objetivo es:
Aquí es la ventaja estimada y es un hiperparámetro que controla cuánto
puede cambiar el ratio de probabilidad.
El algoritmo PPO se entrena de la siguiente manera:
▸ Recolección de datos, ejecutando la política actual para recolectar datos de
interacción del agente con el entorno.
▸ Estimación de la ventaja para cada acción tomada.
▸ Actualización de la política utilizando el para asegurar que las
actualizaciones no sean demasiado grandes.
▸ Este proceso se repite, ajustando la política gradualmente para mejorar el
desempeño del agente.
Tabla comparativa entre Q-learning, DQN, REINFORCE y PPO
Aprendizaje Automático No Supervisado 20
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Tabla 4. Tabla comparativa entre Q-learning, DQN, REINFORCE y PPO. Fuente: elaboración propia.
Aprendizaje Automático No Supervisado 21
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
10.6. Implementación de aprendizaje por refuerzo
en Python
Para la implementación utilizaremos la librería gym, con la que podemos crear y
gestionar entornos de aprendizaje por refuerzo. Gym es una herramienta enfocada a
investigadores fácil de usar, que permite probar y desarrollar algoritmos basados en
el aprendizaje por refuerzo.
Veamos cómo crear y usar un entorno de gym:
¡pip install gym
import gym # Importar la librería gym.
# Crear el entorno
# Aquí se crea una instancia del entorno CartPole-v1.
#Este entorno es parte de la colección estándar de Gym.
env = gym.make('CartPole-v1')
# Reiniciar el entorno para obtener la primera observación
# Antes de comenzar a interactuar con el entorno, es necesario reiniciarlo
para #obtener la primera observación.
observation = env.reset()
#Interacción con el entorno
# Renderizar: Muestra una visualización del entorno (opcional y puede
ralentizar la ejecución).
# Acción Aleatoria: Selecciona una acción aleatoria del espacio de acciones
del entorno
# Ejecutar Acción: Ejecuta la acción seleccionada y devuelve la nueva
observación, la recompensa obtenida, si el episodio ha terminado y alguna
información adicional.
# Reiniciar: Si el episodio ha terminado (done es True), reinicia el
entorno.
for _ in range(1000):
Aprendizaje Automático No Supervisado 22
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
# Renderizar el entorno (opcional, puede ralentizar el proceso)
env.render()
# Seleccionar una acción aleatoria
action = env.action_space.sample()
# Ejecutar la acción en el entorno
observation, reward, done, info = env.step(action)
# Verificar si el episodio ha terminado
if done:
observation = env.reset()
#Cerrar el entorno
env.close()
Ahora implementamos el algoritmo Q-learning creando un entorno gym.
Ejemplo del algoritmo REINFORCE en Python:
!pip install gym
import gym
import numpy as np
# Crear el entorno
env = gym.make('FrozenLake-v1', is_slippery=False)
# Inicializar la tabla Q
Q = np.zeros([env.observation_space.n, env.action_space.n])
# Parámetros del Q-Learning
alpha = 0.1 # Tasa de aprendizaje
gamma = 0.90 # Factor de descuento
epsilon = 0.1 # Probabilidad de exploración
num_episodes = 1000
for episode in range(num_episodes):
state, _ = env.reset()
done = False
while not done:
# Asegurarse de que el estado sea un entero
state = int(state)
Aprendizaje Automático No Supervisado 23
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
if np.random.uniform(0, 1) < epsilon:
action = env.action_space.sample()
else:
action = np.argmax(Q[state])
next_state, reward, done, _, _ = env.step(action)
# Asegurarse de que el siguiente estado sea un entero
next_state = int(next_state)
Q[state, action] = Q[state, action] + alpha * (reward + gamma *
np.max(Q[next_state]) - Q[state, action])
state = next_state
# Mostrar la tabla Q final
print("Tabla Q final:")
print(Q)
A continuación, veremos el vídeo Métodos avanzados e implementación de
aprendizaje por refuerzo.
Accede al vídeo:
https://unir.cloud.panopto.eu/Panopto/Pages/Embed.aspx?id=7d93ac29-98d8-
4122-9d19-b1c5017ca7d2
Aprendizaje Automático No Supervisado 24
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
10.7. Cuaderno de ejercicios
Ejercicio 1. Aplicación del Q-learning en el juego del tres en raya
Implementa el algoritmo Q-learning para jugar al tres en raya (tic-tac-toe). Inicializa la
tabla Q y realiza las primeras tres actualizaciones de la tabla Q usando los siguientes
parámetros: α = 0.1 y γ = 0.9. Usa los estados y acciones dados a continuación:
▸ Estado inicial S0S_0S0: [ , , , , , , , , ]\text{[ , , , , , , , , ]}[ , , , , , , , , ].
▸ Primera acción: coloca una «X» en la posición 0. Nuevo estado S1S_1S1: [X, , , , , , ,
, ]\text{[X, , , , , , , , ]}[X, , , , , , , , ].
▸ Segunda acción: coloca una «O» en la posición 4. Nuevo estado S2S_2S2: [X, , , ,
O, , , , ]\text{[X, , , , O, , , , ]}[X, , , , O, , , , ].
▸ Tercera acción: coloca una «X» en la posición 1. Nuevo estado S3S_3S3: [X, X, , ,
O, , , , ]\text{[X, X, , , O, , , , ]}[X, X, , , O, , , , ].
Solución
▸ Inicialización de la tabla Q:
• Q(S0,acción)=0 para todas las acciones.
▸ Actualización tras la primera acción:
• Q(S0,0)=0+0.1×[0+0.9×max(Q(S1,acción)−0)]=0.
▸ Actualización tras la segunda acción:
• Q(S1,4)=0+0.1×[0+0.9×max(Q(S2,acción)−0)]=0.
▸ Actualización tras la tercera acción:
• Q(S2,1)=0+0.1×[0+0.9×max(Q(S3,acción)−0)]=0.
Aprendizaje Automático No Supervisado 25
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
La tabla Q permanece con valores iniciales debido a las recompensas de 0 en cada
paso.
Ejercicio 2. Implementación de DQN para el CartPole
Implementa un agente DQN para el entorno CartPole-v1 usando la librería gym.
Describe brevemente cómo se inicializan las redes neuronales principal y objetivo, y
cómo se actualizan.
Solución
▸ Inicialización de las redes:
import torch
import torch.nn as nn
import gym
class DQN(nn.Module):
def __init__(self):
super(DQN, self).__init__()
self.fc1 = nn.Linear(4, 24)
self.fc2 = nn.Linear(24, 24)
self.fc3 = nn.Linear(24, 2)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = torch.relu(self.fc2(x))
return self.fc3(x)
# Redes principales y objetivo
policy_net = DQN()
target_net = DQN()
target_net.load_state_dict(policy_net.state_dict())
target_net.eval()
▸ Actualización de las redes. Cada cierto número de episodios, copiar los pesos de
policy_net a target_net :
target_net.load_state_dict(policy_net.state_dict())
Ejercicio 3. Gradiente de la política con REINFORCE
Aprendizaje Automático No Supervisado 26
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Utilizando el algoritmo REINFORCE, calcula el gradiente de la política para un
agente en un entorno simple. Supón que el agente recibió las recompensas [1, 0, -1]
en un episodio. La política parametrizada está dada por θ = [0.5, 0.5]. Calcula la
actualización de θ.
Solución
▸ Cálculo de las recompensas acumuladas Rt:
R0=1+0+(−1)=0
R1=0+(−1)=−1,R2=−1
▸ Gradiente logarítmico de la política (suponiendo una función política simple):
∇θlogπθ(at∣st)=[0.5,0.5]
▸ Actualización de θ:
θ←θ+α∇θlogπθ(at∣st)Rt
▸ Con α = 0.1:
θ0←[0.5,0.5]+0.1[0.5,0.5]×0=[0.5,0.5]θ1←[0.5,0.5]+0.1[0.5,0.5]×(−1)=
[0.45,0.45]θ2←[0.45,0.45]+0.1[0.5,0.5]×(−1)=[0.4,0.4]
Ejercicio 4. PPO en un entorno simple
Describe cómo se implementa la función objetivo con clipping en PPO. Da un
ejemplo numérico donde la probabilidad de la acción bajo la nueva política πθ es 0.6
y bajo la política antigua πθold que es de 0.4, con At=1.2 y ϵ=0.2.
Solución
▸ Cálculo del ratio de probabilidad rt(θ)r_t(\theta)rt(θ):
Aprendizaje Automático No Supervisado 27
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Clipping del ratio:
clip(rt(θ),1−ϵ,1+ϵ)=clip(1.5,0.8,1.2)=1.2
▸ Función objetivo con clipping:
LCLIP(θ)=min(rt(θ)At,clip(rt(θ)),1−ϵ,1+ϵ)At=min(1.5×1.2,1.2×1.2)=min(1.8,1.44)=1.44
Aprendizaje Automático No Supervisado 28
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
10.8. Referencias bibliográficas
Barla, N. (2024, abril 22). Self-driving cars with convolutional neural networks (CNN).
N e p t u n e . a i . https://neptune.ai/blog/self-driving-cars-with-convolutional-neural-
networks-cnn
DeepMind. (s. f.). AlphaGo. https://deepmind.google/technologies/alphago/
Jin, J., Song, C., Li, H., Gai, K., Wang, J. y Zhang, W. (2018). Real-time bidding with
multi-agent reinforcement learning in display advertising. arXiv.
https://arxiv.org/pdf/1802.09756.pdf
Mnih, V., Kavukcuoglu, K., Silver, D., Rusu, A. A., Veness, J., Bellemare, M. G.,
Graves, A., Riedmiller, M., Fidjeland, A. K., Ostrovski, G., Petersen, S., Beattie, C.,
Sadik, A., Antonoglou, I., King, H., Kumaran, D., Wierstra, D., Legg, S. y Hassabis, D.
(2015). Human-level control through deep reinforcement learning. Nature, 518(7540),
529.
https://web.stanford.edu/class/psych209/Readings/MnihEtAlHassibis15NatureControl
DeepRL.pdf
Schulman, J., Wolski, F., Dhariwal, P., Radford, A. Y Klimov, O. (2017). Proximal
Policy Optimization Algorithms. OpenAI. https://arxiv.org/pdf/1707.06347
Williams, R. (1992). Simple statistical gradient-following algorithms for connectionist
reinforcement learning. Machine learning, 8(3-4), 229–256.
Xiang, G. (2018). Deep reinforcement learning for time series: playing idealized
trading games. arXiv. https://arxiv.org/ftp/arxiv/papers/1803/1803.03916.pdf
Aprendizaje Automático No Supervisado 29
Tema 10. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
A fondo
¿Qué es el aprendizaje por refuerzo y cómo
trabaja?
Johnny Code. (2023, diciembre 2021). Deep Q-Learning/Deep Q-Network (DQN)
Explained | Python Pytorch Deep Reinforcement Learning [Vídeo]. YouTube.
https://www.youtube.com/watch?v=EUrWGTCGzlA
Explicación del paso a paso, un recorrido por el código y una demostración de cómo
funciona Deep Q-learning (DQL). Usan DQL para resolver el muy simple entorno de
aprendizaje por refuerzo Gymnasium FrozenLake-v1. Habla de las diferencias entre
Q-learning y DQL, la política Epsilon-Greedy, la política Deep Q-Network (DQN), el
Target DQN y Experience replay.
Aprendizaje Automático No Supervisado 30
Tema 10. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
Entrenando el juego de Pokemon utilizando
aprendizaje por refuerzo
Peter Whidden. (2023, octubre 2023). Training AI to Play Pokemon with
Reinforcement Learning [Vídeo]. YouTube. https://www.youtube.com/watch?
v=DcYLT37ImBY
Una simulación del juego Pokemon utilizando aprendizaje por refuerzo y viendo su
comportamiento durante el entrenamiento.
Aprendizaje Automático No Supervisado 31
Tema 10. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
Conceptos clave en el aprendizaje por refuerzo
OpenAI. (s. f.). Part 1: Key Concepts in RL.
https://spinningup.openai.com/en/latest/spinningup/rl_intro.html
OpenAI muestra una explicación de alto nivel de lo que hacen los algoritmos RL.
Aprendizaje Automático No Supervisado 32
Tema 10. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
Introducción a la optimización de políticas
OpenAI. (s. f.). Part 3: Intro to policy optimization.
https://spinningup.openai.com/en/latest/spinningup/rl_intro3.html
OpenAI analiza los fundamentos matemáticos de los algoritmos de optimización de
políticas y conectaremos el material con un código de muestra.
Aprendizaje Automático No Supervisado 33
Tema 10. A fondo
© Universidad Internacional de La Rioja (UNIR)
Test
1. ¿Cuál es el objetivo principal del aprendizaje por refuerzo?
A. Minimizar la pérdida de datos.
B. Maximizar la precisión de la clasificación.
C. Optimizar la recompensa acumulada a largo plazo.
D. Reducir el tiempo de entrenamiento.
2. En el algoritmo Q-learning, ¿qué representa la variable γ (gamma)?
A. La tasa de aprendizaje.
B. El factor de descuento.
C. La recompensa inmediata.
D. La acción a tomar.
3. ¿Cuál es el propósito de la red objetivo en el algoritmo DQN?
A. Reducir el tamaño de la tabla Q.
B. Estabilizar el proceso de aprendizaje.
C. Aumentar la tasa de aprendizaje.
D. Minimizar la recompensa acumulada.
4. En el contexto de REINFORCE, ¿qué es el gradiente de la política?
A. La diferencia entre las recompensas actuales y futuras.
B. La actualización de los valores Q.
C. El gradiente de la recompensa acumulada esperada con respecto a los
parámetros de la política.
D. La función de pérdida.
Aprendizaje Automático No Supervisado 34
Tema 10. Test
© Universidad Internacional de La Rioja (UNIR)
Test
5. ¿Qué ventaja tiene PPO sobre otros métodos de gradiente de políticas?
A. Es más fácil de implementar y tiene mejor complejidad de muestra.
B. Requiere menos datos de entrenamiento.
C. No utiliza redes neuronales.
D. Minimiza la recompensa acumulada.
6. En Q-learning, ¿cómo se define un episodio?
A. Un conjunto de acciones sin recompensa.
B. El proceso de aprendizaje de un solo paso.
C. El final de una etapa donde el agente ha alcanzado el objetivo o ha
fracasado.
D. La actualización de la red neuronal.
7. ¿Qué es la tabla Q en el contexto de Q-learning?
A. Una lista de recompensas acumuladas.
B. Un registro de todas las acciones realizadas.
C. Una matriz que mantiene los valores Q para todas las combinaciones de
estados y acciones.
D. Una función de política.
8. ¿Cuál es el propósito de la función de pérdida en DQN?
A. Maximizar la recompensa inmediata.
B. Minimizar la diferencia entre los valores Q predichos y los valores Q
objetivo.
C. Actualizar los valores de la tabla Q.
D. Seleccionar la mejor acción posible.
Aprendizaje Automático No Supervisado 35
Tema 10. Test
© Universidad Internacional de La Rioja (UNIR)
Test
9. ¿Qué técnica utiliza REINFORCE para ajustar su estrategia?
A. Diferencias temporales.
B. Gradiente de políticas.
C. Factor de descuento.
D. Red objetivo.
10. En PPO, ¿qué se entiende por «clip objetivo»?
A. Una técnica para asegurar que las actualizaciones de la política no sean
demasiado grandes.
B. Un método para inicializar la tabla Q.
C. Un proceso para reducir el número de episodios.
D. Una función para calcular la recompensa inmediata.
Aprendizaje Automático No Supervisado 36
Tema 10. Test
© Universidad Internacional de La Rioja (UNIR)