html
Dominando a Seleção de Características em Machine Learning: Um Guia Abrangente
Sumário
- Introdução à Seleção de Características
- Por que a Seleção de Características é Importante
- Entendendo SelectKBest e CHI2
-
Processo de Seleção de Características Passo a Passo
- Exemplo Prático: Conjunto de Dados Climáticos
- Melhores Práticas em Seleção de Características
- Conclusão
- Recursos Adicionais
Introdução à Seleção de Características
Seleção de características envolve selecionar um subconjunto de características relevantes (variáveis, preditores) para uso na construção de modelos. Ao eliminar dados irrelevantes ou redundantes, a seleção de características aprimora o desempenho do modelo, reduz o overfitting e diminui os custos computacionais.
Por que a Seleção de Características é Importante
- Desempenho Aprimorado do Modelo: Reduzir o número de características irrelevantes pode melhorar a precisão do modelo.
- Redução de Overfitting: Menos características diminuem a chance de o modelo capturar ruído nos dados.
- Treinamento Mais Rápido: Menos dados significam menos recursos computacionais e tempos de treinamento de modelos mais rápidos.
- Interpretação Aprimorada: Modelos simplificados são mais fáceis de entender e interpretar.
Entendendo SelectKBest e CHI2
SelectKBest é um método de seleção de características fornecido pelo scikit-learn, que seleciona as top 'k' características com base em uma função de pontuação. Quando combinado com CHI2 (Qui-quadrado), avalia a independência de cada característica em relação à variável alvo, tornando-o especialmente útil para dados categóricos.
Teste CHI2: Avalia se há uma associação significativa entre duas variáveis, considerando suas frequências.
Processo de Seleção de Características Passo a Passo
1. Importando Bibliotecas e Dados
Comece importando as bibliotecas Python necessárias e os conjuntos de dados.
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 Dados: Para este guia, usaremos o Conjunto de Dados de Clima do Kaggle.
12
data = pd.read_csv('weatherAUS.csv')data.head()
2. Análise Exploratória de Dados (EDA)
Compreender a estrutura dos dados e as correlações é essencial.
123
# Correlation Matrixcorr_matrix = data.corr()sns.heatmap(corr_matrix, annot=True)
Principais Observações:
- Existem fortes correlações entre certas variáveis de temperatura.
- Atributos de umidade e pressão mostram relações significativas com a variável alvo.
3. Tratamento de Dados Faltantes
Dados faltantes podem distorcer os resultados. É crucial tratá-los adequadamente.
Dados Numéricos
Use SimpleImputer com uma estratégia de 'média' para preencher 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])
Dados Categóricos
Para variáveis categóricas, use o valor mais frequente para preencher as 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. Codificação de Variáveis Categóricas
Modelos de machine learning exigem entrada numérica, portanto, variáveis categóricas precisam de codificação.
Codificação One-Hot
Ideal para variáveis categóricas com mais de duas categorias.
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)
Codificação de Rótulo
Adequado para variáveis categóricas binárias.
12345
def LabelEncoderMethod(series): le = LabelEncoder() return le.fit_transform(series) y = LabelEncoderMethod(data['RainTomorrow'])
Seleção de Codificação
Automatize o processo de codificação com base no número de categorias ú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. Escalonamento de Características
Padronizar as características garante que cada característica contribua igualmente para o resultado.
12
sc = StandardScaler(with_mean=False)X = sc.fit_transform(X)
6. Aplicando SelectKBest com CHI2
Selecione as top 'k' características que têm a relação mais forte com a variável alvo.
123
kbest = SelectKBest(score_func=chi2, k=10)X_temp = MinMaxScaler().fit_transform(X)X_temp = kbest.fit_transform(X_temp, y)
7. Selecionando e Eliminando Características
Identifique e retenha as características mais relevantes enquanto descarta as menos importantes.
1234567891011
# Scores for feature selectionscores = kbest.scores_features = data.columns[:-1] # Exclude target variable # Selecting top 10 featuresbest_features_indices = np.argsort(scores)[-10:]best_features = [features[i] for i in best_features_indices] # Dropping the least important featuresfeatures_to_delete = np.argsort(scores)[:-10]X = np.delete(X, features_to_delete, axis=1)
8. Dividindo o Conjunto de Dados
Divida os dados em conjuntos de treinamento e teste para avaliar o desempenho do modelo.
1
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=1)
Exemplo Prático: Conjunto de Dados Climáticos
Usando o Conjunto de Dados Climáticos, demonstramos todo o pipeline de seleção de características:
- Importação de Dados: Carregou o conjunto de dados usando pandas.
- EDA: Visualizou correlações usando o heatmap do seaborn.
- Tratamento de Dados Faltantes: Imputou valores numéricos e categóricos faltantes.
- Codificação: Aplicou Codificação One-Hot e de Rótulo com base na cardinalidade das categorias.
- Escalonamento: Padronizou as características para normalizar os dados.
- Seleção de Características: Utilizou SelectKBest com CHI2 para identificar as características de melhor desempenho.
- Divisão de Dados: Segmentou os dados em subconjuntos de treinamento e teste para treinamento do modelo.
Resultado: Reduziu com sucesso as dimensões das características de 23 para 13, aumentando a eficiência do modelo sem comprometer a precisão.
Melhores Práticas em Seleção de Características
- Entenda Seus Dados: Realize uma EDA completa para compreender as relações entre as características.
- Trate Valores Faltantes: Garanta que os dados faltantes sejam imputados adequadamente para manter a integridade dos dados.
- Escolha a Técnica de Codificação Adequada: Combine os métodos de codificação com a natureza das variáveis categóricas.
- Escalone Suas Características: Padronizar ou normalizar garante que as características contribuam igualmente.
- Seleção de Características Iterativa: Avalie e refine continuamente a seleção de características conforme você desenvolve modelos.
- Evite Vazamento de Dados: Garanta que a seleção de características seja realizada apenas nos dados de treinamento antes de dividir.
Conclusão
A seleção de características é um componente indispensável do pipeline de machine learning. Ao selecionar meticulosamente as características relevantes, você não apenas otimiza seus modelos para um melhor desempenho, mas também simplifica os recursos computacionais. Ferramentas como SelectKBest e CHI2 oferecem métodos robustos para avaliar e selecionar as características mais impactantes, garantindo que seus modelos sejam eficientes e eficazes.
Recursos Adicionais
- Documentação de Seleção de Características do Scikit-learn
- Conjunto de Dados Climáticos do Kaggle
- Um Tutorial Completo sobre Seleção de Características
- Entendendo o Teste CHI2
Inicie sua jornada de seleção de características com essas informações e eleve seus modelos de machine learning a novos patamares!