Herramientas de usuario

Herramientas del sitio


clase:iabd:pia:1eval:tema03

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:1eval:tema03 [2024/11/23 20:43]
admin [Mini-proyecto]
clase:iabd:pia:1eval:tema03 [2024/11/27 10:24] (actual)
admin [Mini-proyecto]
Línea 1590: Línea 1590:
 Realiza lo siguiente: Realiza lo siguiente:
   * Crea una array de numpy en base a los datos.   * Crea una array de numpy en base a los datos.
-  * Obtén un array llamado ''x'' con los datos de entrada a la red neuronal +  * Obtén una "columna" llamada ''x_entrenamiento'' con los datos de entrada a la red neuronal 
-  * Obtén un array llamado ''y'' con los datos de salida de la red neuronal+  * Obtén una "columna" llamada ''y_entrenamiento'' con los datos de salida de la red neuronal
  
  
Línea 1619: Línea 1619:
 </sxh> </sxh>
  
-  * Modifica la función ''compile_fit'' para que el número de datos de entrada a la red sea una única columna es decir que la ''x'' solo tiene una columna de datos.+  * Modifica la función ''compile_fit'' para que el número de datos de entrada a la red sea el número de columnas de ''x'', es decir modifica ''input_dim''
   * Modifica la función de activación de la última capa para que sea la función de activación ''linear''.   * Modifica la función de activación de la última capa para que sea la función de activación ''linear''.
-  * Crea una red neuronal y entrenala con la siguientes capas ''5,10,15,10,1''+  * Añade un parámetros llamado ''epochs'' que sea el número de épocas a antrenar 
 +  * Crea una red neuronal y entrenala con
 +    * Capas: 5,10,15,10,1 
 +    * Épocas: 5000 
 + 
 +<note tip> 
 +En el resto de pasos, si no decimos lo contrario se entrenarán las redes con 5000 épocas. 
 +</note>
  
 ==== Paso 3 ==== ==== Paso 3 ====
Línea 1633: Línea 1640:
  
 Para ello: Para ello:
-  * Crea un array con los datos de entrada a predecir ''[ 2.01666708, 4.79734083, 9.23784581, 14.11529384 ]'' de forma que sea una columna y llámalo ''x_paso3'' +  * Crea un array con los datos de entrada a predecir ''[ 2.01666708, 4.79734083, 9.23784581, 14.11529384 ]'' de forma que sea **una columna** y llámalo ''x_paso3'' 
-  * Crea un array con los datos de salida verdaderos ''[ 56.18031474, 47.18848199, 57.68974048, 43.70348368]'' de forma que sea una columna  y llámalo ''y_true_paso3''+  * Crea un array con los datos de salida verdaderos ''[ 56.18031474, 47.18848199, 57.68974048, 43.70348368]'' de forma que sea **una columna**  y llámalo ''y_true_paso3''
   * Usando el modelo predice las salidas predichas y llámalo ''y_pred_paso3''   * Usando el modelo predice las salidas predichas y llámalo ''y_pred_paso3''
-  * Resta el valor de ''y_true_paso3'' a ''y_pred_paso3'' y elévalo al cuadrado y llámalo ''error_paso3''  +  * Resta el valor de ''y_true_paso3'' a ''y_pred_paso3'' y elévalo al cuadrado y llámalo ''error_paso3'' : $|y\_true_{i} - y\_pred_i |^2$
   * Une los 4 arrays es una matriz donde cada columna sea cada uno de los arrays y llámala ''resultado_paso3''   * Une los 4 arrays es una matriz donde cada columna sea cada uno de los arrays y llámala ''resultado_paso3''
   * Muestra el array con la función ''tabulate''   * Muestra el array con la función ''tabulate''
Línea 1688: Línea 1695:
  
 ==== Paso 8 ==== ==== Paso 8 ====
-  * Modifica la función ''compile_fit(capas,x,y,activation)'' de forma que ahora acepte un nuevo parámetro que sea la función de activación para que no sea siempre ''relu''.+  * Modifica la función para que quede de la siguiente forma:''compile_fit(capas,x,y,epochs,activation)''. Es decirque ahora acepte un nuevo parámetro que sea la función de activación para que no sea siempre ''relu''.
   * Crea una red neuronal y entrenala con la siguientes capas ''20,40,80,40,20,1'' y función de activación ''selu''   * Crea una red neuronal y entrenala con la siguientes capas ''20,40,80,40,20,1'' y función de activación ''selu''
   * Muestra el //Error cuadrático medio// y el // Coeficiente de determinación// con todos los datos    * Muestra el //Error cuadrático medio// y el // Coeficiente de determinación// con todos los datos 
Línea 1713: Línea 1720:
  
 <sxh base> <sxh base>
-  Nombre  Capas                             Activación         MSE           R²           Tiempo +  Nombre  Capas                               Épocas  Activación         MSE           R²           Tiempo 
-     Red                                                                           Entrenamiento +     Red                                                                                     Entrenamiento 
---------  --------------------------------  ------------  --------  -----------  --------------- +--------  --------------------------------  --------  ------------  --------  -----------  --------------- 
-        [5, 10, 3, 10, 1]                 relu           718.298   0.748316            3.65956 +        [5, 10, 30, 10, 1]                    5000  relu           699.522   0.754894            6.10154 
-        [5, 10, 3, 10, 1]                 selu           717.653   0.748541            3.55776 +        [5, 10, 30, 10, 1]                    5000  selu           566.064   0.801657            6.25237 
-        [5, 10, 3, 10, 1]                 tanh          5941.53   -1.08185             3.56904 +        [5, 10, 30, 10, 1]                    5000  tanh          5790.5    -1.02893             6.10966 
-        [20, 40, 80, 40, 20, 1]           relu           539.139   0.811091            3.73627 +        [20, 40, 80, 40, 20, 1]               5000  relu           564.339   0.802261            6.27882 
-        [20, 40, 80, 40, 20, 1]           selu           182.719   0.935977            3.77469 +        [20, 40, 80, 40, 20, 1]               5000  selu           195.545   0.931483            6.34035 
-        [20, 40, 80, 40, 20, 1]           tanh          2883.8    -0.0104537           4.15266 +        [20, 40, 80, 40, 20, 1]               5000  tanh          2869.38   -0.00540068          6.36284 
-        [20, 40, 80, 160, 80, 40, 20, 1]  relu           396.495   0.861072            4.4596 +        [20, 40, 80, 160, 80, 40, 20, 1]      5000  relu           530.207   0.814221            6.67132 
-        [20, 40, 80, 160, 80, 40, 20, 1]  selu           172.284   0.939634            4.55103 +        [20, 40, 80, 160, 80, 40, 20, 1]      5000  selu           141.506   0.950418            6.8306 
-        [20, 40, 80, 160, 80, 40, 20, 1]  tanh          2866.53   -0.00440395          4.48001 +        [20, 40, 80, 160, 80, 40, 20, 1]      5000  tanh          2870.34   -0.00573854          6.91749
- +
 </sxh> </sxh>
 +
 +Deberás volver a modificar la función ''compile_fit(capas,x,y,epochs,activation)'' para que ahora retorne como tercer parámetro el ''tiempo_entrenamiento''
  
  
Línea 1753: Línea 1760:
  
 <sxh base> <sxh base>
-  Nombre  Capas                             Activación                MSE               R²           Tiempo           MSE            R² +  Nombre  Capas                               Épocas  Activación                MSE               R²           Tiempo           MSE            R² 
-     Red                                                    Entrenamiento    Entrenamiento    Entrenamiento    Validación    Validación +     Red                                                              Entrenamiento    Entrenamiento    Entrenamiento    Validación    Validación 
---------  --------------------------------  ------------  ---------------  ---------------  ---------------  ------------  ------------ +--------  --------------------------------  --------  ------------  ---------------  ---------------  ---------------  ------------  ------------ 
-        [5, 10, 3, 10, 1]                 relu                  718.298       0.748316            3.58399       862.985     0.567329 +        [5, 10, 30, 10, 1]                    5000  relu                  699.522       0.754894            6.16381       945.903     0.525757 
-        [5, 10, 3, 10, 1]                 selu                  717.653       0.748541            4.20024       798.624     0.599598 +        [5, 10, 30, 10, 1]                    5000  selu                  566.064       0.801657            6.07553       844.042     0.576827 
-        [5, 10, 3, 10, 1]                 tanh                 5941.53       -1.08185             3.72841      3753.3      -0.881774 +        [5, 10, 30, 10, 1]                    5000  tanh                 5790.5        -1.02893             6.0547       3639.78     -0.82486 
-        [20, 40, 80, 40, 20, 1]           relu                  539.139       0.811091            3.76963       846.146     0.575772 +        [20, 40, 80, 40, 20, 1]               5000  relu                  564.339       0.802261            6.17346      1008.44      0.494402 
-        [20, 40, 80, 40, 20, 1]           selu                  182.719       0.935977            3.75649      1051.1       0.473016 +        [20, 40, 80, 40, 20, 1]               5000  selu                  195.545       0.931483            6.49106       865.301     0.566168 
-        [20, 40, 80, 40, 20, 1]           tanh                 2883.8        -0.0104537           3.67267      2061.24     -0.0334357 +        [20, 40, 80, 40, 20, 1]               5000  tanh                 2869.38       -0.00540068          6.28845      2088.69     -0.0471974 
-        [20, 40, 80, 160, 80, 40, 20, 1]  relu                  396.495       0.861072            4.18359       990.747     0.503274 +        [20, 40, 80, 160, 80, 40, 20, 1]      5000  relu                  530.207       0.814221            6.70275       937.015     0.530213 
-        [20, 40, 80, 160, 80, 40, 20, 1]  selu                  172.284       0.939634            4.39513       898.996     0.549275 +        [20, 40, 80, 160, 80, 40, 20, 1]      5000  selu                  141.506       0.950418            6.77586       998.083     0.499596 
-        [20, 40, 80, 160, 80, 40, 20, 1]  tanh                 2866.53       -0.00440395          4.2905       2096.22     -0.0509744+        [20, 40, 80, 160, 80, 40, 20, 1]      5000  tanh                 2870.34       -0.00573854          6.77296      2086.36     -0.0460281
  
 </sxh> </sxh>
  
 Indica ahora según los datos de validación: Indica ahora según los datos de validación:
-  * Cual es la mejor red+  * Cual es la mejor red y porqué crees que ahora es la mejor red al usar los datos de validación
   * En general cual es la mejor y peor función de activación.   * En general cual es la mejor y peor función de activación.
 +
 +==== Paso 11 ====
 +A modo de resumen de todo el mini projecto, vuelve a hacer el ejercicio anterior pero ahora poniendo las últimas versiones de todo el código que has usado.
 +
 +==== Paso 12 ====
 +Ahora vamos a hacer otro mini proyecto usando como base todo el código que hemos creado.
 +
 +El problema a resolver es averiguar el precio,en miles de dolares, de una casa en la ciudad de Boston (target o //Y//). Este es un clásico problema de Machine Learning. Las características (features o //X//) del problema son:
 +
 +  - **Criminalidad per cápita**: Representa la tasa de criminalidad por persona en la ciudad. Un valor más alto indica una mayor tasa de criminalidad.
 +  - **Porcentaje de terrenos residenciales**: Representa el porcentaje de viviendas zonificadas para parcelas de más de 25,000 pies cuadrados. Las áreas con un valor más alto de ZN tienen más zonas residenciales de bajo densidad.
 +  - **Porcentaje de terrenos no comerciales**: Mide el porcentaje de área en la ciudad destinada a áreas industriales. Un valor más alto sugiere una mayor cantidad de industrias en la zona.
 +  - **Proximidad al río Charles**: Es una variable binaria (0 o 1) que indica si la vivienda está cerca (1) o no cerca (0) del río Charles.
 +  - **Concentración de óxidos de nitrógeno**: Representa la concentración de óxidos de nitrógeno (NO) en partes por 10 millones. Esta variable se utiliza como indicador de la calidad del aire. Valores más altos indican una mayor contaminación del aire.
 +  - **Número promedio de habitaciones**: Representa el número promedio de habitaciones en las viviendas. Un valor más alto sugiere casas más grandes.
 +  - **Proporción de viviendas construidas antes de 1940**: Representa el porcentaje de viviendas en la zona que fueron construidas antes de 1940. Los valores más altos indican un mayor envejecimiento de la infraestructura.
 +  - **Distancia a los centros de empleo de Boston**: Es una medida ponderada de la distancia desde una ubicación hasta los centros de empleo más importantes de la ciudad de Boston. Un valor más bajo indica que la vivienda está cerca de centros laborales importantes.
 +  - **Accesibilidad a carreteras radiales**: Representa la accesibilidad a las principales carreteras radiales de Boston. Un valor más alto indica una mejor conectividad con las carreteras importantes.
 +  - **Impuesto sobre la propiedad**: Es el valor del impuesto a la propiedad en la ciudad, en términos de $10,000. Los valores más altos indican mayores impuestos a la propiedad.
 +  - **Proporción de estudiantes por maestro**: Representa la proporción de estudiantes por cada maestro en las escuelas locales. Un valor más bajo indica mejores condiciones en las escuelas, con más maestros por cada estudiante.
 +  - **Proporción de población negra**: Esta variable mide la proporción de la población de raza negra en la zona. Es calculada como 1000 * (proporción de población negra)^2.
 +  - **Porcentaje de población de bajo estatus socioeconómico**: Representa el porcentaje de la población en la zona con un bajo nivel socioeconómico. Valores más altos indican áreas más desfavorecidas económicamente.
 +
 +Con el código que has creado , busca la mejor red neuronal para que dado las características de un casa prediga el precio en miles de dólares de dicha casa
 +
 +Los datos se obtienen de la siguiente forma:
 +
 +<sxh python>
 +from sklearn.model_selection import train_test_split 
 +from sklearn.datasets import fetch_openml
 +
 +def get_datos():
 +    boston=fetch_openml(name="boston",version=1)   
 +    x=np.array(boston.data).astype(np.float32)
 +    y=np.array(boston.target).astype(np.float32)
 +
 +    x_entrenamiento, x_validacion, y_entrenamiento, y_validacion = train_test_split(x, y, test_size=0.2, random_state=42)
 +
 +    return x_entrenamiento, y_entrenamiento.reshape(-1,1), x_validacion, y_validacion.reshape(-1,1)
 +</sxh>
 +
 +Las redes a probar son:
 +<sxh python>
 +redes_neuronales=[
 +    [[20,1],"relu"],
 +    [[20,1],"selu"],
 +    [[20,1],"tanh"],       
 +    [[20,10,1],"relu"],
 +    [[20,10,1],"selu"],
 +    [[20,10,1],"tanh"],        
 +    [[20,30,10,1],"relu"],
 +    [[20,30,10,1],"selu"],
 +    [[20,30,10,1],"tanh"],  
 +    [[20,40,80,40,20,1],"relu"],
 +    [[20,40,80,40,20,1],"selu"],
 +    [[20,40,80,40,20,1],"tanh"],
 +    [[20,40,80,160,80,40,20,1],"relu"],
 +    [[20,40,80,160,80,40,20,1],"selu"],
 +    [[20,40,80,160,80,40,20,1],"tanh"                              
 +]  
 +</sxh>
 +
 +
 +<sxh base>
 +  Nombre  Capas                               Épocas  Activación                MSE               R²           Tiempo           MSE            R²
 +     Red                                                              Entrenamiento    Entrenamiento    Entrenamiento    Validación    Validación
 +--------  --------------------------------  --------  ------------  ---------------  ---------------  ---------------  ------------  ------------
 +        [20, 1]                               1000  relu                 25.9839       0.700899             6.85148       26.1929     0.642826
 +        [20, 1]                               1000  selu                 15.7143       0.819112             6.9331        19.6104     0.732587
 +        [20, 1]                               1000  tanh                 52.4399       0.396364             7.04929       48.1765     0.343052
 +        [20, 10, 1]                           1000  relu                 13.5203       0.844368             7.39035       18.5331     0.747278
 +        [20, 10, 1]                           1000  selu                 15.3826       0.822931             7.63935       20.3983     0.721844
 +        [20, 10, 1]                           1000  tanh                 27.3344       0.685353             7.49861       32.55       0.556139
 +        [20, 30, 10, 1]                       1000  relu                  9.52126      0.890401             7.80591       14.8094     0.798054
 +        [20, 30, 10, 1]                       1000  selu                  9.10227      0.895224             7.62227       14.83       0.797774
 +        [20, 30, 10, 1]                       1000  tanh                 26.3255       0.696967             7.60604       29.6008     0.596355
 +      10  [20, 40, 80, 40, 20, 1]               1000  relu                  4.13976      0.952347             8.31231       22.1935     0.697363
 +      11  [20, 40, 80, 40, 20, 1]               1000  selu                  2.37718      0.972636             8.40947       17.5333     0.760911
 +      12  [20, 40, 80, 40, 20, 1]               1000  tanh                 17.7842       0.795286             8.34862       27.3635     0.626864
 +      13  [20, 40, 80, 160, 80, 40, 20, 1]      1000  relu                  3.40859      0.960764             9.40943       24.3886     0.66743
 +      14  [20, 40, 80, 160, 80, 40, 20, 1]      1000  selu                  2.96527      0.965867             9.57778       21.5213     0.706529
 +      15  [20, 40, 80, 160, 80, 40, 20, 1]      1000  tanh                 86.8838      -0.000119567          9.52437       74.7763    -0.0196708
 +
 +</sxh>
 +
 +<note important>**Por último analiza si este dataset sería ético usarlo en una aplicación real.**</note>
 +
 +
 +
clase/iabd/pia/1eval/tema03.1732391005.txt.gz · Última modificación: 2024/11/23 20:43 por admin