Modelos de Predição | Regressão Logística

Quando os seus dados não são suficientes para treinar um bom modelo de classificação.

Fernando Matsumoto
Turing Talks
10 min readAug 11, 2019

--

Escrito por Fernando Matsumoto.

Nos últimos posts, vimos alguns modelos de predição, como o SVM, que é usado principalmente para classificação. Hoje vamos ver mais um modelo de classificação: a regressão logística (sim, a regressão logística é um modelo de classificação).

Antes de ver esse modelo, é necessário entender um pouco de de regressão linear (Turing Talks #11) e de probabilidade. Neste post, vamos introduzir um pouco do básico de probabilidade, mas se você quiser saber mais, teremos um post um pouco mais aprofundado na próxima semana.

1. Motivação (o que é a Regressão Logística?)

Para motivar esse novo modelo, vamos analisar brevemente um dos modelos de classificação que vimos nas últimas semanas: o SVM. De forma simplificada, em um problema de classificação binária com 2 features, o SVM tenta achar curvas que separem os pontos de acordo com sua classificação. Com isso, podemos predizer a classificação de um ponto arbitrário olhando em qual lado da reta ele está.

No entanto, em geral, os modelos cometerão erros. Às vezes, pode ser importante ter uma ideia da confiança do modelo na predição feita. Nesses casos, poderíamos usar a distância do ponto à reta como uma medida de confiança. Uma medida ainda melhor seria se a saída do modelo fosse a probabilidade da observação ter classe 1 (supondo um problema de classificação binária, com classes 0 e 1). É exatamente esse tipo de modelo que vamos construir no resto desse post.

O SVM simplesmente separa as duas classes de pontos. Já a regressão logística prediz a probabilidade dos pontos pertencerem a cada uma das classes.

2. Matematicamente, o que o modelo faz?

A partir daqui, vamos tentar entender como a regressão logística funciona matematicamente. Recomendamos fortemente que você tente entender o modelo, mas se você não estiver interessado na parte matemática, é só pular para a parte 6.

Noções de Probabilidade

Para acompanhar o resto da parte matemática desse post, é necessário saber o básico de probabilidade. Se você já se sentir confortável com o assunto, sinta-se livre para pular essa introdução.

Usamos o conceito de probabilidade cotidianamente; por exemplo, quando ouvimos na previsão do tempo que a probabilidade de chuva amanhã é de 20%. Essa frase reflete a nossa incerteza sobre um evento: é improvável que chova amanhã, mas não temos certeza do que acontecerá de fato.

No exemplo anterior, dizemos que “chover amanhã” é um evento, de forma que podemos escrever P(chover amanhã) = 20%, onde P(A) indica a probabilidade de um evento A. Essa probabilidade pode variar entre 0% e 100%, onde 0% indica certeza de que A não ocorrerá e 100% indica certeza de que A ocorrerá. É muito comum utilizarmos, ao invés de porcentagens entre 0% e 100%, números entre 0 e 1. Nessa notação, a probabilidade de chuva seria 0,20.

Ainda no exemplo da chuva, qual seria a probabilidade de não chover amanhã? Podemos escrever

uma vez que certamente ou choverá ou não choverá. Dessa forma, a probabilidade de não chover é igual a 1 − P(chover) = 0,80.

Por último, como esse post trata de classificação, vamos escrever os eventos de maneira um pouco diferente. Denotando a classe de uma observação por y, o evento “a observação tem classe 1” pode ser escrito como “y=1”. Analogamente, se a probabilidade da classe ser 0 for de 32%, podemos escrever P(y=0) = 0,32.

O Modelo

O nosso objetivo, como vimos no final da seção 1, é encontrar um modelo de regressão que calcule a probabilidade de um dado ponto ter classificação 0 ou 1 (que chamaremos também de classificações negativa e positiva, respectivamente). Nesse momento, podemos pensar na regressão linear que vimos duas semanas atrás. Será que podemos usar ela para estimar a probabilidade de classificação positiva? Não, pelo menos não diretamente. Observe que a regressão linear gera uma saída no intervalo (−∞, +∞), mas probabilidades estão no intervalo [0, 1]. Para resolver isso, precisamos de uma função que ligue esses dois intervalos: uma função de ligação. A função que utilizaremos é a função logit(x), que recebe um número entre 0 e 1, e retorna um número real:

Para interpretar essa função, primeiramente, definimos a chance (odds) de um evento A como:

onde A’ é a negação de A. Por exemplo, considere que chove uma vez a cada dez dias, de forma que a probabilidade de chover é 1/10 = 0,1. Então, odds = 0,1/0,9 = 1/9, ou seja, a chance de chover é de 1 para 9 (para cada dia de chuva, há 9 dias sem chuva).

Tomando a probabilidade de um ponto x ter classe positiva como p = P(y = 1), temos então que:

de forma que a função logit está intimamente relacionada com a chance de um evento ocorrer. Veremos mais a frente que essa relação nos ajudará a interpretar os resultados obtidos com a regressão linear.

Agora que temos um número real, podemos estimá-lo usando um regressor f qualquer. Lembrando que para classificar um ponto queremos estimar o probabilidade de y = 1, temos:

onde σ é a inversa de logit, também chamada de função sigmoide ou logística. É por isso que o modelo é chamado de regressão logística: ele calcula a probabilidade P(y=1) como σ(f(x)), onde σ é a função logística e f(x) é uma função de regressão.

Mas qual regressor devemos usar como f? No caso da regressão logística, utiliza-se um regressor linear:

Após predizer a probabilidade de um dado ponto ter classe positiva, o algoritmo precisa classificar esse ponto. Para fazer isso, simplesmente escolhemos a classe mais provável: se p > 0,5, a classe predita é positiva; caso contrário, é negativa.

Resumidamente, a regressão logística prediz P(y=1) usando um modelo linear para logit(P(y=1)):

Obs: chamamos os modelos que adaptam a regressão linear de modelos lineares generalizados. Em particular, dizemos que a regressão logística é um modelo linear generalizado com função de ligação logit(x).

Classificação com Mais de Duas Classes

Até agora falamos somente de classificação com duas classes. No entanto, é possível estender a regressão linear para mais de duas classes. Há dois modos principais de fazer isso.

O primeiro já vimos quando falamos de SVMs: trata-se do modelo “one-vs-rest”, em que, para cada classe, criamos um classificador que nos dá a probabilidade de um ponto pertencer ou não àquela classe. A classificação escolhida seria então aquela com a maior probabilidade.

O outro modo, que chamamos de multinomial, consiste em adaptar a função de ligação para que o modelo consiga predizer diretamente a probabilidade de cada classe.

3. Como Interpretar os Coeficientes?

Para conseguir interpretar os coeficientes wi, vamos primeiro entender o seu significado em um caso específico. Suponha que o nosso objetivo seja modelar a probabilidade de alguém desenvolver câncer de fígado com base em seu histórico familiar. Denotando por p a probabilidade de câncer e por x o número de familiares com câncer, temos:

Como eʷ¹ é a razão entre a chance de câncer quando x=1 e quando x=0, podemos dizer que para cada familiar a mais com câncer, a sua chance de desenvolver câncer é multiplicada por eʷ¹.

Estendendo isso para várias features, podemos dizer que:

  • eʷ⁰ é a chance de classe positiva quando todas as features são nulas;
  • eʷⁱ representa por quanto a chance é multiplicada quando aumentamos a feature i por 1.

4. Treinando o Modelo

A primeira vista, poderíamos pensar em treinar a regressão logística do mesmo modo que treinamos a regressão linear: minimizando o erro quadrático médio. No entanto há alguns problemas com o erro quadrático médio (MSE) para regressão logística, como:

  1. O MSE não é convexo na regressão logística, ou seja, podem haver vários mínimos locais que não são mínimos globais. Durante o treinamento, o modelo pode ficar “preso” em um desses mínimos locais.
  2. O MSE funciona bem para dados contínuos, mas não tanto para classificação (matematicamente, ele assume algumas propriedades estatísticas sobre o target).

Entropia Cruzada Binária

Uma função de custo melhor no caso da regressão logística é a entropia cruzada binária. Esse nome pode parecer complicado, mas a interpretação é relativamente simples.

Buscamos um modelo que dê probabilidades altas a observações positivas e probabilidades baixas a observações negativas. Pensando em uma observação positiva, a nossa função de custo deve ser elevada se p = P(y=1) for baixo. Essa condição é modelada pela entropia cruzada H:

Entropia cruzada de uma observação positiva. O sinal de menos corresponde ao fato do logaritmo ser negativo para p < 1.

De forma análoga, podemos definir Hi = −ln(1 − p) para observações negativas. Juntando essas duas definições temos:

Observe que, para observações positivas, o termo com (1−y) se anula e, para observações negativas, o termo com y se anula. A entropia cruzada é¹:

  • nula quando o modelo prediz a classe correta com alta confiança (y=p=1 ou y=p=0);
  • infinita quando o modelo prediz a classe errada com alta confiança (y=1 e p=0, ou y=0 e p=1);
  • entre 0 e infinito quando o modelo não tem alta confiança.

Dessa forma, a entropia cruzada serve como uma medida de incerteza. A entropia cruzada no dataset inteiro é então a soma da entropia cruzada em cada observação:

Na fórmula acima, yi é a classe da i-ésima observação e p é a probabilidade da observação ter classe positiva, ou seja, a saída da regressão logística. Como p = σ(f(x)), onde f é a regressão linear, o custo J depende dos parâmetros wi.

Para visualizar melhor a entropia cruzada, vamos analisar o seu comportamento em dois datasets, cada um com apenas uma feature.

Os pontos amarelos representam observações positivas e os roxos, negativas. A curva em azul indica a probabilidade da classe ser positiva, conforme predito por uma regressão logística.

No gráfico da direita, todos os pontos com x > 0 são positivos, enquanto os pontos com x < 0 são negativos. Dessa forma, p é quase sempre 0 ou 1 (alta confiança) e vai de 0 para 1 muito rapidamente, o que corresponde a uma baixa entropia.

Já no gráfico da esquerda, os dados estão muito mais espalhados e misturados (por exemplo, há uma observação positiva no meio de observações negativas). Isso significa que o modelo não consegue aprender tão bem e p passa mais lentamente de 0 para 1, correspondendo a uma maior entropia.

Agora que temos uma boa função de custo, o treinamento consiste em achar os parâmetros wi que minimizam o custo², ou seja, aqueles que maximizam a certeza (entropia) do modelo. Isso pode ser feito utilizando gradiente descendente ou outras técnicas, como IRLS.

6. Regressão Logística × SVM Linear, qual é melhor?

Visto que tanto a regressão logística como o SVM linear são modelos que separam as classes com retas, você pode estar se perguntando qual a diferença entre eles. Abaixo, listamos algumas dessas diferenças conceituais:

  • Enquanto o SVM simplesmente prediz a classe da observação, a regressão logística prediz também a probabilidade de cada classe.
  • A regressão logística considera todas as observações no treinamento. Em contrapartida, o SVM considera apenas os pontos mais próximos à reta, o que pode melhorar a capacidade de generalização do modelo.

Na prática, ambos os modelos apresentam resultados similares. Nesse caso, a regressão logística pode ser melhor, uma vez que fornece as probabilidades das classes. No entanto, em um problema que não é linearmente separável, ou seja, no qual não há uma reta ou plano que separe as classes, um SVM não linear apresentará resultados muito melhores.

7. Regressão Logística na Prática com scikit-learn

Agora que já entendemos como funciona a regressão linear, é hora de aplicá-la em algum dataset. Utilizando a biblioteca scikit-learn, o código fica bem parecido com o dos últimos modelos.

8. Conclusão

Agora você está a par de mais um modelo, mais especificamente um modelo probabilístico de predição. Em nosso próximo post, vamos entender um pouco melhor alguns conceitos de probabilidade para depois aplicá-los em mais modelos de machine learning.

Curtiu? Então não deixe de criar sua conta no Medium e seguir a gente para continuar aprendendo mais modelos e outros assuntos de IA. Dê uma olhada em nossos outros posts e acompanhe o Grupo Turing no Facebook e no LinkedIn, temos várias oportunidades em IA por lá também.

Por hoje é só, até uma próxima!

¹ Na prática, p nunca é exatamente 0 ou 1, pois, para isso, a saída da regressão linear tem que ser −∞ ou +∞. Dessa forma, quando calculamos log(p) em p=0 ou log(1−p) em p=1, o resultado não é infinito, mas apenas um número muito grande.

² A entropia cruzada é igual a −ln(L), onde L é a verossimilhança. Isso significa que minimizar o custo é equivalente a encontrar um estimador de máxima verossimilhança.

--

--