![](https://miro.medium.com/max/2560/1*Ui6SeSMmCeCSc9Q67n5_Wg.jpeg)
>
Das nossas funções anteriores, nós nos aprofundamos nas razões por trás do uso da função Sigmoid para a Regressão Logística em vez de uma função linear normal. Neste post, continuaremos compartilhando na função Custo.
A função Custo é importante porque nos dá os erros de nossas previsões e, posteriormente, é necessária para o nosso algoritmo de aprendizagem. Concretamente, nós gostamos de minimizar os erros das nossas previsões, ou seja, minimizar a função de custo. Idealmente, se todos os nossos erros forem zero, é como jogar um jogo de dardos em que todos os nossos dardos atingiriam o alvo do touro. Do outro lado do argumento, se nossos erros forem muito altos, isto significa que nossos valores previstos estão faltando todos os verdadeiros valores observados, ou seja, nossos dardos estão em geral faltando o olho do touro.
Embora gostemos de ter zero erros ao executar nossa função de custo com nossos valores previstos (previsão perfeita para cada valor), este pode não ser um bom cenário dado que pode levar a um fenômeno chamado “alta variância”. Vamos tocar mais sobre isso em escritos posteriores.
Voltando à formulação da função de perda, uma função de perda típica seria minimizar a soma dos erros ao quadrado, ou seja
![](https://miro.medium.com/max/60/1*_N0B9M03cZPcwP340czORA.png?q=20)
Esta função, no entanto, pode dar origem a múltiplas ótimas locais durante o processo de otimização, o que significa que sua solução otimizada pode não ser a mais otimizada (há uma chance de haver uma solução melhor). Idealmente, queremos que a solução optimizada seja o mínimo global, em vez do mínimo local.
![](https://miro.medium.com/max/60/1*wuoWtRejugq6kxRgdZHXwg.png?q=20)
Como visto no diagrama acima, podemos inadvertidamente rubricar os parâmetros e otimizá-los ao mínimo local sem atingir o mínimo “verdadeiro” global. Portanto, a função de perda acima mencionada não seria ideal para nós.
Qual poderia ser então a nossa função de perda?
Uma função de perda comumente usada para regressão logística é esta:
![](https://miro.medium.com/max/60/1*Ox4gV6NSORI9fws0lSCRYQ.png?q=20)
Noto que usei custo e perda intercambiavelmente, mas para aqueles acostumados às palestras de Andrew Ng, a “função de perda” é para um único exemplo de treinamento, enquanto a “função de custo” toma a média em todos os exemplos de treinamento.
Para ver porque esta função de perda faz sentido: Assumindo y = 1, e focando na equação superior, -log(h⊖(x)), queremos que ela seja muito negativa, pois é uma função de perda (Lembre-se que queremos minimizar a função de perda como um objetivo). Como resultado, h⊖(x) será grande. Dito isto, lembre-se que h⊖(x) está limitado ao valor máximo de 1 devido à função Sigmoid que limita o valor estimado da hipótese entre 0 a 1:
h⊖(x) = ŷ = σ(z)
Hence, quando y=1, temos a função de perda minimizada ao extremo quando ŷ = 1. Uma previsão perfeita que tem pouca ou nenhuma perda/custo incorrido.
Conversamente, se y = 0, e focando na parte inferior da equação, -log(1- h⊖(x)). Gostamos que isto seja muito negativo devido ao nosso objectivo de minimização de perdas. Como resultado, 1- h⊖(x) seria muito grande, e o corolário disso seria h⊖(x) sendo muito pequeno. No entanto, lembre-se que h⊖(x) está limitado ao valor mínimo de 0 devido à função Sigmoid fazendo com que o valor estimado da hipótese fique entre 0 a 1,
Hence, quando y=0, temos a função de minimização de perdas ao extremo quando ŷ = 0. Uma previsão perfeita que tem pouca ou nenhuma perda/custo incorrido.
Os gráficos correspondentes ilustrarão os pontos acima:
![](https://miro.medium.com/max/60/1*h0JhrkZuadH0VYnlANuT4A.png?q=20)
Como pode ver no gráfico da esquerda (y = -log(h⊖(x)), quando y = 1, o custo vai para 0 quando o valor da hipótese é 1 e vai para o infinito quando o valor da hipótese é próximo de 0.
Na veia semelhante, o gráfico da direita (y = -log(1 – h⊖(x)), quando y = 0, o custo vai para 0 quando o valor da hipótese é 0 e vai para o infinito quando o valor da hipótese é próximo de 1.
Combinando ambos juntos em uma equação limpa lhe dará a função de custo para a regressão logística com exemplos de treinamento m:
![](https://miro.medium.com/max/60/1*ctIxOPOv0Hou7j0F4PUKVw.png?q=20)
onde i vai de 1 a m para exemplos de treinamento m.
Em AI e Machine Learning , haverá muitas notações sendo jogadas ao redor e seria útil ter uma noção delas.
Ao treinar o modelo de regressão logística, temos como objetivo encontrar os parâmetros, “w” e “b” que minimizem a função do custo total. No próximo artigo, vamos tocar no próximo segmento importante, Gradient Descent.
Em numpy, podemos codificar a Função Custo da seguinte forma:
import numpy as npcost = (-1/m) * np.sum(Y*np.log(A) + (1-Y)*(np.log(1-A)))
Para explicar:
- np.sum somas sobre os elementos do array (Y*np.log(A) + (1-Y)*(np.log(1-A)), que neste caso seria soma sobre todos os exemplos de treinamento. Leia mais aqui.
- np.log leva o log natural, elemento sábio para os elementos do array. Veja mais aqui.
- “*” leva os elementos de um array e multiplica-os, sábio elemento, para os elementos de outro array. Isto não é multiplicação de matriz, que tem um requisito de forma de ambos os arrays: O número de colunas da primeira matriz tem que ser igual às linhas da segunda matriz.