Menu iconMenu icon
Héroe del Aprendizaje Automático

Capítulo 5: Técnicas de Aprendizaje No Supervisado

Ejercicios Prácticos del Capítulo 5

Ejercicio 1: Agrupamiento K-Means

Tarea: Se te proporciona un conjunto de datos sintético que contiene dos características. Utiliza el agrupamiento K-Means para agrupar los datos en tres grupos y visualiza los grupos con sus centroides.

Característica 1Característica 2
2.53.1
1.82.3
3.43.0
4.14.2
1.92.8
3.63.7
2.23.5
4.04.5

Solución:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# Data: Features 1 and 2
X = np.array([[2.5, 3.1], [1.8, 2.3], [3.4, 3.0], [4.1, 4.2], [1.9, 2.8],
              [3.6, 3.7], [2.2, 3.5], [4.0, 4.5]])

# Apply K-Means clustering with 3 clusters
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)

# Get cluster labels and centroids
labels = kmeans.labels_
centroids = kmeans.cluster_centers_

# Plot the clusters and centroids
plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')
plt.scatter(centroids[:, 0], centroids[:, 1], s=200, c='red', marker='x')
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.title("K-Means Clustering")
plt.show()

Ejercicio 2: Reducción de Dimensionalidad con PCA

Tarea: Tienes un conjunto de datos con cinco características. Utiliza el Análisis de Componentes Principales (PCA) para reducir la dimensionalidad a dos componentes y visualizar la proyección 2D de los datos.

Característica 1Característica 2Característica 3Característica 4Característica 5
2.51.23.40.81.5
1.92.11.82.30.7
3.12.52.21.82.0
2.23.42.93.11.8
4.54.03.52.92.7

Solución:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

# Data: 5 features
X = np.array([[2.5, 1.2, 3.4, 0.8, 1.5],
              [1.9, 2.1, 1.8, 2.3, 0.7],
              [3.1, 2.5, 2.2, 1.8, 2.0],
              [2.2, 3.4, 2.9, 3.1, 1.8],
              [4.5, 4.0, 3.5, 2.9, 2.7]])

# Standardize the data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Apply PCA to reduce to 2 components
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)

# Plot the 2D projection
plt.scatter(X_pca[:, 0], X_pca[:, 1], s=100)
plt.xlabel("Principal Component 1")
plt.ylabel("Principal Component 2")
plt.title("PCA Projection")
plt.show()

Ejercicio 3: t-SNE para Reducción de Dimensionalidad

Tarea: Utiliza t-SNE para reducir la dimensionalidad de un conjunto de datos con tres características a dos dimensiones. Visualiza la proyección 2D de t-SNE.

Característica 1Característica 2Característica 3
2.13.21.1
1.82.53.6
3.03.11.5
2.52.90.8
1.92.43.2

Solución:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
from sklearn.preprocessing import StandardScaler

# Data: 3 features
X = np.array([[2.1, 3.2, 1.1],
              [1.8, 2.5, 3.6],
              [3.0, 3.1, 1.5],
              [2.5, 2.9, 0.8],
              [1.9, 2.4, 3.2]])

# Standardize the data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Apply t-SNE to reduce to 2 dimensions
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X_scaled)

# Plot the 2D t-SNE projection
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], s=100)
plt.xlabel("t-SNE Dimension 1")
plt.ylabel("t-SNE Dimension 2")
plt.title("t-SNE Projection")
plt.show()

Ejercicio 4: UMAP para Reducción de Dimensionalidad

Tarea: Utiliza UMAP para reducir la dimensionalidad de un conjunto de datos con cuatro características a dos dimensiones. Visualiza la proyección 2D de UMAP.

Característica 1Característica 2Característica 3Característica 4
3.12.03.84.0
1.91.53.12.3
2.83.01.53.8
3.42.92.73.5
2.11.82.92.6

Solución:

import umap
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler

# Data: 4 features
X = np.array([[3.1, 2.0, 3.8, 4.0],
              [1.9, 1.5, 3.1, 2.3],
              [2.8, 3.0, 1.5, 3.8],
              [3.4, 2.9, 2.7, 3.5],
              [2.1, 1.8, 2.9, 2.6]])

# Standardize the data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Apply UMAP to reduce to 2 dimensions
umap_model = umap.UMAP(n_neighbors=5, min_dist=0.3, random_state=42)
X_umap = umap_model.fit_transform(X_scaled)

# Plot the 2D UMAP projection
plt.scatter(X_umap[:, 0], X_umap[:, 1], s=100)
plt.xlabel("UMAP Dimension 1")
plt.ylabel("UMAP Dimension 2")
plt.title("UMAP Projection")
plt.show()

Ejercicio 5: Evaluación de Agrupamiento con Silhouette Score

Tarea: Aplica el agrupamiento K-Means al siguiente conjunto de datos y calcula el Silhouette Score para evaluar el rendimiento del agrupamiento.

Característica 1Característica 2
2.53.5
3.12.9
1.82.7
4.23.6
3.54.0
1.93.3
4.53.2
2.02.8

Solución:

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import numpy as np

# Data: Features 1 and 2
X = np.array([[2.5, 3.5], [3.1, 2.9], [1.8, 2.7], [4.2, 3.6], [3.5, 4.0],
              [1.9, 3.3], [4.5, 3.2], [2.0, 2.8]])

# Apply K-Means clustering with 3 clusters
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)
labels = kmeans.labels_

# Calculate the Silhouette Score
silhouette_avg = silhouette_score(X, labels)
print(f"Silhouette Score: {silhouette_avg:.2f}")

Ejercicio 6: Evaluación de la Reducción de Dimensionalidad con Varianza Explicada

Tarea: Aplica PCA para reducir el siguiente conjunto de datos de cinco características a tres componentes. Calcula y grafica la proporción de varianza explicada para cada componente.

Característica 1Característica 2Característica 3Característica 4Característica 5
2.53.12.84.02.1
3.02.71.92.83.6
1.92.33.73.42.9
4.23.64.12.93.5
3.64.02.92.23.0

Solución:

from sklearn.decomposition import PCA
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler

# Data: 5 features
X = np.array([[2.5, 3.1, 2.8, 4.0, 2.1],
              [3.0, 2.7, 1.9, 2.8, 3.6],
              [1.9, 2.3, 3.7, 3.4, 2.9],
              [4.2, 3.6, 4.1, 2.9, 3.5],
              [3.6, 4.0, 2.9, 2.2, 3.0]])

# Standardize the data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Apply PCA to reduce to 3 components
pca = PCA(n_components=3)
pca.fit(X_scaled)

# Plot the explained variance ratio for each component
explained_variance = pca.explained_variance_ratio_
plt.bar(range(1, 4), explained_variance, tick_label=["PC1", "PC2", "PC3"])
plt.xlabel("Principal Components")
plt.ylabel("Explained Variance Ratio")
plt.title("Explained Variance by Principal Components")
plt.show()

Estos ejercicios prácticos presentan una variedad de técnicas de aprendizaje no supervisado, que incluyen agrupamientoreducción de dimensionalidad y métricas de evaluación. Cada ejercicio refuerza conceptos clave del Capítulo 5, ofreciéndote experiencia práctica en la implementación y evaluación de estos métodos poderosos.

Ejercicios Prácticos del Capítulo 5

Ejercicio 1: Agrupamiento K-Means

Tarea: Se te proporciona un conjunto de datos sintético que contiene dos características. Utiliza el agrupamiento K-Means para agrupar los datos en tres grupos y visualiza los grupos con sus centroides.

Característica 1Característica 2
2.53.1
1.82.3
3.43.0
4.14.2
1.92.8
3.63.7
2.23.5
4.04.5

Solución:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# Data: Features 1 and 2
X = np.array([[2.5, 3.1], [1.8, 2.3], [3.4, 3.0], [4.1, 4.2], [1.9, 2.8],
              [3.6, 3.7], [2.2, 3.5], [4.0, 4.5]])

# Apply K-Means clustering with 3 clusters
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)

# Get cluster labels and centroids
labels = kmeans.labels_
centroids = kmeans.cluster_centers_

# Plot the clusters and centroids
plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')
plt.scatter(centroids[:, 0], centroids[:, 1], s=200, c='red', marker='x')
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.title("K-Means Clustering")
plt.show()

Ejercicio 2: Reducción de Dimensionalidad con PCA

Tarea: Tienes un conjunto de datos con cinco características. Utiliza el Análisis de Componentes Principales (PCA) para reducir la dimensionalidad a dos componentes y visualizar la proyección 2D de los datos.

Característica 1Característica 2Característica 3Característica 4Característica 5
2.51.23.40.81.5
1.92.11.82.30.7
3.12.52.21.82.0
2.23.42.93.11.8
4.54.03.52.92.7

Solución:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

# Data: 5 features
X = np.array([[2.5, 1.2, 3.4, 0.8, 1.5],
              [1.9, 2.1, 1.8, 2.3, 0.7],
              [3.1, 2.5, 2.2, 1.8, 2.0],
              [2.2, 3.4, 2.9, 3.1, 1.8],
              [4.5, 4.0, 3.5, 2.9, 2.7]])

# Standardize the data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Apply PCA to reduce to 2 components
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)

# Plot the 2D projection
plt.scatter(X_pca[:, 0], X_pca[:, 1], s=100)
plt.xlabel("Principal Component 1")
plt.ylabel("Principal Component 2")
plt.title("PCA Projection")
plt.show()

Ejercicio 3: t-SNE para Reducción de Dimensionalidad

Tarea: Utiliza t-SNE para reducir la dimensionalidad de un conjunto de datos con tres características a dos dimensiones. Visualiza la proyección 2D de t-SNE.

Característica 1Característica 2Característica 3
2.13.21.1
1.82.53.6
3.03.11.5
2.52.90.8
1.92.43.2

Solución:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
from sklearn.preprocessing import StandardScaler

# Data: 3 features
X = np.array([[2.1, 3.2, 1.1],
              [1.8, 2.5, 3.6],
              [3.0, 3.1, 1.5],
              [2.5, 2.9, 0.8],
              [1.9, 2.4, 3.2]])

# Standardize the data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Apply t-SNE to reduce to 2 dimensions
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X_scaled)

# Plot the 2D t-SNE projection
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], s=100)
plt.xlabel("t-SNE Dimension 1")
plt.ylabel("t-SNE Dimension 2")
plt.title("t-SNE Projection")
plt.show()

Ejercicio 4: UMAP para Reducción de Dimensionalidad

Tarea: Utiliza UMAP para reducir la dimensionalidad de un conjunto de datos con cuatro características a dos dimensiones. Visualiza la proyección 2D de UMAP.

Característica 1Característica 2Característica 3Característica 4
3.12.03.84.0
1.91.53.12.3
2.83.01.53.8
3.42.92.73.5
2.11.82.92.6

Solución:

import umap
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler

# Data: 4 features
X = np.array([[3.1, 2.0, 3.8, 4.0],
              [1.9, 1.5, 3.1, 2.3],
              [2.8, 3.0, 1.5, 3.8],
              [3.4, 2.9, 2.7, 3.5],
              [2.1, 1.8, 2.9, 2.6]])

# Standardize the data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Apply UMAP to reduce to 2 dimensions
umap_model = umap.UMAP(n_neighbors=5, min_dist=0.3, random_state=42)
X_umap = umap_model.fit_transform(X_scaled)

# Plot the 2D UMAP projection
plt.scatter(X_umap[:, 0], X_umap[:, 1], s=100)
plt.xlabel("UMAP Dimension 1")
plt.ylabel("UMAP Dimension 2")
plt.title("UMAP Projection")
plt.show()

Ejercicio 5: Evaluación de Agrupamiento con Silhouette Score

Tarea: Aplica el agrupamiento K-Means al siguiente conjunto de datos y calcula el Silhouette Score para evaluar el rendimiento del agrupamiento.

Característica 1Característica 2
2.53.5
3.12.9
1.82.7
4.23.6
3.54.0
1.93.3
4.53.2
2.02.8

Solución:

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import numpy as np

# Data: Features 1 and 2
X = np.array([[2.5, 3.5], [3.1, 2.9], [1.8, 2.7], [4.2, 3.6], [3.5, 4.0],
              [1.9, 3.3], [4.5, 3.2], [2.0, 2.8]])

# Apply K-Means clustering with 3 clusters
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)
labels = kmeans.labels_

# Calculate the Silhouette Score
silhouette_avg = silhouette_score(X, labels)
print(f"Silhouette Score: {silhouette_avg:.2f}")

Ejercicio 6: Evaluación de la Reducción de Dimensionalidad con Varianza Explicada

Tarea: Aplica PCA para reducir el siguiente conjunto de datos de cinco características a tres componentes. Calcula y grafica la proporción de varianza explicada para cada componente.

Característica 1Característica 2Característica 3Característica 4Característica 5
2.53.12.84.02.1
3.02.71.92.83.6
1.92.33.73.42.9
4.23.64.12.93.5
3.64.02.92.23.0

Solución:

from sklearn.decomposition import PCA
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler

# Data: 5 features
X = np.array([[2.5, 3.1, 2.8, 4.0, 2.1],
              [3.0, 2.7, 1.9, 2.8, 3.6],
              [1.9, 2.3, 3.7, 3.4, 2.9],
              [4.2, 3.6, 4.1, 2.9, 3.5],
              [3.6, 4.0, 2.9, 2.2, 3.0]])

# Standardize the data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Apply PCA to reduce to 3 components
pca = PCA(n_components=3)
pca.fit(X_scaled)

# Plot the explained variance ratio for each component
explained_variance = pca.explained_variance_ratio_
plt.bar(range(1, 4), explained_variance, tick_label=["PC1", "PC2", "PC3"])
plt.xlabel("Principal Components")
plt.ylabel("Explained Variance Ratio")
plt.title("Explained Variance by Principal Components")
plt.show()

Estos ejercicios prácticos presentan una variedad de técnicas de aprendizaje no supervisado, que incluyen agrupamientoreducción de dimensionalidad y métricas de evaluación. Cada ejercicio refuerza conceptos clave del Capítulo 5, ofreciéndote experiencia práctica en la implementación y evaluación de estos métodos poderosos.

Ejercicios Prácticos del Capítulo 5

Ejercicio 1: Agrupamiento K-Means

Tarea: Se te proporciona un conjunto de datos sintético que contiene dos características. Utiliza el agrupamiento K-Means para agrupar los datos en tres grupos y visualiza los grupos con sus centroides.

Característica 1Característica 2
2.53.1
1.82.3
3.43.0
4.14.2
1.92.8
3.63.7
2.23.5
4.04.5

Solución:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# Data: Features 1 and 2
X = np.array([[2.5, 3.1], [1.8, 2.3], [3.4, 3.0], [4.1, 4.2], [1.9, 2.8],
              [3.6, 3.7], [2.2, 3.5], [4.0, 4.5]])

# Apply K-Means clustering with 3 clusters
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)

# Get cluster labels and centroids
labels = kmeans.labels_
centroids = kmeans.cluster_centers_

# Plot the clusters and centroids
plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')
plt.scatter(centroids[:, 0], centroids[:, 1], s=200, c='red', marker='x')
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.title("K-Means Clustering")
plt.show()

Ejercicio 2: Reducción de Dimensionalidad con PCA

Tarea: Tienes un conjunto de datos con cinco características. Utiliza el Análisis de Componentes Principales (PCA) para reducir la dimensionalidad a dos componentes y visualizar la proyección 2D de los datos.

Característica 1Característica 2Característica 3Característica 4Característica 5
2.51.23.40.81.5
1.92.11.82.30.7
3.12.52.21.82.0
2.23.42.93.11.8
4.54.03.52.92.7

Solución:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

# Data: 5 features
X = np.array([[2.5, 1.2, 3.4, 0.8, 1.5],
              [1.9, 2.1, 1.8, 2.3, 0.7],
              [3.1, 2.5, 2.2, 1.8, 2.0],
              [2.2, 3.4, 2.9, 3.1, 1.8],
              [4.5, 4.0, 3.5, 2.9, 2.7]])

# Standardize the data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Apply PCA to reduce to 2 components
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)

# Plot the 2D projection
plt.scatter(X_pca[:, 0], X_pca[:, 1], s=100)
plt.xlabel("Principal Component 1")
plt.ylabel("Principal Component 2")
plt.title("PCA Projection")
plt.show()

Ejercicio 3: t-SNE para Reducción de Dimensionalidad

Tarea: Utiliza t-SNE para reducir la dimensionalidad de un conjunto de datos con tres características a dos dimensiones. Visualiza la proyección 2D de t-SNE.

Característica 1Característica 2Característica 3
2.13.21.1
1.82.53.6
3.03.11.5
2.52.90.8
1.92.43.2

Solución:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
from sklearn.preprocessing import StandardScaler

# Data: 3 features
X = np.array([[2.1, 3.2, 1.1],
              [1.8, 2.5, 3.6],
              [3.0, 3.1, 1.5],
              [2.5, 2.9, 0.8],
              [1.9, 2.4, 3.2]])

# Standardize the data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Apply t-SNE to reduce to 2 dimensions
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X_scaled)

# Plot the 2D t-SNE projection
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], s=100)
plt.xlabel("t-SNE Dimension 1")
plt.ylabel("t-SNE Dimension 2")
plt.title("t-SNE Projection")
plt.show()

Ejercicio 4: UMAP para Reducción de Dimensionalidad

Tarea: Utiliza UMAP para reducir la dimensionalidad de un conjunto de datos con cuatro características a dos dimensiones. Visualiza la proyección 2D de UMAP.

Característica 1Característica 2Característica 3Característica 4
3.12.03.84.0
1.91.53.12.3
2.83.01.53.8
3.42.92.73.5
2.11.82.92.6

Solución:

import umap
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler

# Data: 4 features
X = np.array([[3.1, 2.0, 3.8, 4.0],
              [1.9, 1.5, 3.1, 2.3],
              [2.8, 3.0, 1.5, 3.8],
              [3.4, 2.9, 2.7, 3.5],
              [2.1, 1.8, 2.9, 2.6]])

# Standardize the data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Apply UMAP to reduce to 2 dimensions
umap_model = umap.UMAP(n_neighbors=5, min_dist=0.3, random_state=42)
X_umap = umap_model.fit_transform(X_scaled)

# Plot the 2D UMAP projection
plt.scatter(X_umap[:, 0], X_umap[:, 1], s=100)
plt.xlabel("UMAP Dimension 1")
plt.ylabel("UMAP Dimension 2")
plt.title("UMAP Projection")
plt.show()

Ejercicio 5: Evaluación de Agrupamiento con Silhouette Score

Tarea: Aplica el agrupamiento K-Means al siguiente conjunto de datos y calcula el Silhouette Score para evaluar el rendimiento del agrupamiento.

Característica 1Característica 2
2.53.5
3.12.9
1.82.7
4.23.6
3.54.0
1.93.3
4.53.2
2.02.8

Solución:

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import numpy as np

# Data: Features 1 and 2
X = np.array([[2.5, 3.5], [3.1, 2.9], [1.8, 2.7], [4.2, 3.6], [3.5, 4.0],
              [1.9, 3.3], [4.5, 3.2], [2.0, 2.8]])

# Apply K-Means clustering with 3 clusters
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)
labels = kmeans.labels_

# Calculate the Silhouette Score
silhouette_avg = silhouette_score(X, labels)
print(f"Silhouette Score: {silhouette_avg:.2f}")

Ejercicio 6: Evaluación de la Reducción de Dimensionalidad con Varianza Explicada

Tarea: Aplica PCA para reducir el siguiente conjunto de datos de cinco características a tres componentes. Calcula y grafica la proporción de varianza explicada para cada componente.

Característica 1Característica 2Característica 3Característica 4Característica 5
2.53.12.84.02.1
3.02.71.92.83.6
1.92.33.73.42.9
4.23.64.12.93.5
3.64.02.92.23.0

Solución:

from sklearn.decomposition import PCA
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler

# Data: 5 features
X = np.array([[2.5, 3.1, 2.8, 4.0, 2.1],
              [3.0, 2.7, 1.9, 2.8, 3.6],
              [1.9, 2.3, 3.7, 3.4, 2.9],
              [4.2, 3.6, 4.1, 2.9, 3.5],
              [3.6, 4.0, 2.9, 2.2, 3.0]])

# Standardize the data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Apply PCA to reduce to 3 components
pca = PCA(n_components=3)
pca.fit(X_scaled)

# Plot the explained variance ratio for each component
explained_variance = pca.explained_variance_ratio_
plt.bar(range(1, 4), explained_variance, tick_label=["PC1", "PC2", "PC3"])
plt.xlabel("Principal Components")
plt.ylabel("Explained Variance Ratio")
plt.title("Explained Variance by Principal Components")
plt.show()

Estos ejercicios prácticos presentan una variedad de técnicas de aprendizaje no supervisado, que incluyen agrupamientoreducción de dimensionalidad y métricas de evaluación. Cada ejercicio refuerza conceptos clave del Capítulo 5, ofreciéndote experiencia práctica en la implementación y evaluación de estos métodos poderosos.

Ejercicios Prácticos del Capítulo 5

Ejercicio 1: Agrupamiento K-Means

Tarea: Se te proporciona un conjunto de datos sintético que contiene dos características. Utiliza el agrupamiento K-Means para agrupar los datos en tres grupos y visualiza los grupos con sus centroides.

Característica 1Característica 2
2.53.1
1.82.3
3.43.0
4.14.2
1.92.8
3.63.7
2.23.5
4.04.5

Solución:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# Data: Features 1 and 2
X = np.array([[2.5, 3.1], [1.8, 2.3], [3.4, 3.0], [4.1, 4.2], [1.9, 2.8],
              [3.6, 3.7], [2.2, 3.5], [4.0, 4.5]])

# Apply K-Means clustering with 3 clusters
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)

# Get cluster labels and centroids
labels = kmeans.labels_
centroids = kmeans.cluster_centers_

# Plot the clusters and centroids
plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')
plt.scatter(centroids[:, 0], centroids[:, 1], s=200, c='red', marker='x')
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.title("K-Means Clustering")
plt.show()

Ejercicio 2: Reducción de Dimensionalidad con PCA

Tarea: Tienes un conjunto de datos con cinco características. Utiliza el Análisis de Componentes Principales (PCA) para reducir la dimensionalidad a dos componentes y visualizar la proyección 2D de los datos.

Característica 1Característica 2Característica 3Característica 4Característica 5
2.51.23.40.81.5
1.92.11.82.30.7
3.12.52.21.82.0
2.23.42.93.11.8
4.54.03.52.92.7

Solución:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

# Data: 5 features
X = np.array([[2.5, 1.2, 3.4, 0.8, 1.5],
              [1.9, 2.1, 1.8, 2.3, 0.7],
              [3.1, 2.5, 2.2, 1.8, 2.0],
              [2.2, 3.4, 2.9, 3.1, 1.8],
              [4.5, 4.0, 3.5, 2.9, 2.7]])

# Standardize the data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Apply PCA to reduce to 2 components
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)

# Plot the 2D projection
plt.scatter(X_pca[:, 0], X_pca[:, 1], s=100)
plt.xlabel("Principal Component 1")
plt.ylabel("Principal Component 2")
plt.title("PCA Projection")
plt.show()

Ejercicio 3: t-SNE para Reducción de Dimensionalidad

Tarea: Utiliza t-SNE para reducir la dimensionalidad de un conjunto de datos con tres características a dos dimensiones. Visualiza la proyección 2D de t-SNE.

Característica 1Característica 2Característica 3
2.13.21.1
1.82.53.6
3.03.11.5
2.52.90.8
1.92.43.2

Solución:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
from sklearn.preprocessing import StandardScaler

# Data: 3 features
X = np.array([[2.1, 3.2, 1.1],
              [1.8, 2.5, 3.6],
              [3.0, 3.1, 1.5],
              [2.5, 2.9, 0.8],
              [1.9, 2.4, 3.2]])

# Standardize the data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Apply t-SNE to reduce to 2 dimensions
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X_scaled)

# Plot the 2D t-SNE projection
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], s=100)
plt.xlabel("t-SNE Dimension 1")
plt.ylabel("t-SNE Dimension 2")
plt.title("t-SNE Projection")
plt.show()

Ejercicio 4: UMAP para Reducción de Dimensionalidad

Tarea: Utiliza UMAP para reducir la dimensionalidad de un conjunto de datos con cuatro características a dos dimensiones. Visualiza la proyección 2D de UMAP.

Característica 1Característica 2Característica 3Característica 4
3.12.03.84.0
1.91.53.12.3
2.83.01.53.8
3.42.92.73.5
2.11.82.92.6

Solución:

import umap
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler

# Data: 4 features
X = np.array([[3.1, 2.0, 3.8, 4.0],
              [1.9, 1.5, 3.1, 2.3],
              [2.8, 3.0, 1.5, 3.8],
              [3.4, 2.9, 2.7, 3.5],
              [2.1, 1.8, 2.9, 2.6]])

# Standardize the data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Apply UMAP to reduce to 2 dimensions
umap_model = umap.UMAP(n_neighbors=5, min_dist=0.3, random_state=42)
X_umap = umap_model.fit_transform(X_scaled)

# Plot the 2D UMAP projection
plt.scatter(X_umap[:, 0], X_umap[:, 1], s=100)
plt.xlabel("UMAP Dimension 1")
plt.ylabel("UMAP Dimension 2")
plt.title("UMAP Projection")
plt.show()

Ejercicio 5: Evaluación de Agrupamiento con Silhouette Score

Tarea: Aplica el agrupamiento K-Means al siguiente conjunto de datos y calcula el Silhouette Score para evaluar el rendimiento del agrupamiento.

Característica 1Característica 2
2.53.5
3.12.9
1.82.7
4.23.6
3.54.0
1.93.3
4.53.2
2.02.8

Solución:

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import numpy as np

# Data: Features 1 and 2
X = np.array([[2.5, 3.5], [3.1, 2.9], [1.8, 2.7], [4.2, 3.6], [3.5, 4.0],
              [1.9, 3.3], [4.5, 3.2], [2.0, 2.8]])

# Apply K-Means clustering with 3 clusters
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)
labels = kmeans.labels_

# Calculate the Silhouette Score
silhouette_avg = silhouette_score(X, labels)
print(f"Silhouette Score: {silhouette_avg:.2f}")

Ejercicio 6: Evaluación de la Reducción de Dimensionalidad con Varianza Explicada

Tarea: Aplica PCA para reducir el siguiente conjunto de datos de cinco características a tres componentes. Calcula y grafica la proporción de varianza explicada para cada componente.

Característica 1Característica 2Característica 3Característica 4Característica 5
2.53.12.84.02.1
3.02.71.92.83.6
1.92.33.73.42.9
4.23.64.12.93.5
3.64.02.92.23.0

Solución:

from sklearn.decomposition import PCA
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler

# Data: 5 features
X = np.array([[2.5, 3.1, 2.8, 4.0, 2.1],
              [3.0, 2.7, 1.9, 2.8, 3.6],
              [1.9, 2.3, 3.7, 3.4, 2.9],
              [4.2, 3.6, 4.1, 2.9, 3.5],
              [3.6, 4.0, 2.9, 2.2, 3.0]])

# Standardize the data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Apply PCA to reduce to 3 components
pca = PCA(n_components=3)
pca.fit(X_scaled)

# Plot the explained variance ratio for each component
explained_variance = pca.explained_variance_ratio_
plt.bar(range(1, 4), explained_variance, tick_label=["PC1", "PC2", "PC3"])
plt.xlabel("Principal Components")
plt.ylabel("Explained Variance Ratio")
plt.title("Explained Variance by Principal Components")
plt.show()

Estos ejercicios prácticos presentan una variedad de técnicas de aprendizaje no supervisado, que incluyen agrupamientoreducción de dimensionalidad y métricas de evaluación. Cada ejercicio refuerza conceptos clave del Capítulo 5, ofreciéndote experiencia práctica en la implementación y evaluación de estos métodos poderosos.