J'essaie de générer une régression linéaire sur un nuage de points que j'ai généré, mais mes données sont au format liste, et tous les exemples que je peux trouver d'utilisation polyfit
nécessitent l'utilisation arange
. arange
n'accepte pas les listes. J'ai cherché haut et bas comment convertir une liste en tableau et rien ne semble clair. Est-ce que je manque quelque chose?
Ensuite, comment puis-je utiliser au mieux ma liste d'entiers comme entrées dans le polyfit
?
voici l'exemple polyfit que je suis:
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
la source
la source
regplot
deseaborn
: stackoverflow.com/a/42263217/911945Réponses:
arange
génère des listes (enfin, des tableaux numpy); tapezhelp(np.arange)
pour les détails. Vous n'avez pas besoin de l'appeler sur les listes existantes.>>> x = [1,2,3,4] >>> y = [3,5,7,9] >>> >>> m,b = np.polyfit(x, y, 1) >>> m 2.0000000000000009 >>> b 0.99999999999999833
Je devrais ajouter que j'ai tendance à utiliser
poly1d
ici plutôt que d'écrire "m * x + b" et les équivalents d'ordre supérieur, donc ma version de votre code ressemblerait à ceci: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)
la source
Ce code:
from scipy.stats import linregress linregress(x,y) #x and y are arrays or lists.
donne une liste avec les éléments suivants:
La source
la source
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()
Utilisez ceci ..
la source
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()
la source
Une autre réponse rapide et sale est que vous pouvez simplement convertir votre liste en un tableau en utilisant:
import numpy as np arr = np.asarray(listname)
la source