Estoy tratando de generar una regresión lineal en un diagrama de dispersión que he generado, sin embargo, mis datos están en formato de lista, y todos los ejemplos que puedo encontrar de uso polyfit
requieren el uso arange
. arange
aunque no acepta listas. He buscado alto y bajo sobre cómo convertir una lista en una matriz y nada parece claro. ¿Me estoy perdiendo de algo?
A continuación, ¿cuál es la mejor forma de usar mi lista de enteros como entradas para polyfit
?
aquí está el ejemplo de polyfit que estoy siguiendo:
from pylab import *
x = arange(data)
y = arange(data)
m,b = polyfit(x, y, 1)
plot(x, y, 'yo', x, m*x+b, '--k')
show()
python
numpy
matplotlib
linear-regression
curve-fitting
Siddhant Saraf
fuente
fuente
regplot
enseaborn
: stackoverflow.com/a/42263217/911945Respuestas:
arange
genera listas (bueno, matrices numpy); escribahelp(np.arange)
para los detalles. No es necesario llamarlo en listas existentes.>>> x = [1,2,3,4] >>> y = [3,5,7,9] >>> >>> m,b = np.polyfit(x, y, 1) >>> m 2.0000000000000009 >>> b 0.99999999999999833
Debo agregar que tiendo a usar
poly1d
aquí en lugar de escribir "m * x + b" y los equivalentes de orden superior, por lo que mi versión de su código se vería así:import numpy as np import matplotlib.pyplot as plt x = [1,2,3,4] y = [3,5,7,10] # 10, not 9, so the fit isn't perfect coef = np.polyfit(x,y,1) poly1d_fn = np.poly1d(coef) # poly1d_fn is now a function which takes in x and returns an estimate for y plt.plot(x,y, 'yo', x, poly1d_fn(x), '--k') plt.xlim(0, 5) plt.ylim(0, 12)
fuente
Este código:
from scipy.stats import linregress linregress(x,y) #x and y are arrays or lists.
da una lista con lo siguiente:
Fuente
fuente
import numpy as np import matplotlib.pyplot as plt from scipy import stats x = np.array([1.5,2,2.5,3,3.5,4,4.5,5,5.5,6]) y = np.array([10.35,12.3,13,14.0,16,17,18.2,20,20.7,22.5]) gradient, intercept, r_value, p_value, std_err = stats.linregress(x,y) mn=np.min(x) mx=np.max(x) x1=np.linspace(mn,mx,500) y1=gradient*x1+intercept plt.plot(x,y,'ob') plt.plot(x1,y1,'-r') plt.show()
Utilizar esta ..
fuente
from pylab import * import numpy as np x1 = arange(data) #for example this is a list y1 = arange(data) #for example this is a list x=np.array(x) #this will convert a list in to an array y=np.array(y) m,b = polyfit(x, y, 1) plot(x, y, 'yo', x, m*x+b, '--k') show()
fuente
Otra respuesta rápida y sucia es que puede convertir su lista en una matriz usando:
import numpy as np arr = np.asarray(listname)
fuente