Regressão Logística
Definição
A regressão logística é um método estatístico usado para prever a probabilidade de ocorrência de um evento, mapeando dados para um espaço de probabilidade entre 0 e 1. Este método é amplamente utilizado para problemas de classificação binária, onde o objetivo é categorizar as observações em duas classes distintas. A regressão logística é fundamentalmente uma forma de regressão linear, mas, em vez de prever um valor contínuo, ela prevê a probabilidade logarítmica de uma variável dependente binária com base em uma ou mais variáveis independentes.
Como Funciona
A regressão logística utiliza a função logística (ou sigmóide) para modelar a probabilidade de que uma determinada entrada pertença à classe 1 (em vez de pertencer à classe 0). A função sigmóide tem uma característica “S” e mapeia qualquer valor real para um valor entre 0 e 1, tornando-a ideal para modelar probabilidades. A equação da função sigmóide é:
\[\sigma(z) = \frac{1}{1+e^{-z}}\]
onde \(z\) é a combinação linear das variáveis independentes \((X)\) e os coeficientes de regressão \((\beta)\), expressa como \(z = \beta_0 + \beta_1X_1 + \beta_2X_2 + … + \beta_nX_n\).
Estimação dos Parâmetros
Os parâmetros do modelo ((\beta)) são estimados usando o método de máxima verossimilhança, que busca maximizar a probabilidade de observar os dados dados os parâmetros. Este processo envolve iterativamente ajustar os coeficientes para melhor se alinhar com os dados de treinamento.
Aplicações
A regressão logística é usada em uma variedade de campos, incluindo:
Medicina: Para prever a probabilidade de um paciente ter uma determinada doença com base em características clínicas.
Marketing: Para prever a probabilidade de um cliente comprar um produto ou cancelar uma assinatura.
Finanças: Para prever a probabilidade de inadimplência de um empréstimo com base no histórico de crédito do tomador.
Engenharia: Para classificação binária em problemas de detecção de falhas ou qualidade de produto.
Vantagens:
Interpretabilidade: Os coeficientes do modelo podem ser interpretados como o logaritmo das chances (odds) de ocorrência de um evento, facilitando a compreensão dos efeitos das variáveis independentes.
Eficiência: A regressão logística é relativamente simples e eficiente para treinar, mesmo com um grande número de observações.
Desvantagens:
Linearidade: Assume uma relação linear entre as variáveis independentes e o logaritmo das odds, o que pode não capturar relações mais complexas.
Classificação Binária: Embora possa ser estendida para classificação multiclasse (por exemplo, usando a abordagem “um contra o resto”), ela é inerentemente projetada para problemas binários.
Dataset Breast Cancer Wisconsin (Diagnostic)
Um dataset popular do scikit-learn que pode ser utilizado para exemplificar o uso de regressão logística é o Breast Cancer Wisconsin (Diagnostic) dataset. Este dataset é particularmente interessante para tarefas de classificação binária, pois envolve a previsão de diagnósticos de câncer de mama como maligno ou benigno, o que se alinha bem com a natureza binária da regressão logística.
O dataset contém características de imagens digitais de aspirados por agulha fina (FNA) de massas mamárias. Ele inclui informações sobre 569 casos, com 30 características calculadas para cada caso, como a textura, o perímetro, a suavidade e a simetria das células do tumor.
Carregando Bibliotecas para o Uso da Regressão Logística:
from sklearn.datasets import load_breast_cancer from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # Carregando o dataset cancer = load_breast_cancer() X = cancer.data y = cancer.target # Dividindo o dataset em conjuntos de treino e teste X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # Inicializando e treinando o modelo de regressão logística model = LogisticRegression(max_iter=10000) # Aumentando max_iter para garantir a convergência model.fit(X_train, y_train) # Fazendo previsões com o conjunto de teste predictions = model.predict(X_test) # Avaliando o modelo accuracy = accuracy_score(y_test, predictions) print(f"Acurácia do modelo: {accuracy}")
Neste exemplo, o max_iter é aumentado para garantir que o algoritmo tenha iterações suficientes para convergir, o que pode ser necessário devido ao maior número de características e à complexidade do dataset.
O dataset Breast Cancer Wisconsin é um excelente recurso para praticar regressão logística devido à sua relevância clínica e à clara divisão binária dos resultados. Além disso, trabalhar com dados reais pode fornecer insights valiosos sobre como os modelos de machine learning são aplicados em problemas do mundo real, especialmente em campos críticos como o da saúde.
Gráfico:
É possível visualizar os resultados de um modelo de regressão logística utilizando gráficos, especialmente para entender melhor a separação entre as classes previstas pelo modelo. Contudo, dada a natureidade multidimensional da maioria dos datasets, incluindo o Breast Cancer Wisconsin dataset mencionado anteriormente, a visualização direta dos resultados pode ser desafiadora. Uma abordagem comum é reduzir a dimensionalidade dos dados para duas ou três dimensões para facilitar a visualização. Uma técnica popular para isso é a Análise de Componentes Principais (PCA).
import matplotlib.pyplot as plt import numpy as np from sklearn.datasets import load_breast_cancer from sklearn.decomposition import PCA from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler # Carregar o dataset cancer = load_breast_cancer() X = cancer.data y = cancer.target # Padronizar os dados scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # Reduzir a dimensionalidade para 2D usando PCA pca = PCA(n_components=2) X_pca = pca.fit_transform(X_scaled) # Dividir os dados em conjuntos de treino e teste X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=0.2, random_state=42) # Treinar o modelo de regressão logística model = LogisticRegression() model.fit(X_train, y_train) # Previsões do modelo predictions = model.predict(X_test) # Plotar os resultados plt.figure(figsize=(10, 6)) plt.scatter(X_test[y_test == 0][:, 0], X_test[y_test == 0][:, 1], color='red', label='Classe 0: Benigno') plt.scatter(X_test[y_test == 1][:, 0], X_test[y_test == 1][:, 1], color='blue', label='Classe 1: Maligno') # Adicionar a linha de decisão xmin, xmax = plt.xlim() ymin, ymax = plt.ylim() xx, yy = np.meshgrid(np.linspace(xmin, xmax, 50), np.linspace(ymin, ymax, 50)) Z = model.decision_function(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.contour(xx, yy, Z, colors='green', levels=[0], alpha=0.5, linestyles=['-']) plt.xlabel('Primeiro Componente Principal') plt.ylabel('Segundo Componente Principal') plt.title('Visualização da Regressão Logística com PCA no Dataset Breast Cancer') plt.legend() plt.show()
Neste exemplo, primeiro padronizamos os dados para ter uma média de zero e uma variação de um, o que é uma prática recomendada antes de aplicar PCA. Em seguida, utilizamos PCA para reduzir a dimensionalidade dos dados para duas dimensões, facilitando a visualização. Após treinar o modelo de regressão logística, plotamos os pontos de teste em um gráfico de dispersão, colorindo-os de acordo com sua classe real. A linha de decisão calculada pelo modelo é adicionada ao gráfico, mostrando como o modelo separa as classes.
A visualização não apenas ajuda a entender como o modelo está performando, mas também fornece insights valiosos sobre a distribuição dos dados e a sobreposição entre as classes.