web-dev-qa-db-fra.com

Régression linéaire avec matplotlib / numpy

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() 
74
Dingo

arangegé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)
159
DSM

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

Source

34
George Pamfilis
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 ..

2
Aleena Rehman
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()
1
Aleena Rehman

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)
1
drg