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 de liste et tous les exemples d'utilisation de polyfit
nécessitent l'utilisation de arange
. arange
n'accepte cependant pas les listes. J'ai cherché haut et bas sur la façon de 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 en tant qu’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()
arange
génère listes (ainsi, tableaux numpy); tapez help(np.arange)
pour les détails. Vous n'avez pas besoin de l'appeler sur des 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
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)
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:
pente: flotteur
pente de la droite de régression
intercept: float
intersection de la droite de régression
valeur r: float
Coefficient de corrélation
p-value: float
Valeur p bilatérale pour un test d'hypothèse dont l'hypothèse nulle est que la pente est nulle
stderr: float
Erreur type de l'estimation
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 ..
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()
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)