SingularCode

Regressão Logística

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.

Atualizado em: 20/04/2024 por Nelson H. Koshoji