# Comentario: Genera y visualiza varios datasets sinteticos para clasificacion.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons, make_circles, make_classification, make_blobs, make_gaussian_quantiles, make_multilabel_classification
# Función para visualizar los datos con categorías destacadas
def plot_dataset(X, y, title):
plt.figure(figsize=(6, 6))
cmap = plt.get_cmap("Set1", np.unique(y).size)
scatter = plt.scatter(X[:, 0], X[:, 1], c=y, cmap=cmap, edgecolor='k', s=100, alpha=0.7)
plt.title(title, fontsize=14)
plt.xlabel("X1")
plt.ylabel("X2")
plt.colorbar(scatter, ticks=range(np.unique(y).size))
plt.grid(True)
plt.show()
# Generación y visualización de datos usando diferentes métodos
# 1. make_moons - Genera dos conjuntos de datos en forma de media luna.
# - n_samples: número total de puntos (aumentado a 500 para mejor separación)
# - noise: cantidad de ruido aleatorio (0.2 para mantener variabilidad realista)
X, y = make_moons(n_samples=500, noise=0.01, random_state=0)
plot_dataset(X, y, "make_moons - Media Luna")
# 2. make_circles - Genera dos círculos concéntricos.
# - n_samples: número total de puntos (aumentado a 500)
# - noise: ruido aleatorio (0.04 para mantener variabilidad moderada)
# - factor: radio del círculo interno respecto al externo (0.8 para mejor visualización)
X, y = make_circles(n_samples=500, noise=0.04, factor=0.8, random_state=0)
plot_dataset(X, y, "make_circles - Círculos Concéntricos")
# 3. make_classification - Genera datos para clasificación lineal.
# - n_samples: número de muestras (500)
# - n_features: número de características (2 para visualización 2D)
# - n_redundant: características redundantes (0 para simplicidad)
# - n_informative: características útiles (2 para el problema)
# - n_clusters_per_class: número de grupos por clase (1 para mejor separación)
X, y = make_classification(n_samples=500, n_features=2, n_redundant=0, n_informative=2, n_clusters_per_class=1, random_state=0)
plot_dataset(X, y, "make_classification - Clasificación Lineal")
# 4. make_blobs - Genera varios grupos de puntos alrededor de centros.
# - n_samples: número de puntos (500)
# - centers: cantidad de grupos (3)
# - cluster_std: desviación estándar del grupo (0.6 para menos solapamiento)
X, y = make_blobs(n_samples=500, centers=3, cluster_std=0.6, random_state=0)
plot_dataset(X, y, "make_blobs - Clústeres Gaussianos")
# 5. make_gaussian_quantiles - Genera datos agrupados según cuantiles gaussianos.
# - n_samples: número de muestras (500)
# - n_classes: número de clases (2 para clasificación binaria)
X, y = make_gaussian_quantiles(n_samples=500, n_classes=2, random_state=0)
plot_dataset(X, y, "make_gaussian_quantiles - Cuantiles Gaussianos")
# 6. make_multilabel_classification - Genera datos para problemas multietiqueta.
# - n_samples: número de muestras (500)
# - n_features: número de características (2 para visualización)
# - n_classes: número de etiquetas posibles (3)
# - n_labels: promedio de etiquetas por instancia (2)
X, y = make_multilabel_classification(n_samples=500, n_features=2, n_classes=3, n_labels=2, random_state=0)
plot_dataset(X, y[:, 0], "make_multilabel_classification - Clasificación Multietiqueta")