El crédito por esta respuesta es para Antoni Parellada de los comentarios, que creo que merece un lugar más destacado en esta página (ya que me ayudó cuando muchas otras respuestas no lo hicieron). Además, esta no es una derivación completa, sino más bien una declaración clara de . (Para obtener una derivación completa, consulte las otras respuestas).∂J(θ)∂θ
∂J(θ)∂θ=1m⋅XT(σ(Xθ)−y)
dónde
X∈Rm×nσ(z)θ∈Rny=Training example matrix=11+e−z=sigmoid function=logistic function=weight row vector=class/category/label corresponding to rows in X
Además, una implementación de Python para aquellos que desean calcular el gradiente de con respecto a .Jθ
import numpy
def sig(z):
return 1/(1+np.e**-(z))
def compute_grad(X, y, w):
"""
Compute gradient of cross entropy function with sigmoidal probabilities
Args:
X (numpy.ndarray): examples. Individuals in rows, features in columns
y (numpy.ndarray): labels. Vector corresponding to rows in X
w (numpy.ndarray): weight vector
Returns:
numpy.ndarray
"""
m = X.shape[0]
Z = w.dot(X.T)
A = sig(Z)
return (-1/ m) * (X.T * (A - y)).sum(axis=1)