Menu iconMenu icon
Data Engineering Foundations

Chapter 10: Dimensionality Reduction

10.3 Ejercicios Prácticos para el Capítulo 10

Estos ejercicios brindan práctica práctica con diferentes técnicas de selección de características, ayudándote a comprender cómo aplicarlas eficazmente para optimizar tus conjuntos de datos. Se incluyen soluciones con código para guiarte en cada paso.

Ejercicio 1: Umbral de Varianza

Tienes un conjunto de datos con múltiples características. Aplica umbral de varianza para eliminar características con varianza por debajo de 0.1.

from sklearn.feature_selection import VarianceThreshold
import pandas as pd

# Sample dataset with low-variance features
data = {'Feature1': [1, 1, 1, 1, 1],
        'Feature2': [0.5, 0.5, 0.5, 0.5, 0.5],
        'Feature3': [0, 1, 0, 1, 0],
        'Feature4': [1, 2, 3, 4, 5]}
df = pd.DataFrame(data)

# Solution: Apply variance thresholding
selector = VarianceThreshold(threshold=0.1)
reduced_data = selector.fit_transform(df)

print("Reduced dataset with high-variance features:")
print(reduced_data)

En esta solución:

El umbral de varianza elimina características que no cumplen con el umbral de varianza de 0.1, lo que da como resultado un conjunto de datos reducido con mayor densidad de información.

Ejercicio 2: Umbral de Correlación

Dado un conjunto de datos, identifica pares de características con una correlación superior a 0.8 y elimina una de cada par altamente correlacionado.

# Sample dataset with correlated features
data = {'Feature1': [1, 2, 3, 4, 5],
        'Feature2': [2, 4, 6, 8, 10],  # Perfectly correlated with Feature1
        'Feature3': [5, 3, 6, 2, 1],
        'Feature4': [10, 12, 15, 20, 25]}
df = pd.DataFrame(data)

# Solution: Correlation thresholding
correlation_matrix = df.corr()
threshold = 0.8
corr_features = set()

for i in range(len(correlation_matrix.columns)):
    for j in range(i):
        if abs(correlation_matrix.iloc[i, j]) > threshold:
            colname = correlation_matrix.columns[i]
            corr_features.add(colname)

# Remove correlated features
df_reduced = df.drop(columns=corr_features)

print("Reduced dataset with correlated features removed:")
print(df_reduced)

En esta solución:

Calculamos las correlaciones entre características y eliminamos una característica de cada par altamente correlacionado (por ejemplo, eliminando Feature2 si está altamente correlacionada con Feature1).

Ejercicio 3: Eliminación Recursiva de Características (RFE)

Usando el conjunto de datos Iris, aplica Eliminación Recursiva de Características (RFE) con un modelo de regresión logística para seleccionar las 2 características principales.

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris

# Load the Iris dataset
X, y = load_iris(return_X_y=True)

# Solution: Apply RFE with logistic regression
model = LogisticRegression(max_iter=200)
rfe = RFE(model, n_features_to_select=2)
X_rfe = rfe.fit_transform(X, y)

print("Selected features after RFE:", rfe.support_)
print("Feature ranking:", rfe.ranking_)

En esta solución:

RFE clasifica las características por importancia para un modelo de regresión logística, seleccionando las 2 principales según su impacto en el rendimiento del modelo.

Ejercicio 4: Selección de Características con Regresión Lasso

Usando el conjunto de datos de viviendas de Boston, aplica la regresión Lasso para la selección de características. Imprime las características seleccionadas con coeficientes distintos de cero.

from sklearn.linear_model import Lasso
from sklearn.datasets import load_boston
import numpy as np

# Load the Boston housing dataset
X, y = load_boston(return_X_y=True)

# Solution: Apply Lasso regression for feature selection
lasso = Lasso(alpha=0.1)
lasso.fit(X, y)

# Identify non-zero coefficients
selected_features = np.where(lasso.coef_ != 0)[0]

print("Selected features with Lasso:", selected_features)

En esta solución:

La regresión Lasso realiza la selección de características reduciendo a cero los coeficientes de las características menos importantes, reteniendo solo las más impactantes.

Ejercicio 5: Implementación de PCA para Reducción de Dimensionalidad

Usando el conjunto de datos Iris, aplica Análisis de Componentes Principales (PCA) para reducir el conjunto de datos a dos dimensiones para su visualización.

from sklearn.decomposition import PCA
import pandas as pd
import matplotlib.pyplot as plt

# Load the Iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# Solution: Apply PCA with 2 components
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

# Convert PCA results to DataFrame
df_pca = pd.DataFrame(data=X_pca, columns=['PC1', 'PC2'])
df_pca['target'] = y

# Plot the PCA result
plt.figure(figsize=(8, 6))
for label in df_pca['target'].unique():
    subset = df_pca[df_pca['target'] == label]
    plt.scatter(subset['PC1'], subset['PC2'], label=iris.target_names[label])
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('PCA on Iris Dataset')
plt.legend()
plt.show()

En esta solución:

PCA reduce el conjunto de datos Iris a dos dimensiones, permitiendo visualizar la estructura del conjunto en un espacio de menor dimensionalidad.

Estos ejercicios te guían a través de aplicaciones prácticas de umbral de varianza, umbral de correlación, RFE, regresión Lasso y PCA, brindándote una comprensión integral de las técnicas de selección de características y reducción de dimensionalidad. Estas habilidades son esenciales para manejar conjuntos de datos complejos, simplificar modelos y mejorar la interpretabilidad.

10.3 Ejercicios Prácticos para el Capítulo 10

Estos ejercicios brindan práctica práctica con diferentes técnicas de selección de características, ayudándote a comprender cómo aplicarlas eficazmente para optimizar tus conjuntos de datos. Se incluyen soluciones con código para guiarte en cada paso.

Ejercicio 1: Umbral de Varianza

Tienes un conjunto de datos con múltiples características. Aplica umbral de varianza para eliminar características con varianza por debajo de 0.1.

from sklearn.feature_selection import VarianceThreshold
import pandas as pd

# Sample dataset with low-variance features
data = {'Feature1': [1, 1, 1, 1, 1],
        'Feature2': [0.5, 0.5, 0.5, 0.5, 0.5],
        'Feature3': [0, 1, 0, 1, 0],
        'Feature4': [1, 2, 3, 4, 5]}
df = pd.DataFrame(data)

# Solution: Apply variance thresholding
selector = VarianceThreshold(threshold=0.1)
reduced_data = selector.fit_transform(df)

print("Reduced dataset with high-variance features:")
print(reduced_data)

En esta solución:

El umbral de varianza elimina características que no cumplen con el umbral de varianza de 0.1, lo que da como resultado un conjunto de datos reducido con mayor densidad de información.

Ejercicio 2: Umbral de Correlación

Dado un conjunto de datos, identifica pares de características con una correlación superior a 0.8 y elimina una de cada par altamente correlacionado.

# Sample dataset with correlated features
data = {'Feature1': [1, 2, 3, 4, 5],
        'Feature2': [2, 4, 6, 8, 10],  # Perfectly correlated with Feature1
        'Feature3': [5, 3, 6, 2, 1],
        'Feature4': [10, 12, 15, 20, 25]}
df = pd.DataFrame(data)

# Solution: Correlation thresholding
correlation_matrix = df.corr()
threshold = 0.8
corr_features = set()

for i in range(len(correlation_matrix.columns)):
    for j in range(i):
        if abs(correlation_matrix.iloc[i, j]) > threshold:
            colname = correlation_matrix.columns[i]
            corr_features.add(colname)

# Remove correlated features
df_reduced = df.drop(columns=corr_features)

print("Reduced dataset with correlated features removed:")
print(df_reduced)

En esta solución:

Calculamos las correlaciones entre características y eliminamos una característica de cada par altamente correlacionado (por ejemplo, eliminando Feature2 si está altamente correlacionada con Feature1).

Ejercicio 3: Eliminación Recursiva de Características (RFE)

Usando el conjunto de datos Iris, aplica Eliminación Recursiva de Características (RFE) con un modelo de regresión logística para seleccionar las 2 características principales.

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris

# Load the Iris dataset
X, y = load_iris(return_X_y=True)

# Solution: Apply RFE with logistic regression
model = LogisticRegression(max_iter=200)
rfe = RFE(model, n_features_to_select=2)
X_rfe = rfe.fit_transform(X, y)

print("Selected features after RFE:", rfe.support_)
print("Feature ranking:", rfe.ranking_)

En esta solución:

RFE clasifica las características por importancia para un modelo de regresión logística, seleccionando las 2 principales según su impacto en el rendimiento del modelo.

Ejercicio 4: Selección de Características con Regresión Lasso

Usando el conjunto de datos de viviendas de Boston, aplica la regresión Lasso para la selección de características. Imprime las características seleccionadas con coeficientes distintos de cero.

from sklearn.linear_model import Lasso
from sklearn.datasets import load_boston
import numpy as np

# Load the Boston housing dataset
X, y = load_boston(return_X_y=True)

# Solution: Apply Lasso regression for feature selection
lasso = Lasso(alpha=0.1)
lasso.fit(X, y)

# Identify non-zero coefficients
selected_features = np.where(lasso.coef_ != 0)[0]

print("Selected features with Lasso:", selected_features)

En esta solución:

La regresión Lasso realiza la selección de características reduciendo a cero los coeficientes de las características menos importantes, reteniendo solo las más impactantes.

Ejercicio 5: Implementación de PCA para Reducción de Dimensionalidad

Usando el conjunto de datos Iris, aplica Análisis de Componentes Principales (PCA) para reducir el conjunto de datos a dos dimensiones para su visualización.

from sklearn.decomposition import PCA
import pandas as pd
import matplotlib.pyplot as plt

# Load the Iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# Solution: Apply PCA with 2 components
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

# Convert PCA results to DataFrame
df_pca = pd.DataFrame(data=X_pca, columns=['PC1', 'PC2'])
df_pca['target'] = y

# Plot the PCA result
plt.figure(figsize=(8, 6))
for label in df_pca['target'].unique():
    subset = df_pca[df_pca['target'] == label]
    plt.scatter(subset['PC1'], subset['PC2'], label=iris.target_names[label])
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('PCA on Iris Dataset')
plt.legend()
plt.show()

En esta solución:

PCA reduce el conjunto de datos Iris a dos dimensiones, permitiendo visualizar la estructura del conjunto en un espacio de menor dimensionalidad.

Estos ejercicios te guían a través de aplicaciones prácticas de umbral de varianza, umbral de correlación, RFE, regresión Lasso y PCA, brindándote una comprensión integral de las técnicas de selección de características y reducción de dimensionalidad. Estas habilidades son esenciales para manejar conjuntos de datos complejos, simplificar modelos y mejorar la interpretabilidad.

10.3 Ejercicios Prácticos para el Capítulo 10

Estos ejercicios brindan práctica práctica con diferentes técnicas de selección de características, ayudándote a comprender cómo aplicarlas eficazmente para optimizar tus conjuntos de datos. Se incluyen soluciones con código para guiarte en cada paso.

Ejercicio 1: Umbral de Varianza

Tienes un conjunto de datos con múltiples características. Aplica umbral de varianza para eliminar características con varianza por debajo de 0.1.

from sklearn.feature_selection import VarianceThreshold
import pandas as pd

# Sample dataset with low-variance features
data = {'Feature1': [1, 1, 1, 1, 1],
        'Feature2': [0.5, 0.5, 0.5, 0.5, 0.5],
        'Feature3': [0, 1, 0, 1, 0],
        'Feature4': [1, 2, 3, 4, 5]}
df = pd.DataFrame(data)

# Solution: Apply variance thresholding
selector = VarianceThreshold(threshold=0.1)
reduced_data = selector.fit_transform(df)

print("Reduced dataset with high-variance features:")
print(reduced_data)

En esta solución:

El umbral de varianza elimina características que no cumplen con el umbral de varianza de 0.1, lo que da como resultado un conjunto de datos reducido con mayor densidad de información.

Ejercicio 2: Umbral de Correlación

Dado un conjunto de datos, identifica pares de características con una correlación superior a 0.8 y elimina una de cada par altamente correlacionado.

# Sample dataset with correlated features
data = {'Feature1': [1, 2, 3, 4, 5],
        'Feature2': [2, 4, 6, 8, 10],  # Perfectly correlated with Feature1
        'Feature3': [5, 3, 6, 2, 1],
        'Feature4': [10, 12, 15, 20, 25]}
df = pd.DataFrame(data)

# Solution: Correlation thresholding
correlation_matrix = df.corr()
threshold = 0.8
corr_features = set()

for i in range(len(correlation_matrix.columns)):
    for j in range(i):
        if abs(correlation_matrix.iloc[i, j]) > threshold:
            colname = correlation_matrix.columns[i]
            corr_features.add(colname)

# Remove correlated features
df_reduced = df.drop(columns=corr_features)

print("Reduced dataset with correlated features removed:")
print(df_reduced)

En esta solución:

Calculamos las correlaciones entre características y eliminamos una característica de cada par altamente correlacionado (por ejemplo, eliminando Feature2 si está altamente correlacionada con Feature1).

Ejercicio 3: Eliminación Recursiva de Características (RFE)

Usando el conjunto de datos Iris, aplica Eliminación Recursiva de Características (RFE) con un modelo de regresión logística para seleccionar las 2 características principales.

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris

# Load the Iris dataset
X, y = load_iris(return_X_y=True)

# Solution: Apply RFE with logistic regression
model = LogisticRegression(max_iter=200)
rfe = RFE(model, n_features_to_select=2)
X_rfe = rfe.fit_transform(X, y)

print("Selected features after RFE:", rfe.support_)
print("Feature ranking:", rfe.ranking_)

En esta solución:

RFE clasifica las características por importancia para un modelo de regresión logística, seleccionando las 2 principales según su impacto en el rendimiento del modelo.

Ejercicio 4: Selección de Características con Regresión Lasso

Usando el conjunto de datos de viviendas de Boston, aplica la regresión Lasso para la selección de características. Imprime las características seleccionadas con coeficientes distintos de cero.

from sklearn.linear_model import Lasso
from sklearn.datasets import load_boston
import numpy as np

# Load the Boston housing dataset
X, y = load_boston(return_X_y=True)

# Solution: Apply Lasso regression for feature selection
lasso = Lasso(alpha=0.1)
lasso.fit(X, y)

# Identify non-zero coefficients
selected_features = np.where(lasso.coef_ != 0)[0]

print("Selected features with Lasso:", selected_features)

En esta solución:

La regresión Lasso realiza la selección de características reduciendo a cero los coeficientes de las características menos importantes, reteniendo solo las más impactantes.

Ejercicio 5: Implementación de PCA para Reducción de Dimensionalidad

Usando el conjunto de datos Iris, aplica Análisis de Componentes Principales (PCA) para reducir el conjunto de datos a dos dimensiones para su visualización.

from sklearn.decomposition import PCA
import pandas as pd
import matplotlib.pyplot as plt

# Load the Iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# Solution: Apply PCA with 2 components
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

# Convert PCA results to DataFrame
df_pca = pd.DataFrame(data=X_pca, columns=['PC1', 'PC2'])
df_pca['target'] = y

# Plot the PCA result
plt.figure(figsize=(8, 6))
for label in df_pca['target'].unique():
    subset = df_pca[df_pca['target'] == label]
    plt.scatter(subset['PC1'], subset['PC2'], label=iris.target_names[label])
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('PCA on Iris Dataset')
plt.legend()
plt.show()

En esta solución:

PCA reduce el conjunto de datos Iris a dos dimensiones, permitiendo visualizar la estructura del conjunto en un espacio de menor dimensionalidad.

Estos ejercicios te guían a través de aplicaciones prácticas de umbral de varianza, umbral de correlación, RFE, regresión Lasso y PCA, brindándote una comprensión integral de las técnicas de selección de características y reducción de dimensionalidad. Estas habilidades son esenciales para manejar conjuntos de datos complejos, simplificar modelos y mejorar la interpretabilidad.

10.3 Ejercicios Prácticos para el Capítulo 10

Estos ejercicios brindan práctica práctica con diferentes técnicas de selección de características, ayudándote a comprender cómo aplicarlas eficazmente para optimizar tus conjuntos de datos. Se incluyen soluciones con código para guiarte en cada paso.

Ejercicio 1: Umbral de Varianza

Tienes un conjunto de datos con múltiples características. Aplica umbral de varianza para eliminar características con varianza por debajo de 0.1.

from sklearn.feature_selection import VarianceThreshold
import pandas as pd

# Sample dataset with low-variance features
data = {'Feature1': [1, 1, 1, 1, 1],
        'Feature2': [0.5, 0.5, 0.5, 0.5, 0.5],
        'Feature3': [0, 1, 0, 1, 0],
        'Feature4': [1, 2, 3, 4, 5]}
df = pd.DataFrame(data)

# Solution: Apply variance thresholding
selector = VarianceThreshold(threshold=0.1)
reduced_data = selector.fit_transform(df)

print("Reduced dataset with high-variance features:")
print(reduced_data)

En esta solución:

El umbral de varianza elimina características que no cumplen con el umbral de varianza de 0.1, lo que da como resultado un conjunto de datos reducido con mayor densidad de información.

Ejercicio 2: Umbral de Correlación

Dado un conjunto de datos, identifica pares de características con una correlación superior a 0.8 y elimina una de cada par altamente correlacionado.

# Sample dataset with correlated features
data = {'Feature1': [1, 2, 3, 4, 5],
        'Feature2': [2, 4, 6, 8, 10],  # Perfectly correlated with Feature1
        'Feature3': [5, 3, 6, 2, 1],
        'Feature4': [10, 12, 15, 20, 25]}
df = pd.DataFrame(data)

# Solution: Correlation thresholding
correlation_matrix = df.corr()
threshold = 0.8
corr_features = set()

for i in range(len(correlation_matrix.columns)):
    for j in range(i):
        if abs(correlation_matrix.iloc[i, j]) > threshold:
            colname = correlation_matrix.columns[i]
            corr_features.add(colname)

# Remove correlated features
df_reduced = df.drop(columns=corr_features)

print("Reduced dataset with correlated features removed:")
print(df_reduced)

En esta solución:

Calculamos las correlaciones entre características y eliminamos una característica de cada par altamente correlacionado (por ejemplo, eliminando Feature2 si está altamente correlacionada con Feature1).

Ejercicio 3: Eliminación Recursiva de Características (RFE)

Usando el conjunto de datos Iris, aplica Eliminación Recursiva de Características (RFE) con un modelo de regresión logística para seleccionar las 2 características principales.

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris

# Load the Iris dataset
X, y = load_iris(return_X_y=True)

# Solution: Apply RFE with logistic regression
model = LogisticRegression(max_iter=200)
rfe = RFE(model, n_features_to_select=2)
X_rfe = rfe.fit_transform(X, y)

print("Selected features after RFE:", rfe.support_)
print("Feature ranking:", rfe.ranking_)

En esta solución:

RFE clasifica las características por importancia para un modelo de regresión logística, seleccionando las 2 principales según su impacto en el rendimiento del modelo.

Ejercicio 4: Selección de Características con Regresión Lasso

Usando el conjunto de datos de viviendas de Boston, aplica la regresión Lasso para la selección de características. Imprime las características seleccionadas con coeficientes distintos de cero.

from sklearn.linear_model import Lasso
from sklearn.datasets import load_boston
import numpy as np

# Load the Boston housing dataset
X, y = load_boston(return_X_y=True)

# Solution: Apply Lasso regression for feature selection
lasso = Lasso(alpha=0.1)
lasso.fit(X, y)

# Identify non-zero coefficients
selected_features = np.where(lasso.coef_ != 0)[0]

print("Selected features with Lasso:", selected_features)

En esta solución:

La regresión Lasso realiza la selección de características reduciendo a cero los coeficientes de las características menos importantes, reteniendo solo las más impactantes.

Ejercicio 5: Implementación de PCA para Reducción de Dimensionalidad

Usando el conjunto de datos Iris, aplica Análisis de Componentes Principales (PCA) para reducir el conjunto de datos a dos dimensiones para su visualización.

from sklearn.decomposition import PCA
import pandas as pd
import matplotlib.pyplot as plt

# Load the Iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# Solution: Apply PCA with 2 components
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

# Convert PCA results to DataFrame
df_pca = pd.DataFrame(data=X_pca, columns=['PC1', 'PC2'])
df_pca['target'] = y

# Plot the PCA result
plt.figure(figsize=(8, 6))
for label in df_pca['target'].unique():
    subset = df_pca[df_pca['target'] == label]
    plt.scatter(subset['PC1'], subset['PC2'], label=iris.target_names[label])
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('PCA on Iris Dataset')
plt.legend()
plt.show()

En esta solución:

PCA reduce el conjunto de datos Iris a dos dimensiones, permitiendo visualizar la estructura del conjunto en un espacio de menor dimensionalidad.

Estos ejercicios te guían a través de aplicaciones prácticas de umbral de varianza, umbral de correlación, RFE, regresión Lasso y PCA, brindándote una comprensión integral de las técnicas de selección de características y reducción de dimensionalidad. Estas habilidades son esenciales para manejar conjuntos de datos complejos, simplificar modelos y mejorar la interpretabilidad.