Lineaire regressie met matplotlib / numpy

Ik probeer een lineaire regressie te genereren op een spreidingsplot die ik heb gegenereerd, maar mijn gegevens zijn in lijstformaat, en alle voorbeelden die ik kan vinden van het gebruik van polyfitvereisen het gebruik van arange. arangeaccepteert echter geen lijsten. Ik heb hoog en laag gezocht over het converteren van een lijst naar een array en niets lijkt duidelijk. Mis ik iets?

Vervolgens, hoe kan ik mijn lijst met gehele getallen het beste gebruiken als invoer voor de polyfit?

hier is het polyfit-voorbeeld dat ik volg:

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

Antwoord 1, autoriteit 100%

arangegenereertlijsten (nou ja, numpy arrays); typ help(np.arange)voor de details. Je hoeft het niet op bestaande lijsten aan te roepen.

>>> x = [1,2,3,4]
>>> y = [3,5,7,9] 
>>> 
>>> m,b = np.polyfit(x, y, 1)
>>> m
2.0000000000000009
>>> b
0.99999999999999833

Ik moet hieraan toevoegen dat ik de neiging heb om hier poly1dte gebruiken in plaats van “m*x+b” en de hogere-orde equivalenten uit te schrijven, dus mijn versie van uw code zou er ongeveer zo uitzien:

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)


Antwoord 2, Autoriteit 21%

deze code:

from scipy.stats import linregress
linregress(x,y) #x and y are arrays or lists.

geeft een lijst met het volgende:

Slope: zweven
helling van de regressielijn
Intercept: zweven
sneven van de regressielijn
R-waarde: zweven
Correlatiecoëfficiënt
P-waarde: zweven
Tweezijdige P-waarde voor een hypothese-test wiens nulhypothese is dat de helling nul is
Stderr: zweven
Standaardfout van de schatting

bron


Antwoord 3, Autoriteit 2%

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

Gebruik dit ..


Antwoord 4, Autoriteit 2%

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

Antwoord 5

Nog een snel en vies antwoord is dat u uw lijst gewoon naar een array kunt converteren met:

import numpy as np
arr = np.asarray(listname)

Other episodes