Próbuję wygenerować regresję liniową na wygenerowanym przeze mnie wykresie punktowym, jednak moje dane są w formacie listy, a wszystkie przykłady użycia, które mogę znaleźć, polyfit
wymagają użycia arange
. arange
nie akceptuje jednak list. Szukałem wysoko i nisko, jak przekonwertować listę na tablicę i nic nie wydaje się jasne. Czy coś mi brakuje?
Następnie, jak najlepiej mogę użyć mojej listy liczb całkowitych jako danych wejściowych do polyfit
?
oto przykład polyfit, który śledzę:
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
źródło
źródło
regplot
odseaborn
: stackoverflow.com/a/42263217/911945Odpowiedzi:
arange
generuje listy (no cóż, tablice numpy); wpiszhelp(np.arange)
szczegóły. Nie musisz go wywoływać na istniejących listach.>>> x = [1,2,3,4] >>> y = [3,5,7,9] >>> >>> m,b = np.polyfit(x, y, 1) >>> m 2.0000000000000009 >>> b 0.99999999999999833
Powinienem dodać, że raczej używam
poly1d
tutaj zamiast pisać "m * x + b" i odpowiedniki wyższego rzędu, więc moja wersja twojego kodu wyglądałaby mniej więcej tak: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)
źródło
Ten kod:
from scipy.stats import linregress linregress(x,y) #x and y are arrays or lists.
podaje listę zawierającą:
Źródło
źródło
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()
Użyj tego ..
źródło
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()
źródło
Inną szybką i nieprzyjemną odpowiedzią jest to, że możesz po prostu przekonwertować swoją listę na tablicę za pomocą:
import numpy as np arr = np.asarray(listname)
źródło