python - regresion - Regresión lineal con matplotlib/numpy
regresion lineal sklearn (5)
Intento 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 usar polyfit
requieren el uso de un polyfit
. arange
no acepta listas, sin embargo. He buscado alto y bajo acerca de cómo convertir una lista en una matriz y nada parece claro. ¿Me estoy perdiendo de algo?
A continuación, ¿qué mejor puedo usar mi lista de enteros como entradas para el polyfit
?
aquí está el ejemplo 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()
Este código:
from scipy.stats import linregress
linregress(x,y) #x and y are arrays or lists.
da una lista con lo siguiente:
pendiente: flotador
pendiente de la línea de regresión
interceptar: flotar
intersección de la línea de regresión
valor r: flotar
coeficiente de correlación
valor p: flotar
valor p de dos lados para una prueba de hipótesis cuya hipótesis nula es que la pendiente es cero
stderr: flotar
Error estándar de la estimación
Otra respuesta rápida y sucia es que puedes convertir tu lista a una matriz usando:
import numpy as np
arr = np.asarray(listname)
arange
genera listas (bien, matrices numpy); escriba help(np.arange)
para los detalles. No necesita llamarlo a 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 añadir 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 tu 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
fit = np.polyfit(x,y,1)
fit_fn = np.poly1d(fit)
# fit_fn is now a function which takes in x and returns an estimate for y
plt.plot(x,y, ''yo'', x, fit_fn(x), ''--k'')
plt.xlim(0, 5)
plt.ylim(0, 12)
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()
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 ..