Herramientas de usuario

Herramientas del sitio


clase:iabd:pia:2eval:tema08

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
clase:iabd:pia:2eval:tema08 [2023/05/13 01:11]
admin [Sobreajuste]
clase:iabd:pia:2eval:tema08 [2024/04/21 12:47] (actual)
admin [Optimización]
Línea 9: Línea 9:
 {{:clase:iabd:pia:2eval:sobreajuste.png?1000|}} {{:clase:iabd:pia:2eval:sobreajuste.png?1000|}}
  
-El sobreajuste se ve porque la red aprende vas vez más en entrenamiento pero aprende cada vez menos en validación.+El sobreajuste se ve porque la red aprende cada vez más en entrenamiento pero aprende cada vez menos en validación. Es decir, disminuye la perdida en entrenamiento pero no disminuye en validación.
  
 ¿Como podemos evitar el sobre ajuste? Hay varias formas: ¿Como podemos evitar el sobre ajuste? Hay varias formas:
Línea 16: Línea 16:
  
  
-==== Regularización ====+===== Regularización =====
 Para hacer el modelo mas sencillo, la regularización intenta que los pesos sean mas pequeños. En una red neuronal tenemos una serie de pesos ''w'' y ''b''. Si penalizamos la función de pérdida cuando los pesos son mas grandes, habremos "hecho" la regularización.  Para hacer el modelo mas sencillo, la regularización intenta que los pesos sean mas pequeños. En una red neuronal tenemos una serie de pesos ''w'' y ''b''. Si penalizamos la función de pérdida cuando los pesos son mas grandes, habremos "hecho" la regularización. 
  
Línea 22: Línea 22:
  
 Existen 3 tipos de regularizadores (realmente existen más): Existen 3 tipos de regularizadores (realmente existen más):
-  * ''L1'': También llamada //Lasso//. Intenta hacer los pesos lo más pequeños posibles. +  * **L1**: También llamada //Lasso//. Intenta hacer los pesos lo más pequeños posibles. 
-  * ''L2'': También llamada //Ridge//. Intenta eliminar correlaciones entre pesos. +  * **L2**: También llamada //Ridge//. Intenta eliminar correlaciones entre pesos. 
-  * ''L1L2'': También llamada //ElasticNet//. Es la unión de los 2 anteriores.+  * **L1 y L2**: También llamada //ElasticNet//. Es la unión de los 2 anteriores. 
 + 
 +$$  
 +\begin{array} 
 +\\ 
 + 
 +Loss \; con &\;& L1 &\;& \; &=&\frac 1 n \displaystyle\sum_{i=1}^{n} {(y_i-y'_i)^2 } &+& \alpha \frac 1 m \displaystyle\sum_{j=1}^{m} {|w_j|^1}  
 +\\ 
 +Loss \; con &\;& \; &\;& L2 &=&\frac 1 n \displaystyle\sum_{i=1}^{n} {(y_i-y'_i)^2 } &\;& \; &+& \beta \frac 1 {2m} \displaystyle\sum_{j=1}^{m} {|w_j|^2}  
 +\\ 
 +Losss \; con &\;& L1 &\;& L2 &=&\frac 1 n \displaystyle\sum_{i=1}^{n} {(y_i-y'_i)^2 } &+& \alpha \frac 1 m \displaystyle\sum_{j=1}^{m} {|w_j|^1}  &+&  \beta \frac 1 {2m} \displaystyle\sum_{j=1}^{m} {|w_j|^2}  
 +\\ 
 +\end{array} 
 +$$ 
 + 
 + 
 + 
 +Más información: 
 +  * [[https://www.tensorflow.org/api_docs/python/tf/keras/regularizers|Module: tf.keras.regularizers]] 
 +  * [[tema08-apendices]] 
 +  * [[http://laid.delanover.com/difference-between-l1-and-l2-regularization-implementation-and-visualization-in-tensorflow/|Difference between L1 and L2 regularization, implementation and visualization in Tensorflow]]: Las imágenes en 3D de las 2 regularizaciones. 
 +  * [[https://explained.ai/regularization/impl.html|How we express regularization in practice]]: Mas imágenes en 3D de L1 y L2 
 +  * [[https://ichi.pro/es/intuiciones-sobre-la-regularizacion-l1-y-l2-38891695686241|Intuiciones sobre la regularización L1 y L2]]: Explica gracias a las derivadas porque L1 hace que el peso sea menor. 
 +  * [[https://rorasa.wordpress.com/2012/05/13/l0-norm-l1-norm-l2-norm-l-infinity-norm/|l0-Norm, l1-Norm, l2-Norm, … , l-infinity Norm]]: Las normas (de matemáticas) que se usan en L1 y L2. 
 +  * [[https://codatalicious.medium.com/regularization-1a186c620598|Regularization]] 
 +  * [[https://towardsdatascience.com/machine-learning-regularization-techniques-in-real-life-your-dogs-nap-time-as-a-regularized-9c533510fe83|Machine Learning regularization techniques in real life]] 
 +  * [[https://medium.com/nerd-for-tech/lasso-and-ridge-regularization-simply-explained-d551ee1e47b7|LASSO and Ridge Regularization .. Simply Explained]] 
 +  * [[https://www.linkedin.com/pulse/l1-l2-regularization-why-neededwhat-doeshow-helps-ravi-shankar/|L1, L2 Regularization – Why needed/What it does/How it helps?]] 
 +  * [[https://www.linkedin.com/pulse/bias-variance-tradeoff-what-why-important-ravi-shankar|Bias-Variance Tradeoff: What is it and why is it important?]] 
 +  * {{ :clase:iabd:pia:regulation_techniques_for_multicollinearity-lasso_ridge_and_elastic_nets.pdf |Regulation Techniques for Multicollinearity: Lasso, Ridge, and Elastic Nets}} 
 +  * [[https://stats.stackexchange.com/questions/151304/why-is-ridge-regression-called-ridge-why-is-it-needed-and-what-happens-when|Why is ridge regression called "ridge", why is it needed, and what happens when λ goes to infinity?]] 
 +  * {{ :clase:iabd:pia:2eval:shrinkage_ridge_regression_subset_selection_and_lasso.pdf |}} 
 +  * [[https://ichi.pro/es/de-la-regresion-lineal-a-la-regresion-de-crestas-el-lazo-y-la-red-elastica-86512636393446|De la regresión lineal a la regresión de crestas, el lazo y la red elástica]]: Están las gráficas de L1, L2 pero también L1+L2 
 +  * [[https://www.youtube.com/watch?v=MgEp4Gb9TCA|No Todas las Bolas Son Redondas | Cuando π ≠ 3,14...]] 
 +  * [[https://salvatore-raieli.medium.com/a-complete-guide-to-linear-regression-using-gene-expression-data-regularization-f980ba6b11f7|A complete guide to linear regression using gene expression data: regularization]] 
 + 
 + 
 +===== Regularización en Keras =====
  
 Los regularizadores se pueden aplicar tanto a los ''w'' como a los ''b'': Los regularizadores se pueden aplicar tanto a los ''w'' como a los ''b'':
Línea 59: Línea 96:
 </sxh> </sxh>
  
-Los valores de ''l1'', ''l2'' que se pasa a los regularizadores es cuanto queremos que regularicemos. Si vale 0, no se regulariza nada. Si vale 1 se regulariza muchísimo.+Los valores de ''l1'', ''l2'' que se pasa a los regularizadores es la tasa de regularización o cantidad de regularización y es cuanto queremos que regularicemos. Si vale 0, no se regulariza nada. Si vale 1 se regulariza muchísimo.
  
 <note> <note>
 Como vemos el regularizador se puede indicar creando la clase para indicar el nivel de regularización o simplemente con un string e indicando el nombre. Como vemos el regularizador se puede indicar creando la clase para indicar el nivel de regularización o simplemente con un string e indicando el nombre.
 </note> </note>
 +
 +===== Analizando la regularización =====
  
 Vamos a ver como funcionan los distintos regularizadores y con distintos valores: Vamos a ver como funcionan los distintos regularizadores y con distintos valores:
Línea 69: Línea 108:
 {{:clase:iabd:pia:2eval:regularizacion_exp.png?1000|}}  {{:clase:iabd:pia:2eval:regularizacion_exp.png?1000|}} 
  
 +  * En la siguiente gráfica vamos a mostrar el valor de la pérdida en la **última época** en función del nivel de regularización:
  
-En la siguiente gráfica vamos a mostrar el valor de la pérdida en la última época en función del nivel de regularización:+{{:clase:iabd:pia:2eval:regularizacion_vs_loss.png?direct|}}
  
-{{:clase:iabd:pia:2eval:regularizacion_vs_loss_exp.png|}}+La línea roja indica para la red sin regularizar el mejor valor de todas las épocas. Es decir es el valor cuando aun no hay sobre ajuste y por lo tanto pocas épocas.  
 +La gráfica muestra la pérdida de la última época para cada tasa de regularización.  
 +Se puede apreciar que con un poco de regularización se mejora la red , pero nunca llega a estar por debajo de la línea roja. Es decir se ve que entrenar más y aplicar regularización no supone ninguna mejora.
  
-Más información: +  En la siguiente gráfica vamos mostrar el valor de la pérdida en la **mejor época** en función del nivel de regularización:
-  [[https://www.tensorflow.org/api_docs/python/tf/keras/regularizers|Module: tf.keras.regularizers]] +
-  * [[https://www.iartificial.net/regularizacion-lasso-l1-ridge-l2-y-elasticnet/|Regularización Lasso L1, Ridge L2 y ElasticNet]]: Fórmulas de L1, L2 y ElasticNet +
-  * [[http://laid.delanover.com/difference-between-l1-and-l2-regularization-implementation-and-visualization-in-tensorflow/|Difference between L1 and L2 regularization, implementation and visualization in Tensorflow]]: Las imágenes en 3D de las 2 regularizaciones. +
-  * [[https://explained.ai/regularization/impl.html|How we express regularization in practice]]: Mas imágenes en 3D de L1 y L2 +
-  * [[https://ichi.pro/es/intuiciones-sobre-la-regularizacion-l1-y-l2-38891695686241|Intuiciones sobre la regularización L1 y L2]]: Explica gracias las derivadas porque L1 hace que el peso sea menor. +
-  * [[https://rorasa.wordpress.com/2012/05/13/l0-norm-l1-norm-l2-norm-l-infinity-norm/|l0-Norm, l1-Norm, l2-Norm, … , l-infinity Norm]]: Las normas (de matemáticas) que se usan en L1 y L2. +
-  [[https://codatalicious.medium.com/regularization-1a186c620598|Regularization]] +
-  [[https://towardsdatascience.com/machine-learning-regularization-techniques-in-real-life-your-dogs-nap-time-as-a-regularized-9c533510fe83|Machine Learning regularization techniques in real life]] +
-  [[https://medium.com/nerd-for-tech/lasso-and-ridge-regularization-simply-explained-d551ee1e47b7|LASSO and Ridge Regularization .. Simply Explained]] +
-  [[https://www.linkedin.com/pulse/l1-l2-regularization-why-neededwhat-doeshow-helps-ravi-shankar/|L1, L2 Regularization – Why needed/What it does/How it helps?]] +
-  * [[https://www.linkedin.com/pulse/bias-variance-tradeoff-what-why-important-ravi-shankar|Bias-Variance Tradeoff: What is it and why is it important?]] +
-  * {{ :clase:iabd:pia:regulation_techniques_for_multicollinearity-lasso_ridge_and_elastic_nets.pdf |Regulation Techniques for Multicollinearity: Lasso, Ridge, and Elastic Nets}} +
-  * [[https://stats.stackexchange.com/questions/151304/why-is-ridge-regression-called-ridge-why-is-it-needed-and-what-happens-when|Why is ridge regression called "ridge", why is it needed, and what happens when λ goes to infinity?]] +
-  * {{ :clase:iabd:pia:2eval:shrinkage_ridge_regression_subset_selection_and_lasso.pdf |}} +
-  * [[https://ichi.pro/es/de-la-regresion-lineal-a-la-regresion-de-crestas-el-lazo-y-la-red-elastica-86512636393446|De la regresión lineal a la regresión de crestas, el lazo y la red elástica]]: Están las gráficas de L1, L2 pero también L1+L2 +
-  * [[https://medium.com/analytics-vidhya/logistic-regression-a3249301b75e|Logistic Regression]]: Explica cosas de L1 y L2 +
-  * [[https://www.youtube.com/watch?v=MgEp4Gb9TCA|No Todas las Bolas Son Redondas | Cuando π ≠ 3,14...]] +
-  * [[https://salvatore-raieli.medium.com/a-complete-guide-to-linear-regression-using-gene-expression-data-regularization-f980ba6b11f7|A complete guide to linear regression using gene expression dataregularization]]+
  
 +{{:clase:iabd:pia:2eval:regularizacion_vs_loss_mejor_epoca.png?direct|}}
 +
 +
 +Esta gráfica es similar a la anterior pero ahora se muestra la mejor pérdida (para cualquier época) en vez de la perdida de la última época.En ese caso la línea roja coincide con el primer punto de "Val loss" ya que es cuando no hay  regularización. En ese caso también se ve que entrenar más y aplicar regularización no supone ninguna mejora en ninguna de las épocas.
 +
 +
 +<note >
 +La conclusión con estas gráficas es que hay que valorar entre 2 opciones:
 +  * Entrenar pocas épocas antes de que haya sobreajuste y no necesitar ninguna regularización.
 +  * Entrenar durante muchas épocas aunque haya sobreajuste y aplicar regularización
 +
 +La opción a elegir dependerá del problema y hay que probar ambas opciones para saber cual es la mejor opción.
 +</note>
 +
 +<note tip>
 +Aunque una regla es que si elegimos entrenar durante pocas épocas antes del sobre ajuste pero el rendimiento no es satisfactorio, entonces deberemos entrenar durante más épocas aunque tengamos sobre ajuste y aplicar la regularización
 +</note>
  
-==== Dropout ====+===== Dropout =====
 El Dropout consiste en hacer que ciertas neuronas se vayan desactivando cada vez en el **entrenamiento**.  El Dropout consiste en hacer que ciertas neuronas se vayan desactivando cada vez en el **entrenamiento**. 
  
Línea 116: Línea 157:
   * Normalization    * Normalization 
   * Tamaño de Batch   * Tamaño de Batch
 +  * Batch Normalization
   * Parada anticipada   * Parada anticipada
  
  
-==== Normalization ====+===== Normalization =====
 La normalización consiste es que los datos de entrada estén centrado en 0 y una desviación "pequeña" La normalización consiste es que los datos de entrada estén centrado en 0 y una desviación "pequeña"
 Esto se hace porque la red va a entrenarse mejor si los datos son "pequeños" y todos en la misma escala ya que así funciona mejor el algoritmo del descenso de gradiente. Esto se hace porque la red va a entrenarse mejor si los datos son "pequeños" y todos en la misma escala ya que así funciona mejor el algoritmo del descenso de gradiente.
Línea 208: Línea 250:
 </sxh> </sxh>
  
-==== Batch Normalization ====+===== Batch Normalization =====
 Hace que las salida sigan con valores alrededor de media 0 y desviación 1. Hace que las salida sigan con valores alrededor de media 0 y desviación 1.
  
Línea 216: Línea 258:
 </sxh> </sxh>
  
-==== Tamaño del Batch  ====+===== Tamaño del Batch  =====
 <sxh python> <sxh python>
 history=model.fit(x_train,y_train,validation_data=(x_test,y_test),epochs=40,verbose=False,batch_size=20) history=model.fit(x_train,y_train,validation_data=(x_test,y_test),epochs=40,verbose=False,batch_size=20)
Línea 243: Línea 285:
  
  
-==== Parada anticipada ====+===== Parada anticipada =====
 La parada anticipada resuelve el problema de cuántas épocas debemos entregar nuestro modelo. Lo que hace es detener el entrenamiento si la métrica no mejora. Para ello se usa la clase de callback de keras llamado ''EarlyStopping()''. La parada anticipada resuelve el problema de cuántas épocas debemos entregar nuestro modelo. Lo que hace es detener el entrenamiento si la métrica no mejora. Para ello se usa la clase de callback de keras llamado ''EarlyStopping()''.
  
Línea 261: Línea 303:
 Más información: Más información:
   * [[https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/EarlyStopping| tf.keras.callbacks.EarlyStopping]]   * [[https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/EarlyStopping| tf.keras.callbacks.EarlyStopping]]
-  * [[https://keras.io/api/callbacks/early_stopping/|Keras callback EarlyStopping]] 
   * [[https://towardsdatascience.com/a-practical-introduction-to-early-stopping-in-machine-learning-550ac88bc8fd|Early Stopping in Practice: an example with Keras and TensorFlow 2.0]]   * [[https://towardsdatascience.com/a-practical-introduction-to-early-stopping-in-machine-learning-550ac88bc8fd|Early Stopping in Practice: an example with Keras and TensorFlow 2.0]]
 +
 +===== Ejercicios =====
 +
 +==== Ejercicio 1 ====
 +Crea una red neuronal para predecir si una persona va a tener una enfermedad cardíaca. Para ello se han usado los datos de {{https://www.kaggle.com/datasets/alexteboul/heart-disease-health-indicators-dataset}}.
 +
 +Las columnas del dataset son las siguientes:
 +
 +  * HeartDiseaseorAttack: Indica si el individuo ha experimentado una enfermedad cardíaca o un ataque al corazón. Es lo que hay que predecir.
 +  * HighBP: Indica si el individuo tiene presión arterial alta.
 +  * HighChol: Indica si el individuo tiene niveles altos de colesterol.
 +  * CholCheck: Indica si el individuo ha realizado chequeos de colesterol.
 +  * BMI: Índice de Masa Corporal del individuo.
 +  * Smoker: Indica si el individuo fuma.
 +  * Stroke: Indica si el individuo ha experimentado un derrame cerebral.
 +  * Diabetes: Indica si el individuo tiene diabetes.
 +  * PhysActivity: Nivel de actividad física del individuo.
 +  * Fruits: Consumo de frutas por parte del individuo.
 +  * Veggies: Consumo de vegetales por parte del individuo.
 +  * HvyAlcoholConsump: Indica si el individuo consume mucho alcohol 
 +  * AnyHealthcare: Indica si el individuo tiene acceso a algún tipo de atención médica.
 +  * NoDocbcCost: Indica si el individuo tiene costos médicos sin documentar.
 +  * GenHlth: Estado general de salud del individuo.
 +  * MentHlth: Estado de salud mental del individuo.
 +  * PhysHlth: Estado de salud física del individuo.
 +  * DiffWalk: Dificultad para caminar del individuo.
 +  * Sex: Género del individuo.
 +  * Age: Edad del individuo.
 +  * Education: Nivel educativo del individuo.
 +  * Income: Ingreso económico del individuo.
 +
 +
 +Los datos son los siguientes: {{ :clase:iabd:pia:2eval:heart_disease_health_indicators_brfss2015.csv.zip |}}
  
  
clase/iabd/pia/2eval/tema08.1683933092.txt.gz · Última modificación: 2023/05/13 01:11 por admin