Estou tentando gerar uma regressão linear em um gráfico de dispersão que gerei; no entanto, meus dados estão em formato de lista e todos os exemplos de uso que posso encontrar polyfit
exigem o uso arange
. arange
não aceita listas embora. Pesquisei muito sobre como converter uma lista em uma matriz e nada parece claro. Estou esquecendo de algo?
A seguir, qual a melhor forma de usar minha lista de inteiros como entradas para o polyfit
?
aqui está o exemplo de polyfit que estou seguindo:
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
fonte
fonte
regplot
emseaborn
: stackoverflow.com/a/42263217/911945Respostas:
arange
gera listas (bem, matrizes numpy); digitehelp(np.arange)
para os detalhes. Você não precisa chamá-lo em 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
Devo acrescentar que tendo a usar
poly1d
aqui em vez de escrever "m * x + b" e os equivalentes de ordem superior, então minha versão do seu código seria mais ou menos assim: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)
fonte
Este código:
from scipy.stats import linregress linregress(x,y) #x and y are arrays or lists.
fornece uma lista com o seguinte:
Fonte
fonte
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()
Usa isto ..
fonte
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()
fonte
Outra resposta rápida e suja é que você pode simplesmente converter sua lista em uma matriz usando:
import numpy as np arr = np.asarray(listname)
fonte