In [12]:
J = 0 # Valor da Funcao de Custo
dw1 = 0 # Gradiente dL/dw1
dw2 = 0 # Gradiente dL/dw2
db = 0 # Gradiente dL/db
# Para cada exemplo, realizar regressao, calcular o erro e obter gradiente
for i in range(m):
z[i] = w.T*x + b # Equacao base (linear)
a[i] = o(z[i]) # Funcao logistica (sigmoid)
J += -( y[i] * log(a(i)) + (1-y[i]) * log(1-a(i)) ) # Funcao de Erro - p/ amostra
dz[i] = a[i] - y[i] # Gradiente dL/dz - p/ amostra
dw1 += x[i,1] * dz[i] # Gradiente dL/dw1 - p/ amostra
dw2 += x[i,2] * dz[i] # Gradiente dL/dw2 - p/ amostra
db += dz[i] # Gradiente dL/db - p/ amostra
# Ajustar pelo numero de amostras
J /= m
dw1 /= m # ...
dw2 /= m # ...
db /= m # ...
# Ajustando pelo gradiente
w1 = w1 - alpha*dw1
w2 = w2 - alpha*dw2
b = b - alpha*db