Imagem do autor
When you are getting started with machine learning, logistic regression is one of the first algorithms you’ll add to your toolbox. It’s a simple and robust algorithm, commonly used for binary classification tasks.
Considere um problema de classificação binária com classes 0 e 1. A regressão logística ajusta uma função logística ou sigmóide aos dados de entrada e prevê a probabilidade de um ponto de dados de consulta pertencer à classe 1. Interessante, não?
Neste tutorial, aprenderemos sobre regressão logística desde o início:
- A função logística (ou sigmóide)
- Como passamos da regressão linear para a logística
- Como funciona a regressão logística
Finalmente, construiremos um modelo de regressão logística simples para classificar retornos de RADAR da ionosfera.
Before we learn more about logistic regression, let’s review how the logistic function works. The logistic (or sigmoid function) is given by:
Quando você plota a função sigmóide, ela ficará assim:
No enredo, vemos que:
- Quando x = 0, σ(x) assume um valor de 0.5.
- Quando x se aproxima de +∞, σ(x) se aproxima de 1.
- Quando x se aproxima de -∞, σ(x) se aproxima de 0.
Portanto, para todas as entradas reais, a função sigmóide as comprime para assumir valores no intervalo [0, 1].
Let’s first discuss why we cannot use linear regression for a binary classification problem.
Em um problema de classificação binária, a saída é um rótulo categórico (0 ou 1). Como a regressão linear prevê resultados de valor contínuo que podem ser menores que 0 ou maiores que 1, ela não faz sentido para o problema em questão.
Além disso, uma linha reta pode não ser a melhor opção quando os rótulos de saída pertencem a uma das duas categorias.
Imagem do autor
Então, como passamos da regressão linear para a logística? Na regressão linear, a saída prevista é dada por:
Onde os βs são os coeficientes e X_is são os preditores (ou recursos).
Sem perda de generalidade, vamos assumir X_0 = 1:
Portanto, podemos ter uma expressão mais concisa:
Na regressão logística, precisamos da probabilidade prevista p_i no intervalo [0,1]. Sabemos que a função logística comprime as entradas para que elas assumam valores no intervalo [0,1].
Portanto, inserindo esta expressão na função logística, temos a probabilidade prevista como:
Então, como encontramos a curva logística mais adequada para o conjunto de dados fornecido? Para responder a isso, vamos entender a estimativa de máxima verossimilhança.
Estimativa de Máxima Verossimilhança (MLE) is used to estimate the parameters of the logistic regression model by maximizing the likelihood function. Let’s break down the process of MLE in logistic regression and how the cost function is formulated for optimization using gradient descent.
Detalhando a estimativa de máxima verossimilhança
Conforme discutido, modelamos a probabilidade de que um resultado binário ocorra em função de uma ou mais variáveis (ou características) preditoras:
Here, the βs are the model parameters or coefficients. X_1, X_2,…, X_n are the predictor variables.
O MLE visa encontrar os valores de β que maximizam a verossimilhança dos dados observados. A função de verossimilhança, denotada como L(β), representa a probabilidade de observar os resultados fornecidos para os valores preditores fornecidos no modelo de regressão logística.
Formulando a função Log-Verossimilhança
To simplify the optimization process, it’s common to work with the log-likelihood function. Because it transforms products of probabilities into sums of log probabilities.
A função log-verossimilhança para regressão logística é dada por:
Now that we know the essence of log-likelihood, let’s proceed to formulate the cost function for logistic regression and subsequently gradient descent for finding the best model parameters
Função de Custo para Regressão Logística
Para otimizar o modelo de regressão logística, precisamos maximizar a probabilidade de log. Portanto, podemos usar a probabilidade logarítmica negativa como função de custo a ser minimizada durante o treinamento. A probabilidade logarítmica negativa, muitas vezes referida como perda logística, é definida como:
O objetivo do algoritmo de aprendizagem, portanto, é encontrar os valores de ? que minimizam esta função de custo. O gradiente descendente é um algoritmo de otimização comumente usado para encontrar o mínimo desta função de custo.
Gradiente Descendente em Regressão Logística
Gradiente descendente é um algoritmo de otimização iterativo que atualiza os parâmetros do modelo β na direção oposta do gradiente da função de custo em relação a β. A regra de atualização na etapa t+1 para regressão logística usando gradiente descendente é a seguinte:
Onde α é a taxa de aprendizagem.
As derivadas parciais podem ser calculadas usando a regra da cadeia. O gradiente descendente atualiza iterativamente os parâmetros - até a convergência - visando minimizar a perda logística. À medida que converge, encontra os valores ótimos de β que maximizam a probabilidade dos dados observados.
Agora que você sabe como funciona a regressão logística, vamos construir um modelo preditivo usando a biblioteca scikit-learn.
Vamos usar o conjunto de dados da ionosfera do repositório de aprendizado de máquina UCI para este tutorial. O conjunto de dados compreende 34 recursos numéricos. A saída é binária, ‘boa’ ou ‘ruim’ (denotada por ‘g’ ou ‘b’). O rótulo de saída ‘bom’ refere-se aos retornos do RADAR que detectaram alguma estrutura na ionosfera.
Passo 1 – Carregando o conjunto de dados
Primeiro, baixe o conjunto de dados e leia-o em um dataframe do pandas:
import pandas as pd
import urllib
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/ionosphere/iphere.data"
data = urllib.request.urlopen(url)
df = pd.read_csv(data, header=None)
Passo 2 – Explorando o conjunto de dados
Let’s take a look at the first few rows of the dataframe:
# Display the first few rows of the DataFrame
df.head()
Saída truncada de df.head()
Let’s get some information about the dataset: the number of non-null values and the data types of each of the columns:
# Get information about the dataset
print(df.info())
Saída truncada de df.info()
Como temos todos os recursos numéricos, também podemos obter algumas estatísticas descritivas usando o método describe()
método no dataframe:
# Get descriptive statistics of the dataset
print(df.describe())
Saída truncada de df.describe()
Os nomes das colunas são atualmente de 0 a 34, incluindo o rótulo. Como o conjunto de dados não fornece nomes descritivos para as colunas, ele apenas se refere a elas como atributo_1 a atributo_34. Se desejar, você pode renomear as colunas do quadro de dados conforme mostrado:
column_names = [
"attribute_1", "attribute_2", "attribute_3", "attribute_4", "attribute_5",
"attribute_6", "attribute_7", "attribute_8", "attribute_9", "attribute_10",
"attribute_11", "attribute_12", "attribute_13", "attribute_14", "attribute_15",
"attribute_16", "attribute_17", "attribute_18", "attribute_19", "attribute_20",
"attribute_21", "attribute_22", "attribute_23", "attribute_24", "attribute_25",
"attribute_26", "attribute_27", "attribute_28", "attribute_29", "attribute_30",
"attribute_31", "attribute_32", "attribute_33", "attribute_34", "class_label"
]
df.columns = column_names
Nota: Esta etapa é puramente opcional. Você pode prosseguir com os nomes das colunas padrão, se preferir.
# Display the first few rows of the DataFrame
df.head()
Saída truncada de df.head() [após renomear colunas]
Etapa 3 – Renomeando rótulos de classes e visualizando a distribuição de classes
Como os rótulos das classes de saída são ‘g’ e ‘b’, precisamos mapeá-los para 1 e 0, respectivamente. Você pode fazer isso usando map()
or replace()
:
# Convert the class labels from 'g' and 'b' to 1 and 0, respectively
df["class_label"] = df["class_label"].replace({'g': 1, 'b': 0})
Vamos visualizar também a distribuição dos rótulos das classes:
import matplotlib.pyplot as plt
# Count the number of data points in each class
class_counts = df['class_label'].value_counts()
# Create a bar plot to visualize the class distribution
plt.bar(class_counts.index, class_counts.values)
plt.xlabel('Class Label')
plt.ylabel('Count')
plt.xticks(class_counts.index)
plt.title('Class Distribution')
plt.show()
Distribuição de rótulos de classe
Vemos que há um desequilíbrio na distribuição. Existem mais registros pertencentes à classe 1 do que à classe 0. Trataremos desse desequilíbrio de classes ao construir o modelo de regressão logística.
Passo 5 – Pré-processando o conjunto de dados
Vamos coletar os recursos e rótulos de saída da seguinte forma:
X = df.drop('class_label', axis=1) # Input features
y = df['class_label'] # Target variable
Depois de dividir o conjunto de dados em conjuntos de treinamento e teste, precisamos pré-processar o conjunto de dados.
Quando há muitos recursos numéricos – cada um em uma escala potencialmente diferente – precisamos pré-processar os recursos numéricos. Um método comum é transformá-los de forma que sigam uma distribuição com média zero e variância unitária.
A StandardScaler
do módulo de pré-processamento do scikit-learn nos ajuda a conseguir isso.
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Get the indices of the numerical features
numerical_feature_indices = list(range(34)) # Assuming the numerical features are in columns 0 to 33
# Initialize the StandardScaler
scaler = StandardScaler()
# Normalize the numerical features in the training set
X_train.iloc[:, numerical_feature_indices] = scaler.fit_transform(X_train.iloc[:, numerical_feature_indices])
# Normalize the numerical features in the test set using the trained scaler from the training set
X_test.iloc[:, numerical_feature_indices] = scaler.transform(X_test.iloc[:, numerical_feature_indices])
Passo 6 – Construindo um Modelo de Regressão Logística
Agora podemos instanciar um classificador de regressão logística. O LogisticRegression
class faz parte do módulo linear_model do scikit-learn.
Observe que definimos o class_weight
parâmetro para 'equilibrado'. Isso nos ajudará a explicar o desequilíbrio de classes. Atribuindo pesos a cada classe – inversamente proporcionais ao número de registros nas classes.
Após instanciar a classe, podemos ajustar o modelo ao conjunto de dados de treinamento:
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(class_weight='balanced')
model.fit(X_train, y_train)
Passo 7 – Avaliando o Modelo de Regressão Logística
Você pode ligar para o predict()
método para obter as previsões do modelo.
Além da pontuação de precisão, também podemos obter um relatório de classificação com métricas como precisão, recall e pontuação F1.
from sklearn.metrics import accuracy_score, classification_report
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")
classification_rep = classification_report(y_test, y_pred)
print("Classification Report:n", classification_rep)
Parabéns, você codificou seu primeiro modelo de regressão logística!
Neste tutorial, aprendemos detalhadamente sobre regressão logística: desde teoria e matemática até a codificação de um classificador de regressão logística.
Na próxima etapa, tente construir um modelo de regressão logística para um conjunto de dados adequado de sua escolha.
O conjunto de dados Ionosphere é licenciado sob uma Creative Commons Atribuição 4.0 Internacional (CC BY 4.0) licença:
Sigillito, V., Wing, S., Hutton, L. e Baker, K.. (1989). Ionosfera. Repositório de aprendizado de máquina UCI. https://doi.org/10.24432/C5W01B.
Bala Priya C é um desenvolvedor e escritor técnico da Índia. Ela gosta de trabalhar na interseção de matemática, programação, ciência de dados e criação de conteúdo. Suas áreas de interesse e especialização incluem DevOps, ciência de dados e processamento de linguagem natural. Ela gosta de ler, escrever, programar e tomar café! Atualmente, ela está trabalhando para aprender e compartilhar seu conhecimento com a comunidade de desenvolvedores criando tutoriais, guias de instruções, artigos de opinião e muito mais.
- Conteúdo com tecnologia de SEO e distribuição de relações públicas. Seja amplificado hoje.
- PlatoData.Network Gerativa Vertical Ai. Capacite-se. Acesse aqui.
- PlatoAiStream. Inteligência Web3. Conhecimento Amplificado. Acesse aqui.
- PlatãoESG. Carbono Tecnologia Limpa, Energia, Ambiente, Solar, Gestão de resíduos. Acesse aqui.
- PlatoHealth. Inteligência em Biotecnologia e Ensaios Clínicos. Acesse aqui.
- Fonte: https://www.kdnuggets.com/building-predictive-models-logistic-regression-in-python?utm_source=rss&utm_medium=rss&utm_campaign=building-predictive-models-logistic-regression-in-python
- :é
- :não
- $UP
- 1
- 10
- 11
- 13
- 20
- 33
- 7
- 9
- a
- Sobre
- Conta
- precisão
- Alcançar
- adicionar
- Adição
- Depois de
- visa
- algoritmo
- algoritmos
- Todos os Produtos
- tb
- an
- e
- responder
- se aproxima
- SOMOS
- áreas
- AS
- assumir
- At
- autoria
- b
- padeiro
- Equilibrado
- Barra
- BE
- Porque
- pertença
- MELHOR
- Break
- construir
- Prédio
- by
- chamada
- CAN
- não podes
- Categorias
- cadeia
- escolha
- classe
- aulas
- classificação
- codificado
- Codificação
- coletar
- Coluna
- colunas
- comum
- geralmente
- Commons
- comunidade
- compreende
- conciso
- conteúdo
- Criação de conteúdo
- converter
- Custo
- cobertura
- crio
- criação
- Atualmente
- curva
- dados,
- Os pontos de dados
- ciência de dados
- conjunto de dados
- Padrão
- definido
- Derivativos
- detalhe
- detectou
- Developer
- DevOps
- diferente
- direção
- discutir
- discutido
- Ecrã
- distribuição
- do
- parece
- down
- download
- durante
- cada
- essência
- estimativa
- avaliação
- experiência
- Explorando
- expressão
- Funcionalidades
- poucos
- Encontre
- descoberta
- encontra
- Primeiro nome
- caber
- seguir
- segue
- Escolha
- QUADRO
- da
- função
- ter
- obtendo
- dado
- Go
- meta
- maior
- Solo
- Guias
- mão
- manipular
- Ter
- ajudar
- ajuda
- sua experiência
- Como funciona o dobrador de carta de canal
- HTTPS
- ICS
- if
- desequilíbrio
- importar
- in
- incluir
- índice
- Índia
- Índices
- INFORMAÇÕES
- entrada
- inputs
- interesse
- interessante
- interseção
- para dentro
- IT
- apenas por
- KDnuggetsGenericName
- Saber
- Conhecimento
- O rótulo
- Rótulos
- língua
- APRENDER
- aprendido
- aprendizagem
- menos
- deixar
- Biblioteca
- Licença
- Licenciado
- como
- probabilidade
- gostos
- Line
- carregamento
- log
- olhar
- parece
- fora
- máquina
- aprendizado de máquina
- fazer
- muitos
- mapa,
- matemática
- matplotlib
- Maximizar
- maximizando
- máximo
- Posso..
- significar
- método
- Métrica
- minimizar
- mínimo
- modelo
- modelos
- módulo
- mais
- mover
- nomes
- natural
- Linguagem Natural
- Processamento de linguagem natural
- você merece...
- negativo
- Próximo
- número
- observado
- of
- frequentemente
- on
- ONE
- Opinião
- oposto
- ideal
- otimização
- Otimize
- or
- Resultado
- resultados
- saída
- outputs
- pandas
- parâmetro
- parâmetros
- parte
- peças
- platão
- Inteligência de Dados Platão
- PlatãoData
- ponto
- pontos
- potencialmente
- Precisão
- previsto
- Previsões
- preditivo
- Predictor
- Previsões
- preferir
- probabilidade
- Problema
- prosseguir
- processo
- em processamento
- Produtos
- Programação
- fornecer
- puramente
- Python
- radar
- alcance
- Taxa
- Leia
- Leitura
- reais
- registros
- a que se refere
- refere-se
- regressão
- Denunciar
- repositório
- representa
- solicitar
- respeito
- respectivamente
- Retorna
- rever
- uma conta de despesas robusta
- Regra
- s
- Ciência
- scikit-learn
- Ponto
- Vejo
- sentido
- conjunto
- Conjuntos
- compartilhando
- ela
- mostrando
- simples
- simplificar
- So
- alguns
- divisão
- começado
- estatística
- Passo
- direto
- estrutura
- Subseqüentemente
- tal
- adequado
- somas
- Tire
- toma
- Target
- tarefas
- Dados Técnicos:
- teste
- ensaio
- do que
- que
- A
- Eles
- teoria
- Lá.
- assim sendo
- deles
- isto
- Através da
- para
- Caixa de ferramentas
- Trem
- treinado
- Training
- Transformar
- transformações
- tentar
- tutorial
- tutoriais
- dois
- tipos
- para
- compreender
- unidade
- Atualizar
- Atualizações
- URL
- us
- conta americana
- usar
- usava
- utilização
- valor
- Valores
- visualizar
- we
- quando
- qual
- porque
- Wikipedia
- precisarão
- Asa
- de
- Atividades:
- trabalhar
- trabalho
- seria
- escritor
- escrita
- X
- sim
- Você
- investimentos
- zefirnet
- zero