Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa Próxima revisión Ambos lados, revisión siguiente | ||
clase:iabd:pia:1eval:tema04 [2022/12/11 13:50] admin [Ejercicios] |
clase:iabd:pia:1eval:tema04 [2023/12/13 13:22] admin [Ejercicios] |
||
---|---|---|---|
Línea 195: | Línea 195: | ||
===== Figura ===== | ===== Figura ===== | ||
Acabamos de ver como colocar cada gráfica dentro de la figura. Ahora veremos unas cosas mas sobre ella. | Acabamos de ver como colocar cada gráfica dentro de la figura. Ahora veremos unas cosas mas sobre ella. | ||
+ | |||
* Para hacer la figura mas grande solo hay que indicar el tamaño con el argumento '' | * Para hacer la figura mas grande solo hay que indicar el tamaño con el argumento '' | ||
Línea 223: | Línea 224: | ||
+ | ==== Subfiguras ==== | ||
+ | Además de '' | ||
+ | Para ello se usa el método '' | ||
- | ===== Proyecciones | + | <sxh python> |
+ | subfigure_a, | ||
+ | </ | ||
+ | |||
+ | Veamos un ejemplo: | ||
+ | |||
+ | <sxh python> | ||
+ | import matplotlib.pyplot as plt | ||
+ | |||
+ | figure=plt.figure(figsize=(8, 6),layout=' | ||
+ | figure.suptitle(" | ||
+ | |||
+ | subfigure_a, | ||
+ | |||
+ | subfigure_a.suptitle(" | ||
+ | axes_1 = subfigure_a.add_subplot(1, | ||
+ | axes_1.set_title(" | ||
+ | axes_2 = subfigure_a.add_subplot(1, | ||
+ | axes_2.set_title(" | ||
+ | |||
+ | subfigure_b.suptitle(" | ||
+ | axes_3 = subfigure_b.add_subplot(1, | ||
+ | axes_3.set_title(" | ||
+ | axes_4 = subfigure_b.add_subplot(1, | ||
+ | axes_4.set_title(" | ||
+ | </ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | ==== Proyecciones | ||
Indicar como es la proyección de los ejes. | Indicar como es la proyección de los ejes. | ||
Línea 251: | Línea 285: | ||
{{: | {{: | ||
+ | |||
+ | ==== Clase Figura ==== | ||
+ | La siguiente clase permite simplificar la creación de '' | ||
+ | <sxh python> | ||
+ | class Figura: | ||
+ | def __init__(self, | ||
+ | self.ncols=ncols | ||
+ | self.num_axes=naxes | ||
+ | self.nrows=math.ceil(naxes/ | ||
+ | if height_axes==None: | ||
+ | height_axes=axes_width*0.86 | ||
+ | |||
+ | self.figure, | ||
+ | layout=" | ||
+ | |||
+ | if isinstance(self.arr_axes, | ||
+ | self.arr_axes=np.array([[self.arr_axes]]) | ||
+ | |||
+ | for axes in np.array(self.arr_axes).reshape(-1): | ||
+ | self._visible_axes(axes, | ||
+ | |||
+ | def get_figure(self): | ||
+ | return self.figure | ||
+ | |||
+ | def get_axes(self, | ||
+ | col=index % self.ncols | ||
+ | row=math.ceil((index+1)/ | ||
+ | axes=self.arr_axes[row, | ||
+ | self._visible_axes(axes, | ||
+ | return axes | ||
+ | |||
+ | def _visible_axes(self, | ||
+ | axes.get_xaxis().set_visible(visible) | ||
+ | axes.get_yaxis().set_visible(visible) | ||
+ | axes.spines[' | ||
+ | axes.spines[' | ||
+ | axes.spines[' | ||
+ | axes.spines[' | ||
+ | </ | ||
+ | |||
+ | |||
+ | El uso de la clase es la siguiente. | ||
+ | |||
+ | Imagina que quieres mostrar 10 '' | ||
+ | |||
+ | <sxh python> | ||
+ | figura=Figura(ncols=3, | ||
+ | |||
+ | for index in range(0, | ||
+ | axes=figura.get_axes(index) | ||
+ | </ | ||
+ | |||
+ | |||
+ | La ventaja de esta clase es que no te tienes que preocupar del número de filas que va a haber. | ||
===== Dibujando en 2D ===== | ===== Dibujando en 2D ===== | ||
Ahora veamos una serie de métodos para dibujar en un '' | Ahora veamos una serie de métodos para dibujar en un '' | ||
Línea 421: | Línea 509: | ||
</ | </ | ||
- | * Otra forma de dibujar superficies en 3D es mostrar el eje Z como colores similar a las curvas de nivel en los mapas topográficos, | + | * Otra forma de dibujar superficies en 3D es mostrar el eje Z como colores similar a las curvas de nivel en los mapas topográficos, |
<sxh python> | <sxh python> | ||
Línea 692: | Línea 780: | ||
{{: | {{: | ||
+ | |||
+ | También podemos obtener el siguiente color que vamos a usar con: | ||
+ | <sxh python> | ||
+ | color=next(axes._get_lines.prop_cycler)[' | ||
+ | </ | ||
+ | |||
+ | <note tip> | ||
+ | Destacar que al obtener el siguiente color ya no se usará ya que ese color se ha " | ||
+ | Aunque obviamente se podría usar el color ya que tenemos el color en la variable '' | ||
+ | </ | ||
* Con el método '' | * Con el método '' | ||
Línea 778: | Línea 876: | ||
<sxh python> | <sxh python> | ||
axes.grid(visible=True, | axes.grid(visible=True, | ||
+ | axes.set_axisbelow(True) | ||
</ | </ | ||
- | {{: | + | {{: |
+ | |||
+ | <note tip> | ||
+ | Incluir '' | ||
+ | </ | ||
<note tip> | <note tip> | ||
Línea 844: | Línea 947: | ||
{{: | {{: | ||
+ | |||
==== Superficies ==== | ==== Superficies ==== | ||
Línea 1348: | Línea 1452: | ||
<sxh python> | <sxh python> | ||
+ | import numpy as np | ||
+ | import pandas as pd | ||
import seaborn as sns | import seaborn as sns | ||
+ | from sklearn.datasets import load_iris | ||
+ | |||
+ | iris=load_iris() | ||
+ | |||
+ | #Obtener los datos | ||
+ | data=iris.data | ||
+ | target=iris.target | ||
+ | |||
+ | feature_names=[' | ||
+ | target_names=[' | ||
+ | target_unique=[0, | ||
+ | |||
+ | #Crear el DataFrame con los datos | ||
+ | df=pd.DataFrame(data, | ||
+ | df[' | ||
+ | df[' | ||
- | iris =sns.load_dataset(" | ||
- | sns.pairplot(iris,hue="species") | + | #Crear el gráfico |
+ | sns.pairplot(df,hue="flores") | ||
</ | </ | ||
Línea 1361: | Línea 1483: | ||
* Eje X: Nº de época | * Eje X: Nº de época | ||
* Eje Y: Valor de la función de pérdida. Recuerda que los datos están en '' | * Eje Y: Valor de la función de pérdida. Recuerda que los datos están en '' | ||
- | * El título del subplot constará | + | |
- | | + | |
- | * Etiqueta | + | * Eje X: |
- | * Se usarán 100 épocas | + | * El //label// será "Nº Épocas", |
+ | * Los números que parecerán serán siempre | ||
+ | * Eje Y: | ||
+ | * El //label// será " | ||
+ | | ||
+ | * Los números a salir los números | ||
+ | * El título del subplot será "Red:" | ||
+ | * El color del fondo es ''# | ||
+ | * Que se vea el grid de los ejes de color blanco con ancho de las líneas de 2 píxeles. | ||
+ | * Para que la línea salga punteada para ello usa '' | ||
+ | * El número que se muestra en la leyenda es "loss entrenamiento:" | ||
- | Indica a partir de que época ya no habría sido necesario seguir entrenando la red. | ||
- | ==== Ejercicio 23.B ==== | ||
- | Crea una función de Python llamada '' | ||
- | A la función la debes llamar de usa forma similar a la siguiente: | ||
- | <sxh python> | + | **Para el entrenamiento se usarán 40 épocas** |
- | figure=plt.figure() | + | |
- | axes = figure.add_subplot() | + | |
- | history=model.fit() | + | |
- | plot_metrics(axes, | + | {{ : |
- | </ | + | |
- | y debe mostrar | + | ==== Ejercicio 23.B ==== |
+ | Crea una función de Python llamada '' | ||
- | {{ :clase: | + | A la función la debes llamar de usa forma similar a la siguiente: |
- | *Para que el eje X siempre sean números enteros, debes añadir la siguiente línea: | ||
<sxh python> | <sxh python> | ||
- | from matplotlib.ticker import MaxNLocator | + | history=model.fit(x, y, |
- | axes.xaxis.set_major_locator(MaxNLocator(integer=True)) | + | figure=plt.figure(figsize=(7, 5)) |
+ | axes = figure.add_subplot(1, | ||
+ | |||
+ | plot_metrics(axes, | ||
</ | </ | ||
- | * El color del fondo es ''# | ||
- | * El número que se muestra en la leyenda es el valor en la última época | ||
- | * Para que la línea salga punteada usa '' | ||
- | * Para sean del mismo color , calcula el color con '' | ||
- | * El eje Y siempre va de 0 a 1.1 | ||
- | * Siempre deben salir los números del eje Y: 0.1, 0.2, etc. | ||
Línea 1404: | Línea 1525: | ||
^ Nº Neuronas en cada capa ^ | ^ Nº Neuronas en cada capa ^ | ||
- | | 2, | + | | 4, 8, 4, 2, 1 | |
- | | 4, | + | | 8, 16, 8, 4, 1 | |
- | | 8, | + | | 16, 32, 16, 8, 1 | |
- | | 4, | + | | 32, 64, 32, 8, 1 | |
- | | 8, | + | | 64, 128, 64, 8, 1 | |
- | | 16, | + | |
- | | 32, | + | |
- | | 64,128,64,8,1 | | + | |
- | | 8, | + | |
Además: | Además: | ||
- | * Deberás mostrar los 9 subplots en la disposición de 3x3 | + | * Deberás mostrar los 5 subplots en la disposición de 2 filas y 3 columnas |
* El título de la figura será "Redes flores" | * El título de la figura será "Redes flores" | ||
- | * El título | + | * El Nº de épocas |
- | * | + | |
Indica para cada red, a partir de que época ya no habría sido necesario seguir entrenando dicha red y cuales son las mejores redes | Indica para cada red, a partir de que época ya no habría sido necesario seguir entrenando dicha red y cuales son las mejores redes | ||
+ | {{ : | ||
+ | |||
+ | |||
+ | ==== Ejercicio 23.D ==== | ||
+ | Repite el ejercicio anterior pero ahora divide los datos en entrenamiento y validación. | ||
+ | |||
+ | Para ello usa la función '' | ||
+ | |||
+ | <sxh python> | ||
+ | from sklearn.model_selection import train_test_split | ||
+ | |||
+ | x_train, x_test, y_train, y_test = train_test_split(x, | ||
+ | </ | ||
+ | |||
+ | El parámetro '' | ||
+ | |||
+ | Ahora deberás indicar en el método '' | ||
+ | |||
+ | <sxh python> | ||
+ | history=model.fit(x_train, | ||
+ | </ | ||
+ | |||
+ | Para acabar ahora están las métricas de: | ||
+ | * '' | ||
+ | * '' | ||
+ | Al mostrar la gráfica, muestra tanto '' | ||
+ | {{: | ||