numpy
Enkel linjär regression
Sök…
Introduktion
Montering av en linje (eller annan funktion) på en uppsättning datapunkter.
Använda np.polyfit
Vi skapar ett dataset som vi sedan passar med en rak linje $ f (x) = mx + c $.
npoints = 20
slope = 2
offset = 3
x = np.arange(npoints)
y = slope * x + offset + np.random.normal(size=npoints)
p = np.polyfit(x,y,1) # Last argument is degree of polynomial
För att se vad vi har gjort:
import matplotlib.pyplot as plt
f = np.poly1d(p) # So we can call f(x)
fig = plt.figure()
ax = fig.add_subplot(111)
plt.plot(x, y, 'bo', label="Data")
plt.plot(x,f(x), 'b-',label="Polyfit")
plt.show()
Obs: Det här exemplet följer numpy-dokumentationen på https://docs.scipy.org/doc/numpy/reference/generated/numpy.polyfit.html ganska noggrant.
Använda np.linalg.lstsq
Vi använder samma datasats som med polyfit:
npoints = 20
slope = 2
offset = 3
x = np.arange(npoints)
y = slope * x + offset + np.random.normal(size=npoints)
Nu försöker vi hitta en lösning genom att minimera systemet med linjära ekvationer A b = c genom att minimera | cA b | ** 2
import matplotlib.pyplot as plt # So we can plot the resulting fit
A = np.vstack([x,np.ones(npoints)]).T
m, c = np.linalg.lstsq(A, y)[0] # Don't care about residuals right now
fig = plt.figure()
ax = fig.add_subplot(111)
plt.plot(x, y, 'bo', label="Data")
plt.plot(x, m*x+c, 'r--',label="Least Squares")
plt.show()
Obs: Det här exemplet följer numpy-dokumentationen på https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html ganska noggrant.
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow