1 votos

¿Cuál es la derivada parcial de la función de pérdida (raíz cuadrada) con respecto a theta cuando theta es el exponente de x?

Estoy tratando de resolver un problema de regresión usando Python 3 sin bibliotecas de aprendizaje automático.
Los datos de entrada consisten en un archivo csv de flotantes x,y que deberían ajustarse a la hipótesis: y = x^theta

Necesito usar regresión para encontrar el valor de theta.

Esto es diferente al problema de regresión más común porque theta es un exponente de x en lugar de un coeficiente.

Creo que la función de pérdida apropiada es la raíz cuadrada media: No vectorizado en Python:

sum = 0
for i in range(N):                                                                                                                       
    sum += Y[i] - (X[i]**theta)
cost = 1/(2*N) * (sum**2)

No conozco cálculo multivariable, así que no estoy seguro de cómo calcular la derivada parcial para la regla de actualización de esta hipótesis quizás inusual.

Sé que la derivada de a^x con respecto a x es ln(x)a^x.

También sé que las derivadas parciales de la función de pérdida de raíz cuadrada media para regresión lineal univariante son:

derivate_of_the_loss_w.r.t._theta0:  1/m * (h(xi)-y(xi)) 
derivate_of_the_loss_w.r.t._theta1:  1/m * (h(xi)-y(xi))* (xi)

donde m es el tamaño del conjunto de datos y xi es la característica i-ésima en el conjunto de datos.

entonces la(s) regla(s) de actualización se ven así:

theta0 = theta0 - learning_rate * derivate_of_the_loss_w.r.t._theta0   

y

theta1 = theta1 - learning_rate * derivate_of_the_loss_w.r.t._theta1

He hecho algunas suposiciones, pero ninguna logra que el aprendiz converja:

gradient = 0
for i in range(N):
     # gradient += X[i]**theta * np.log(theta)                                                                                                             
     # gradient += X[i]**theta * np.log(X[i])                                                                                                              
     gradient += (Y[i] - X[i]**theta) * np.log(X[i])
# print('gradient=|' + str(gradient) + '|')                                                                                                                
theta_new = theta - learning_rate * gradient

2voto

Federico Puntos 101

Por favor, corríjame si estoy equivocado. Lo que entendí es que estás interesado en $$ \begin{split} \frac{d}{d\theta}\sqrt{\frac1n\sum_{i=1}^n(x_i^\theta-y_i)^2} &= \frac{\frac{d}{d\theta}\left(\frac1n\sum_{i=1}^n(x_i^\theta-y_i)^2\right)} {2\sqrt{\frac1n\sum_{i=1}^n(x_i^\theta-y_i)^2}} = \frac{\frac1n\sum_{i=1}^n\frac{d(x_i^\theta-y_i)^2}{d\theta}} {2\sqrt{\frac1n\sum_{i=1}^n(x_i^\theta-y_i)^2}} \\ &= \frac{\frac1n\sum_{i=1}^n2(x_i^\theta-y_i)\frac{d(x_i^\theta-y_i)}{d\theta}} {2\sqrt{\frac1n\sum_{i=1}^n(x_i^\theta-y_i)^2}} = \frac{\frac1n\sum_{i=1}^n(x_i^\theta-y_i)x_i^\theta\log(x_i)} {\sqrt{\frac1n\sum_{i=1}^n(x_i^\theta-y_i)^2}} . \end{split} $$

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X