Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Na regressão logistica, como funciona essa formula matricial para calcular o gradiente em python no numpy? sem precisar usar operação matricial?

Na regressão logistica, como funciona essa formula matricial para calcular o gradiente em python no numpy? sem precisar usar operação matricial?

Formula e código python numpy

Notei que essa formula da derivada da entropia cruzada para calcular os gradientes dos coeficientes, ele usa notação matricial. Porém isso me deixa confuso de entender. Eu queria conseguir entender essa formula passo a passo, porém sem usar operações matricias. No lugar das operações matriciais seria legal se fosse um somatório, pra ser mais facil de acompanhar.

Por exemplo, suponha que tenho apenas 2 entradas: X1, X2, e para essas entradas temos 2 coeficientes, sendo eles: theta1, theta2, e também o interceptro theta0. Suponha que tenho apenas 1 amostra( um vetor de valores [10, 25] ). Nesse cenário que supuz. Como ficaria a aplicação dessa formula que citei acima porém sem usar operações matricias?. Ou seja, como ficaria a aplicação dessa formula para calcular o gradiente de theta0, theta1, theta2 e theta3 respectivamente, em forma de somatório?

No lugar das operações matriciais seria legal se fosse um somatório, pra ser mais facil de acompanhar. Me sintiria mais confortável com somatórios para cada parametro.

Tenho essa duvida:

(1) - Por favor, como ficaria essa fórmula aplicada para calcular o gradiente cada um dos coeficientes theta1, theta2 e theta0 individualmente, porém sem utilizar operações matriciais?. Por favor, se possivel poderia escrever para mim em forma de somatorio ?

Por favor, se possivel, poderia também escrever um mini código em python realizando esses somatórios ? assim eu poderia ter como exemplo pra eu estudar de forma mais nítida esse conceito.

2 respostas
solução!

Oi, William, tudo bem?

A fórmula para calcular o gradiente da função de entropia cruzada sem usar operações matriciais é a seguinte:

def gradiente_sem_matricial(theta, X, y, alpha):
  """
  Calcula o gradiente da função de entropia cruzada sem usar operações matriciais.

  Parâmetros:
    theta: Vetor de parâmetros (theta0, theta1, ..., theta_n).
    X: Matriz de dados com as características das amostras.
    y: Vetor de rótulos das amostras.
    alpha: Taxa de aprendizado.

  Retorno:
    Vetor de gradientes (dtheta0, dtheta1, ..., dtheta_n).
  """
  N = len(X)
  previstos = prever_prob(theta, X)
  erro = previstos - y
  gradiente = np.zeros_like(theta)

  for i in range(N):
    xi = X[i]
    yi = y[i]
    pi = previstos[i]

    gradiente[0] += (pi - yi)
    for j in range(1, len(theta)):
      gradiente[j] += (pi - yi) * xi[j - 1]

  gradiente *= alpha / N
  return gradiente

A fórmula acima calcula o gradiente da função de entropia cruzada para cada parâmetro individualmente, sem usar operações matriciais. Cálculo dos erros: A primeira etapa é calcular o erro para cada amostra. O erro é a diferença entre o valor previsto pela função logística e o valor real da amostra. Atualização do gradiente: Para cada parâmetro, o gradiente é atualizado com a soma dos produtos entre o erro e as características das amostras. Normalização do gradiente: O gradiente é normalizado pela taxa de aprendizado e pelo número de amostras.

O gradiente de theta0 é calculado da seguinte forma:

gradiente[0] += (pi - yi)

Para cada amostra, o gradiente de theta0 é incrementado com a diferença entre o valor previsto pela função logística e o valor real da amostra. O gradiente de theta1 é calculado da seguinte forma:

for j in range(1, len(theta)):
  gradiente[j] += (pi - yi) * xi[j - 1]

Para cada amostra e para cada parâmetro theta_j (exceto theta0), o gradiente de theta_j é incrementado com o produto entre a diferença entre o valor previsto pela função logística e o valor real da amostra e a característica xi[j - 1] da amostra.

Todavia, vale ressaltar que como não tenho acesso ao cenário completo do projeto, outros testes terão de ser feitos a fim de obter o resultado esperado, mas espero que esta resposta seja um bom ponto de partida para a resolução do seu problema.

Espero que dê tudo certo. Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Boa tarde Rodrigo. Que legal!. Obrigado pelo exemplo!.