Los datos de nuestro dataset son finitos y debemos distribuirlos para que el entrenamiento se haga con la máxima cantidad de ejemplos posibles a la vez que podamos verificar la veracidad del modelo con datos reales no vistos anteriormente, para esto creamos los subsets de entrenamiento, validación y pruebas.
¿Por qué distribuir datos?
Para entender esta necesidad, pasemos a una analogía con helados: de niño estás aprendiendo sobre los diferentes tipos de helados, tu padre tiene 100 helados, de los cuales usará 70 para enseñarte y 30 para ponerte a prueba; cada día te mostrará un helado diferente y te dirá su sabor hasta que se terminen y luego te preguntará por aquellos que no has visto.
Lo anterior hace alusión a los datos de entrenamiento y prueba, donde los primeros se usarán para entrenar el modelo (tendrán acceso a las etiquetas de salida) mientras que los segundos serán para predecir, el problema con esto es que solo estaremos comprendiendo la eficacia del modelo una vez finalizado el entrenamiento.
Para solucionar este problema y tener feedback en vivo del desempeño del modelo creamos el subset de validación, que hará el papel de pruebas durante cada época del entrenamiento, permitiendo monitorear el rendimiento de la red a través de las iteraciones.
Determinando los porcentajes de cada subset
La distribución de los datos a los diferentes subsets se puede determinar de diferentes maneras, donde la configuración promedio será de 70% para entrenamiento y 30% para pruebas (la mitad de este conjunto podrían destinarse a validación). Andrew NG (de las figuras más importantes del Deep Learning moderno) propone una estructura de 60% de entrenamiento, 20% de validación y 20% pruebas.
En caso de poseer pocos datos es recomendable aplicar la técnica de cross validation, que nos permitirá iterar el subset de validación entre los datos de entrenamiento, mientras que si tienes muchos datos puedes maximizar la cantidad de datos a entrenamiento en una estructura 90%/5%/5%.
Errores comunes al distribuir datos
Cuando distribuyas datos es posible encontrarte con errores altamente mortales en tiempo de ejecución porque no son de lógica ni compilación sino de estructuración, no serán detectados por la máquina y pueden ser muy costosos de detectar y solucionar.
Un error común es el de combinar erróneamente los datos de entrenamiento con los de testeo, lo que resultará en un rendimiento artificialmente alto para la red. Otro error común es el de clases desbalanceadas, es decir, la cantidad de ejemplos de diferentes clases es diferentes (supongamos 95 ejemplos de la clase A con 5 ejemplos de la clase B), incluso si todos los ejemplos los clasificamos como A, tendremos una precisión artificial de 95%. Si tienes muy pocos datos el modelo no podrá entrenarse dado que no tendrá ejemplos suficientes para abstraer los patrones a enseñar.
Con esto tienes las intuiciones necesarias para distribuir tus datasets, los valores exactos los podrás decidir basándote en las recomendaciones e intuiciones personales, pero ya puedes partir con total seguridad desde los hombros de los gigantes del machine learning.
Yo agregaría otro error común y el train tiene conexión con el de Test, pasa cuando se trabaja con grafos
¿Hasta cuantos datos se dice que tenemos pocos datos?
De pronto la respuesta a esta pregunta dependa de las particularidades del proyecto, pero sería bueno tener rangos de valores, al menos para las principales aplicaciones.
Hola, si tu solo te diste la respuesta. Los proyectos cambian mucho de una a otra cosa. Igual puedes buscar proyectos parecidos al que tengas en mente para saber que parámetros se ajustan más al tuyo y tenerlo de referencia
lo que mencionas es cierto, depende del proyecto pero según mi experiencia en casos reales si tienes menos de 10000 registros tu tabulaciones no arrojaran resultados reales, ya me paso, entonces para mi es un parámetro de registros mínimos que debe tener el dataset.
La distribución de los datos, especialmente en el contexto de machine learning, suele implicar dividir el conjunto de datos en subconjuntos específicos para entrenamiento, validación y prueba, con el objetivo de optimizar el rendimiento del modelo y reducir el riesgo de sobreajuste. Veamos algunas formas y estrategias para hacer esto:
### 1. División Básica: Entrenamiento, Validación y Prueba
Una división común es separar los datos en tres conjuntos principales:
- **Entrenamiento (Training)**: Utilizado para ajustar los pesos del modelo. Generalmente, representa entre el 60% y el 80% de los datos.
- **Validación (Validation)**: Utilizado para afinar los hiperparámetros y evaluar el modelo de manera objetiva durante el entrenamiento. Suele representar entre el 10% y el 20%.
- **Prueba (Testing)**: Empleado para evaluar el rendimiento final del modelo después del entrenamiento. Representa entre el 10% y el 20%.
#### Ejemplo en Python con train\_test\_split
from sklearn.model\_selection import train\_test\_split
\# Supongamos que `X` contiene los datos de entrada y `y` las etiquetas
X\_train, X\_temp, y\_train, y\_temp = train\_test\_split(X, y, test\_size=0.3, random\_state=42)X\_val, X\_test, y\_val, y\_test = train\_test\_split(X\_temp, y\_temp, test\_size=0.5, random\_state=42)\# Ahora tenemos:70% en `X\_train`,15% en `X\_val`, y 15% en `X\_test`
### 2. K-Fold Cross-Validation
La **validación cruzada** es una técnica que consiste en dividir los datos en varios subconjuntos o "folds". Se entrena el modelo en todos menos uno de los subconjuntos y se valida en el subconjunto restante. Esto se repite k veces, y el rendimiento se promedia al final.
from sklearn.model\_selection import KFold
kf = KFold(n\_splits=5)# 5 foldsfor train\_index, val\_index in kf.split(X):  X\_train, X\_val = X\[train\_index], X\[val\_index]  y\_train, y\_val = y\[train\_index], y\[val\_index]  \# Entrenar y validar el modelo aquí
### 3. Stratified Split (División Estratificada)
Cuando tienes una distribución desbalanceada en las clases, es útil realizar una **división estratificada** para asegurar que cada subconjunto tenga una proporción similar de clases. Esto es especialmente útil en clasificación.
### 4. Data Augmentation para Conjuntos de Entrenamiento Limitados
Si tienes un conjunto de datos pequeño, puedes **aumentar los datos** para enriquecer el conjunto de entrenamiento y mejorar el rendimiento del modelo.
### Estrategias Generales:
- **Mantener un conjunto de prueba completamente aislado** para evitar el "overfitting al conjunto de prueba".
- **Ajustar los hiperparámetros en el conjunto de validación** y nunca en el conjunto de prueba.
- **Usar validación cruzada** en casos de conjuntos de datos limitados para obtener una estimación robusta del rendimiento del modelo.
Estas técnicas ayudan a construir modelos robustos y a tener una evaluación precisa del rendimiento del modelo en datos no vistos.
Importancia de la Distribución de Datos:
Evitar el Sobreajuste:
Un modelo sobreajustado aprende las características específicas del conjunto de entrenamiento, pero no generaliza bien a nuevos datos. La distribución de datos ayuda a prevenir esto al crear un conjunto de validación que el modelo no ha visto antes, lo que obliga al modelo a aprender patrones más generales.
Evaluación del Rendimiento:
El conjunto de prueba, independiente del entrenamiento y la validación, proporciona una medida precisa del rendimiento final del modelo en datos no vistos.
Optimización de Hiperparámetros:
El conjunto de validación se utiliza para ajustar los hiperparámetros del modelo, como la tasa de aprendizaje o el número de capas, para encontrar la configuración que optimice el rendimiento.
Tipos de Distribuciones de Datos:
Conjunto de Entrenamiento (Training Set)
Es el subconjunto más grande utilizado para entrenar el modelo. Representa la mayor parte de los datos y es crucial para que el modelo aprenda los patrones y características relevantes para la tarea en cuestión.
Conjunto de Validación (Validation Set)
Es un subconjunto más pequeño utilizado para evaluar el rendimiento del modelo durante el entrenamiento. Se utiliza para ajustar los hiperparámetros del modelo y evitar el sobreajuste.
Conjunto de Prueba (Test Set)
Es un subconjunto completamente independiente que se utiliza para evaluar el rendimiento final del modelo una vez entrenado. No se utiliza durante el entrenamiento para evitar el sesgo.
Estrategias de Distribución de Datos:
División Aleatoria
La forma más simple es dividir aleatoriamente el conjunto de datos en los subconjuntos mencionados anteriormente. Esta estrategia es efectiva para conjuntos de datos homogéneos.
Estratificación
Cuando el conjunto de datos tiene clases desequilibradas, se utiliza la estratificación para garantizar que cada subconjunto tenga una proporción similar de clases. Esto ayuda a evitar sesgos en el entrenamiento y la evaluación.
Validación Cruzada (K-Fold Cross Validation)
Esta técnica divide el conjunto de datos en múltiples subconjuntos de entrenamiento y validación. El modelo se entrena y evalúa repetidamente en diferentes combinaciones de estos subconjuntos, proporcionando una estimación más robusta del rendimiento del modelo.