Hola, soy Miguel y para hoy les traigo este post.
Índice
Una descripción general de los diferentes métodos de validación cruzada
Introducción
Como saben, cuando dividimos nuestros datos en conjuntos de entrenamiento y prueba, nuestro objetivo principal es comprender la capacidad de nuestro modelo para predecir cuándo se enfrenta a nuevos datos que son diferentes de los datos utilizados durante la fase de entrenamiento.
De todos modos, existe una forma sólida de evaluar el rendimiento de nuestro modelo. Esta forma se llama validación cruzada. La validación cruzada es una técnica estadística para evaluar el rendimiento de la generalización que es más estable que usar una división en un entrenamiento y un conjunto de pruebas.
En este artículo , veremos algunos métodos de validación cruzada como la validación cruzada de k-fold, la validación cruzada de K-fold estratificada y la validación cruzada de dejar uno fuera.
Parte I: Validación cruzada de K-fold
La validación cruzada de K-fold es uno de los métodos de validación cruzada más utilizados. En este método, k representa el número de experimentos (o veces) que quiero probar para probar y entrenar mis datos.
Por ejemplo, supongamos que queremos hacer 5 experimentos (o rendimiento) con nuestros datos compuestos por 1000 registros. Entonces, durante el primer experimento, probamos o validamos los primeros 200 registros y luego entrenamos los 800 registros restantes. Cuando termina el primer experimento obtengo cierta precisión. Luego hacemos un segundo experimento donde probamos los 200 registros que siguen a los registros anteriores que he probado y entrenamos los 800 registros restantes.
Continúo el experimento con un grupo de 200 registros hasta completar los 5 experimentos. Recuerda que probamos siempre los siguientes 200 registros de los anteriores y entrenamos los registros de restos hasta el final.
Al final de mis 5 experimentos, obtendré 5 precisiones y la precisión final será la media de todas las precisiones.
A continuación puede ver un ejemplo visual.
La validación cruzada se implementa en scikit-learn utilizando el cross_val_score función de la model_selecion módulo. Los parámetros de las funciones cross_val_score son el modelo que queremos evaluar, los datos de entrenamiento y el objetivo. A continuación, un ejemplo con regresión logística:
from sklearn.model_selection import cross_val_score from sklearn.linear_model import LogisticRegression logreg = LogisticRegression() scores = cross_val_score(logreg, X,y,cv=5)
Parte II: Validación cruzada estratificada de K-fold
Al considerar el ejemplo anterior de 1000 registros, a veces, comenzar con una prueba de los primeros 200 registros no siempre es una buena idea. De hecho, en un conjunto de datos, podríamos encontrar que el primer tercio de los datos se refiere a la misma clase.
Imagina que tenemos tres clases (0,1 y 2) como puedes ver a continuación:
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
Como puede ver, la primera tercera clase es 0, la segunda 1 y la tercera es 2. Ahora imagine hacer 3 experimentos (k = 3). En nuestro primer experimento, el conjunto de prueba estaría solo en la clase 0, y el conjunto de entrenamiento sería solo de las clases 1 y 2. Por lo tanto, puede reconocer que la precisión será 0.
Para hacer frente a este problema podemos utilizar el validación cruzada estratificada de k-fold. En la validación cruzada estratificada, dividimos los datos de manera que las proporciones entre clases sean las mismas en cada pliegue que en todo el conjunto de datos, como se puede observar en la siguiente imagen. En la imagen hay una comparación entre la validación cruzada de k veces y la validación cruzada estratificada:
Scikit-learn nos ayuda con StratifiedkFold. Entonces:
from sklearn.model_selection import StratifiedKFold skf = StratifiedKFold(n_split=5, random_state=None) # X is the feature set and y is the target for train_index, test_index in skf.split(X,y): print("Train:", train_index, "Test:", test_index) X_train, X_test = X.iloc[train_index], X.iloc[test_index] y_train, y_test = y[train_index], y[test_index]
Parte III: Validación cruzada de dejar uno fuera
Otro método interesante de validación cruzada es dejar uno fuera. Este método es similar al k-fold que hemos visto anteriormente, pero para cada experimento (o rendimiento) tomamos solo una muestra para probar y no 200 registros como antes.
A continuación, podemos encontrar la implementación en scikit-learn con LeaveOneOut.
from sklearn.model_selection import LeaveOneOut loo = LeaveOneOut() cross_val_score(logreg, X, y, cv=loo)
Conclusión
En este artículo, ha visto los métodos de validación cruzada más comunes que se utilizan en el aprendizaje automático para evaluar la precisión de un modelo. De todos modos, hay algunos otros métodos como la validación cruzada de división aleatoria, la validación cruzada con grupos y la validación cruzada para series de tiempo que son muy útiles en alguna situación.
Gracias por leer.
Añadir comentario