[Pablo Nuñez] - Fab Futures 2025 - Data Science
Home About

Class 7: Transforms¶

In [3]:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

# -----------------------------
# 1. Cargar datos MNIST
# -----------------------------
X = np.load("datasets/Xtrain.npy")  
y = np.load("datasets/Ytrain.npy")

print("Forma original de X:", X.shape)  # debería ser (n, 28, 28)

# -----------------------------
# 2. Aplanar imágenes 28×28 → 784
# -----------------------------
X = X.reshape(len(X), -1) # esto lo hacemos porque sino las imagenes serían de 3 dimensiones, y para standarscaler neceistamos dos dimensiones

print("Forma aplanada de X:", X.shape)  # ahora (n, 784)

# (Opcional) limitar a 10.000 muestras
n_samples = 10000
X = X[:n_samples]
y = y[:n_samples]

# -----------------------------
# 3. Estandarizar
# -----------------------------
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# -----------------------------
# 4. PCA con 50 componentes
# -----------------------------
pca50 = PCA(n_components=50)
X_pca50 = pca50.fit_transform(X_scaled)

print("Dim después de PCA 50:", X_pca50.shape)

# Varianza explicada
cumvar = np.cumsum(pca50.explained_variance_ratio_)

plt.plot(range(1, 51), cumvar)
plt.xlabel("Componentes")
plt.ylabel("Varianza explicada acumulada")
plt.title("PCA MNIST (50 componentes)")
plt.grid(True)
plt.show()

# -----------------------------
# 5. PCA a 2D para visualizar
# -----------------------------
pca2 = PCA(n_components=2)
X_pca2 = pca2.fit_transform(X_scaled)

plt.scatter(X_pca2[:,0], X_pca2[:,1], c=y, s=5, cmap="tab10")
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.title("MNIST en 2D con PCA")
plt.colorbar()
plt.show()
Forma original de X: (60000, 28, 28)
Forma aplanada de X: (60000, 784)
Dim después de PCA 50: (10000, 50)
No description has been provided for this image
No description has been provided for this image
In [ ]: