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 | ||
clase:iabd:pia:1eval:tema04 [2022/12/11 13:50] admin [Ejercicios] |
clase:iabd:pia:1eval:tema04 [2024/09/10 18:22] (actual) admin [Dibujando en 3D] |
||
---|---|---|---|
Línea 28: | Línea 28: | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
+ | |||
+ | |||
+ | Antes de empezar mira estas 2 gráficas (Shelly y Tuya) y dime si se parecen: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Obviamente no se parecen | ||
+ | |||
+ | Y ahora mira esta otra gráfica y dime si ahora se parecen (Shelly y Tuya): | ||
+ | |||
+ | {{: | ||
+ | |||
+ | En esta se parecen más. | ||
+ | |||
+ | Realmente la primera gráfica es el final de la segunda gráfica pero ambas gráficas están en una escala distinta. | ||
+ | |||
+ | El ejemplo está puesto para que se vea como se interpreta de una forma u otra una gráfica según la escala a la que esté. La primera gráfica está en la escala [ 650 W - 1050 W ] mientras que la segunda gráfica su escala es [0 W - 2500 W] | ||
+ | |||
+ | Por lo tanto, intenta que siempre las gráficas empiecen los ejes en 0. | ||
===== Instalación e importación===== | ===== Instalación e importación===== | ||
Línea 195: | Línea 214: | ||
===== 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 243: | ||
+ | ==== 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 304: | ||
{{: | {{: | ||
+ | |||
+ | ==== 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 axes_height_inches==None: | ||
+ | axes_height_inches=axes_width_inches*0.86 | ||
+ | |||
+ | self.figure, | ||
+ | layout=" | ||
+ | |||
+ | if isinstance(self.arr_axes, | ||
+ | self.arr_axes=np.array([[self.arr_axes]]) | ||
+ | |||
+ | def get_axes(self): | ||
+ | return np.array(self.arr_axes).reshape(-1) | ||
+ | </ | ||
+ | |||
+ | |||
+ | El uso de la clase es la siguiente. | ||
+ | |||
+ | Imagina que quieres mostrar 12 '' | ||
+ | |||
+ | <sxh python> | ||
+ | figura=Figura(ncols=3, | ||
+ | |||
+ | for axes in figura.get_axes(): | ||
+ | axes.plot() | ||
+ | </ | ||
+ | |||
+ | |||
+ | La ventaja de esta clase es que no te tienes que preocupar del número de filas que va a haber. Que en este caso serán 4 | ||
===== 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 510: | ||
</ | </ | ||
- | * 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 435: | Línea 524: | ||
z = 3*(1 - x)**2 * np.exp(-x**2 - (y + 1)**2) | z = 3*(1 - x)**2 * np.exp(-x**2 - (y + 1)**2) | ||
- | axes.contourf(x, | + | axes.contourf(x, |
</ | </ | ||
Línea 692: | Línea 781: | ||
{{: | {{: | ||
+ | |||
+ | 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 877: | ||
<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 948: | ||
{{: | {{: | ||
+ | |||
==== Superficies ==== | ==== Superficies ==== | ||
Línea 902: | Línea 1007: | ||
{{: | {{: | ||
+ | ==== Estableciendo el estilo ==== | ||
+ | Es posible establecer el estilo general que usan los gráficos en mathplotlib. Es decir que tengan ya un aspecto predefinido. | ||
+ | |||
+ | Simplemente con la línea '' | ||
+ | |||
+ | Haciendo que los gráficos pasen de tener este estilo por defecto: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | a tener este otro estilo: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Para saber los posibles estilos que hay , solo tenemos que ejecutar: | ||
+ | <sxh python> | ||
+ | print(plt.style.available) | ||
+ | </ | ||
+ | |||
+ | <sxh python> | ||
+ | [ | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ] | ||
+ | </ | ||
+ | |||
+ | Como podemos ver hay muchos estilos relacionados con [[https:// | ||
===== Ejercicios ===== | ===== Ejercicios ===== | ||
Línea 1348: | Línea 1484: | ||
<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 1515: | ||
* 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 1557: | ||
^ 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 '' | ||
+ | {{: | ||