Encuentra otras k observaciones (donantes, vecinos) que sean mas similares a esa observacion
Reemplaza los valores faltantes con los valores agregados de los k vecinos. Si los vecinos mas cercanos tienen valores de 1 y 2, entonces el valor a imputar es el promedio de ambos que es 1.5
Para determinar cuales son los vecinos mas similares se utilizan las metricas de distancia la cual cuantifica la distancia que hay entre dos observaciones. Entre los distintos tipos de metrica de distancia tenemos:
Distancia Euclidiana: util para las variables numericas, se traza una linea recta entre dos puntos, porque se considera el camino mas corto en un espacio euclidiano, y esa distancia se utiliza como parametro para definir si se encuentra lejos o cerca de otro punto.
Distancia Manhattan: es muy util para variables de tipo factor (dias de la semana, condiciones como lento, rapido), se trata de la distancia absoluta que debemos recorrer para llegar del punto a al punto b.
Distancia de Hamming: es util para variables categoricas, cuantifica la diferencia entre los textos.
Distancia de Gower: util para conjuntos de datos con variables mixtas, se define como la distancia de un vecino a otros vecinos para determinar la distancia global referente a la fila que contiene el valor faltante.
Ventajas
Sencillo de implementar.
buen rendimiento con conjunto de datos pequenos.
Excelente para datos numericos, pero tambien funciona para datos mixtos
Desventajas
Su escalabilidad puede ser comprometedora dependiendo del numero de variables y el tamano de las observaciones.
Requiere transformaciones especiales para las variables categoricas ya que no solo estas introduciendo numeros y se necesita cuntificar estas distancias.
Posee sensibilidad a valores atipicos
Gracias por todos los aportes Jeinfferson Bernal G, son de mucha ayuda!!
See siempre se para duro con los apuntes
Resumen de métodos de distancia:
Euclidiana: Útil para variables numéricas
Manhattan: Útil paa variables tipo factor
Hamming: Útil para variables categóricas
Gower: Útil para conjuntos de datos con variables mixtas
Good summary
gracias..!
12. Imputación por KNN
Pasos para imputación por k-Nearest-Neighbors
Para cada observación con valores faltantes:
Encuentra otras K observaciones (donadores, vecinos) que sean más similares a esa observación.
Reemplaza los valores faltantes con los valores agregados de los K vecinos.
¿Cómo determinar cuáles son los vecinos más similares?
Cuantificación de distancia: distancia euclidiana útil para variables numéricas.
Distancia Manhattan útil para variables tipo factor.
Distancia de Hamming útil para variables categóricas
distancia de Gower útil para conjuntos de datos con variables mixtas
👏
Creo que un ejemplo de aplicacion de KNN antes de pasar a la programación. no hubiera estado nada mal.
La **imputación por K-Nearest Neighbors (KNN)** es una técnica avanzada utilizada para estimar valores faltantes basándose en la similitud de las observaciones con otras observaciones del conjunto de datos. La idea detrás de este enfoque es que los valores faltantes pueden ser aproximados utilizando los valores de las observaciones más cercanas (vecinas) en el espacio de las características.
### Concepto básico de KNN:
El algoritmo de KNN calcula la "distancia" entre las observaciones, donde cada observación es un vector de características (variables). En el caso de imputación, se seleccionan las **K observaciones más cercanas** (vecinos) a la observación con el valor faltante y se utiliza alguna función (promedio, moda, etc.) para estimar el valor faltante con base en los valores de esos vecinos.
### Pasos de la imputación por KNN:
1. **Definir la distancia**: Se elige una métrica de distancia, comúnmente la distancia Euclidiana, para determinar qué observaciones están "cerca" entre sí.
2. **Seleccionar K vecinos**: Se selecciona un número \( K \) de vecinos más cercanos a la observación que tiene el valor faltante.
3. **Imputar el valor faltante**: El valor faltante se estima utilizando los valores de los vecinos seleccionados. Si es una variable numérica, se puede usar la media o mediana de los vecinos. Para una variable categórica, se puede utilizar la moda (el valor más frecuente entre los vecinos).
### Implementación en Python:
En Python, la imputación por KNN puede realizarse utilizando la librería sklearn y otras herramientas como fancyimpute o KNNImputer.
#### Usando KNNImputer de scikit-learn:
import numpy as np
import pandas as pd
from sklearn.impute import KNNImputer
\# Crear un DataFrame con valores faltantes
data ={'A': \[1,2, np.nan,4,5],  'B': \[5, np.nan, np.nan, 3, 2],  'C': \[7, 8, 9, 10, 11]}df = pd.DataFrame(data)\# Crear un objeto KNNImputer con k=2 vecinos
imputer = KNNImputer(n\_neighbors=2)
\# Imputar los valores faltantes
df\_imputed = pd.DataFrame(imputer.fit\_transform(df), columns=df.columns)
\# Mostrar el resultado
print(df\_imputed)
En este ejemplo, el algoritmo KNN selecciona los **2 vecinos más cercanos** para imputar los valores faltantes en las columnas 'A' y 'B'.
### Métricas de distancia comunes:
- **Distancia Euclidiana**: Mide la distancia entre dos puntos en el espacio de múltiples dimensiones. Es la más común para datos numéricos.
\[
d(x, y) = \sqrt{\sum_{i=1}^{n} (x_i - y_i)^2}
\]
- **Distancia de Manhattan**: Suma de las diferencias absolutas entre los valores correspondientes de dos puntos.
\[
d(x, y) = \sum_{i=1}^{n} |x_i - y_i|
\]
- **Distancia de Hamming**: Para variables categóricas, mide la diferencia entre dos vectores considerando cada componente de manera independiente.
### Ventajas de la imputación por KNN:
1. **Aprovecha la información global**: Utiliza toda la información disponible en el conjunto de datos para imputar valores, en lugar de limitarse a una sola columna.
2. **Flexibilidad**: Funciona tanto para variables numéricas como categóricas (ajustando el método de imputación según el tipo de variable).
3. **No requiere suposiciones fuertes**: A diferencia de la interpolación o métodos paramétricos, no asume una estructura particular de los datos.
### Desventajas de la imputación por KNN:
1. **Costo computacional**: Puede ser costoso en términos de tiempo y recursos computacionales, especialmente en grandes conjuntos de datos, ya que requiere calcular distancias entre todas las observaciones.
2. **No siempre es adecuado para datos escasos**: Si los valores faltantes son muchos o si los datos son dispersos, KNN puede no ser eficaz ya que los vecinos podrían no estar suficientemente cerca o ser representativos.
3. **Sensibilidad a la elección de \( K \)**: El número de vecinos (\( K \)) puede afectar significativamente los resultados, y encontrar el \( K \) óptimo puede requerir prueba y error.
4. **Escalado de los datos**: Las diferencias en las escalas de las variables pueden afectar los resultados, por lo que es necesario normalizar o estandarizar los datos antes de aplicar KNN.
### Consideraciones adicionales:
- **Estandarización de los datos**: Es importante que los datos estén en la misma escala, ya que las distancias se ven afectadas por la magnitud de las variables.
```python
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)
```
- **Elección de \( K \)**: \( K \) puede determinarse mediante técnicas de validación cruzada o seleccionando el \( K \) que minimice el error de predicción en un conjunto de validación.
### Conclusión:
La imputación por KNN es un método poderoso para manejar valores faltantes en conjuntos de datos complejos. Al basarse en las observaciones cercanas, permite realizar imputaciones coherentes con los patrones observados en los datos. Sin embargo, es importante considerar su costo computacional y el impacto de la elección de \( K \) para garantizar buenos resultados.
El tipo de distancia depende de los tipos de datos, pero el tipo de datos de nuestra variable a imputar? de las demas variables? de todas las variables? o de cuales?
Quedo atento..
Hola a todos 👋🏼
Les dejó un post que encontré en medium, en el se explica que es el algoritmo KNN, como funciona, las ecuaciones matemáticas para calcular las distancias y un ejemplo práctico: