# Bloc [4] Importaciones de librerías
import matplotlib.pyplot as plt
import numpy as np # <-- FALTABA
from sklearn.datasets import make_circles
from sklearn.neural_network import MLPClassifier
import ipywidgets as widgets
from IPython.display import display
from ipywidgets import interactive
# Bloc [4.1] Generar los datos de prueba (FALTABA)
x, y = make_circles(n_samples=200, noise=0.2, factor=0.5, random_state=42)
# Bloc [5] Función para actualizar y mostrar el gráfico
def update_plot(hidden_layer_size):
# Crear y entrenar el clasificador
clf = MLPClassifier(
hidden_layer_sizes=(hidden_layer_size,),
activation='relu',
max_iter=3000,
random_state=1
)
clf.fit(x, y)
# Crear cuadrícula para la frontera de decisión
x_vals = np.linspace(x[:, 0].min() - 0.1, x[:, 0].max() + 0.1, 100)
y_vals = np.linspace(x[:, 1].min() - 0.1, x[:, 1].max() + 0.1, 100)
X_plane, Y_plane = np.meshgrid(x_vals, y_vals)
grid_points = np.column_stack((X_plane.ravel(), Y_plane.ravel()))
# Predecir clases
Z = clf.predict(grid_points).reshape(X_plane.shape)
y_pred = clf.predict(x)
# Graficar
plt.clf()
plt.contourf(
X_plane,
Y_plane,
Z,
levels=[-0.5, 0.5, 1.5],
cmap=plt.cm.RdYlGn,
alpha=0.6
)
class_0 = y_pred == 0
class_1 = y_pred == 1
plt.scatter(
x[class_0, 0], x[class_0, 1],
c='red', edgecolors='k', marker='o', s=50, label='Predicted Class 0'
)
plt.scatter(
x[class_1, 0], x[class_1, 1],
c='green', edgecolors='k', marker='o', s=50, label='Predicted Class 1'
)
plt.xlabel('Característica 1')
plt.ylabel('Característica 2')
plt.title(f'Frontera de decisión (Capa oculta: {hidden_layer_size} neuronas)')
plt.legend()
plt.show()
# Bloc [6] Crear el slider y el widget interactivo
hidden_layer_size_slider = widgets.IntSlider(
value=1,
min=1,
max=10,
step=1,
description='Capa oculta:'
)
interactive_plot = interactive(
update_plot,
hidden_layer_size=hidden_layer_size_slider
)
# Bloc [7] Mostrar el widget
display(interactive_plot)
