html
Dominando la Selección de Características en Aprendizaje Automático: Una Guía Integral
Tabla de Contenidos
- Introducción a la Selección de Características
- Por Qué la Selección de Características es Importante
- Entendiendo SelectKBest y CHI2
-
Proceso Paso a Paso de Selección de Características
- Ejemplo Práctico: Conjunto de Datos de Clima
- Mejores Prácticas en la Selección de Características
- Conclusión
- Recursos Adicionales
Introducción a la Selección de Características
La selección de características implica elegir un subconjunto de características relevantes (variables, predictores) para su uso en la construcción del modelo. Al eliminar datos irrelevantes o redundantes, la selección de características mejora el rendimiento del modelo, reduce el sobreajuste y disminuye los costos computacionales.
Por Qué la Selección de Características es Importante
- Mejora del Rendimiento del Modelo: Reducir el número de características irrelevantes puede aumentar la precisión del modelo.
- Reducción del Sobreajuste: Menos características disminuyen la probabilidad de que el modelo capture ruido en los datos.
- Entrenamiento Más Rápido: Menos datos significan recursos computacionales reducidos y tiempos de entrenamiento de modelos más rápidos.
- Mayor Interpretabilidad: Los modelos simplificados son más fáciles de entender e interpretar.
Entendiendo SelectKBest y CHI2
SelectKBest es un método de selección de características proporcionado por scikit-learn, que selecciona las 'k' mejores características basándose en una función de puntuación. Cuando se combina con CHI2 (Chi-cuadrado), evalúa la independencia de cada característica con respecto a la variable objetivo, lo que lo hace especialmente útil para datos categóricos.
Prueba CHI2: Evalúa si existe una asociación significativa entre dos variables, considerando sus frecuencias.
Proceso Paso a Paso de Selección de Características
1. Importación de Librerías y Datos
Comience importando las librerías y conjuntos de datos necesarios de Python.
12345678
import pandas as pd import seaborn as snsimport numpy as npfrom sklearn.impute import SimpleImputerfrom sklearn.preprocessing import OneHotEncoder, LabelEncoder, StandardScaler, MinMaxScalerfrom sklearn.compose import ColumnTransformerfrom sklearn.feature_selection import SelectKBest, chi2from sklearn.model_selection import train_test_split
Conjunto de Datos: Para esta guía, usaremos el Conjunto de Datos de Clima de Kaggle.
12
data = pd.read_csv('weatherAUS.csv')data.head()
2. Análisis Exploratorio de Datos (EDA)
Entender la estructura y las correlaciones de los datos es esencial.
123
# Matriz de Correlacióncorr_matrix = data.corr()sns.heatmap(corr_matrix, annot=True)
Observaciones Clave:
- Existen fuertes correlaciones entre ciertas variables de temperatura.
- Los atributos de humedad y presión muestran relaciones significativas con la variable objetivo.
3. Manejo de Datos Faltantes
Los datos faltantes pueden sesgar los resultados. Es crucial manejarlos adecuadamente.
Datos Numéricos
Use SimpleImputer con una estrategia de 'media' para rellenar los valores numéricos faltantes.
12345
from sklearn.impute import SimpleImputer imp_mean = SimpleImputer(missing_values=np.nan, strategy='mean')numerical_cols = data.select_dtypes(include=['int64', 'float64']).columnsdata[numerical_cols] = imp_mean.fit_transform(data[numerical_cols])
Datos Categóricos
Para variables categóricas, use el valor más frecuente para rellenar las entradas faltantes.
123
imp_mode = SimpleImputer(missing_values=np.nan, strategy='most_frequent')categorical_cols = data.select_dtypes(include=['object']).columnsdata[categorical_cols] = imp_mode.fit_transform(data[categorical_cols])
4. Codificación de Variables Categóricas
Los modelos de aprendizaje automático requieren entradas numéricas, por lo que las variables categóricas necesitan ser codificadas.
Codificación One-Hot
Ideal para variables categóricas con más de dos categorías.
123456
def OneHotEncoderMethod(indices, data): columnTransformer = ColumnTransformer([('encoder', OneHotEncoder(), indices)], remainder='passthrough') return columnTransformer.fit_transform(data) one_hot_indices = [data.columns.get_loc(col) for col in ['WindGustDir', 'WindDir9am', 'WindDir3pm', 'RainToday']]X = OneHotEncoderMethod(one_hot_indices, data)
Codificación de Etiquetas
Adecuado para variables categóricas binarias.
12345
def LabelEncoderMethod(series): le = LabelEncoder() return le.fit_transform(series) y = LabelEncoderMethod(data['RainTomorrow'])
Selección de Codificación
Automatice el proceso de codificación basado en el número de categorías únicas.
123456789101112131415
def EncodingSelection(X, threshold=10): string_cols = list(np.where((X.dtypes == object))[0]) one_hot_encoding_indices = [] for col in string_cols: unique_values = len(pd.unique(X[X.columns[col]])) if unique_values == 2 or unique_values > threshold: X[X.columns[col]] = LabelEncoderMethod(X[X.columns[col]]) else: one_hot_encoding_indices.append(col) X = OneHotEncoderMethod(one_hot_encoding_indices, X) return X X = EncodingSelection(X)
5. Escalado de Características
Estandarizar características asegura que cada una contribuya por igual al resultado.
12
sc = StandardScaler(with_mean=False)X = sc.fit_transform(X)
6. Aplicando SelectKBest con CHI2
Seleccione las 'k' características principales que tienen la relación más fuerte con la variable objetivo.
123
kbest = SelectKBest(score_func=chi2, k=10)X_temp = MinMaxScaler().fit_transform(X)X_temp = kbest.fit_transform(X_temp, y)
7. Seleccionando y Eliminando Características
Identifique y retenga las características más relevantes mientras descarta las menos importantes.
1234567891011
# Puntuaciones para selección de característicasscores = kbest.scores_features = data.columns[:-1] # Excluir variable objetivo # Seleccionando las 10 mejores característicasbest_features_indices = np.argsort(scores)[-10:]best_features = [features[i] for i in best_features_indices] # Eliminando las características menos importantesfeatures_to_delete = np.argsort(scores)[:-10]X = np.delete(X, features_to_delete, axis=1)
8. División del Conjunto de Datos
Divida los datos en conjuntos de entrenamiento y prueba para evaluar el rendimiento del modelo.
1
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=1)
Ejemplo Práctico: Conjunto de Datos de Clima
Usando el Conjunto de Datos de Clima, demostramos toda la tubería de selección de características:
- Importación de Datos: Cargamos el conjunto de datos usando pandas.
- EDA: Visualizamos las correlaciones usando el mapa de calor de seaborn.
- Manejo de Datos Faltantes: Imputamos valores numéricos y categóricos faltantes.
- Codificación: Aplicamos Codificación One-Hot y de Etiquetas basada en la cardinalidad de las categorías.
- Escalado: Estandarizamos las características para normalizar los datos.
- Selección de Características: Utilizamos SelectKBest con CHI2 para identificar las características de mejor rendimiento.
- División de Datos: Segmentamos los datos en subconjuntos de entrenamiento y prueba para el entrenamiento del modelo.
Resultado: Redujimos exitosamente las dimensiones de las características de 23 a 13, mejorando la eficiencia del modelo sin comprometer la precisión.
Mejores Prácticas en la Selección de Características
- Entiende Tus Datos: Realiza un EDA exhaustivo para comprender las relaciones entre características.
- Maneja los Valores Faltantes: Asegúrate de que los datos faltantes sean imputados adecuadamente para mantener la integridad de los datos.
- Elige la Técnica de Codificación Correcta: Combina los métodos de codificación con la naturaleza de las variables categóricas.
- Escala Tus Características: Estandarizar o normalizar asegura que las características contribuyan por igual.
- Selección Iterativa de Características: Evalúa y refina continuamente la selección de características a medida que desarrollas modelos.
- Evita la Fuga de Datos: Asegúrate de que la selección de características se realice solo en los datos de entrenamiento antes de la división.
Conclusión
La selección de características es un componente indispensable de la tubería de aprendizaje automático. Al seleccionar meticulosamente las características relevantes, no solo optimizas tus modelos para un mejor rendimiento, sino que también optimizas los recursos computacionales. Herramientas como SelectKBest y CHI2 ofrecen métodos robustos para evaluar y seleccionar las características más impactantes, asegurando que tus modelos sean tanto eficientes como efectivos.
Recursos Adicionales
- Documentación de Selección de Características de Scikit-learn
- Conjunto de Datos de Clima de Kaggle
- Un Tutorial Completo sobre Selección de Características
- Entendiendo la Prueba CHI2
¡Emprende tu viaje en la selección de características con estos conocimientos y eleva tus modelos de aprendizaje automático a nuevas alturas!