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