es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Operaciones de matriz numpy que devuelven valores NaN; a pesar de no haber valores NaN en la entrada.

Estoy ejecutando una Regresión Lineal (usando el Análisis de Descenso Gradiente / GDA) utilizando datos importados de un archivo .csv (las variables data_axis y data representan las fechas y los precios del mercado de valores, respectivamente). El código a continuación devuelve [nan nan nan nan nan nan] como el valor theta. El error cuadrado también devuelve nan.

Mensajes de error: ‘se encontró desbordamiento en multiplicar’, ‘se encontró valor inválido en añadir’

import numpy as np

Xdata = np.array(data_axis)
Xdata = Xdata.reshape(-1,2)
print(Xdata.shape)

Ydata = np.array(data[0:783])
Ydata = Ydata[::-1]
print(Ydata.shape)

def phi(x):
  return np.array([1,x[0],x[0],x[0]*x[0],x[0]*x[0],x[0]*x[0]*x[0]])

def gda(X, Y):
  n = len(X)
  theta = np.zeros(len(X[0]))
  alpha = 0.5
  iterations = 1000
  for j in range(iterations):
    for i in range(len(X)):
      theta += alpha*(Y[i] - np.dot(theta,X[i]))*X[i]/n
  return theta

def linear_regression_with_features(X, Y, phi):
  phi_X = np.array([phi(x) for x in X])
  return gda(phi_X,Y)

theta = linear_regression_with_features(Xdata, Ydata, phi)

def h(theta, x):
  return np.dot(theta,phi(x))

error = np.array([Ydata[i] - h(theta,Xdata[i]) for i in range(len(Xdata))])
s_error = np.dot(error,error)
print('theta= ', theta)
print('square error= ', s_error)

plt.plot(Xdata,Ydata,'co')
plt.plot(h(theta,Xdata),'r-')

El código devuelve y grafica exitosamente una regresión lineal para entradas generadas aleatoriamente Xdata = np.random.rand(783,2), Ydata = np.array([2-4*x[0]+3*x[1]+x[0]*x[0]+2*x[0]*x[1]-3*x[1]*x[1] for x in X]).

Verifiqué que no haya valores NaN en el archivo .csv. Busqué el mensaje de error y leí que algunas operaciones de Python y NumPy que involucran números extremadamente pequeños o extremadamente grandes pueden devolver un valor NaN como resultado. ¿Podría ser este mi problema? ¿O hay algo más que se pueda corregir?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Según los mensajes de error recibidos, es probable que el problema esté relacionado con números extremadamente pequeños o grandes que no son manejados adecuadamente por las operaciones de NumPy en el código. Una forma de solucionar esto sería verificar y manejar cualquier posible división por cero o errores de desbordamiento.

    Algunas posibles soluciones podrían incluir ajustar la tasa de aprendizaje alpha, escalar los datos de entrada para evitar valores extremadamente pequeños, o verificar si hay valores NaN o infinitos en los datos de entrada antes de ejecutar la regresión. También puede ser útil imprimir los valores intermedios de theta y error durante la regresión para ver si se están produciendo valores inusuales.

Comments are closed.