Я новичок в matplotlib. Я пытаюсь проиллюстрировать линию полиномиальной регрессии некоторых данных с помощью ноутбуков Jupyter. Это данные:
x = np.array((1, 2, 2.5, 4, 6, 8, 8.5))
y = np.array((.4, .7, .8, 1, 1.2, 1.3, 1.4))
Затем я строю данные, используя этот код:
ax = plt.plot(x,y,'ro')
plt.grid()
plt.xlabel('x')
plt.ylabel('y')
Затем появляется этот график:
![graph_1](https://i.stack.imgur.com/vVnY2.png)
Затем я ищу коэффициент уравнения полинома, используя правило Крамера, и это код:
n = len(x)
sx1 = x.sum()
sx2 = (x**2).sum()
sx3 = (x**3).sum()
sx4 = (x**4).sum()
sx5 = (x**5).sum()
sx6 = (x**6).sum()
sy = y.sum()
sxy = (x*y).sum()
sx2y = ((x**2)*y).sum()
sx3y = ((x**3)*y).sum()
A=[[n, sx1, sx2, sx3],[sx1, sx2, sx3, sx4],[sx2, sx3, sx4, sx5],[sx3, sx4, sx5, sx6]]
B=[sy, sxy, sx2y, sx3y]
C=[[n, sx1, sx2, sx3],[sx1, sx2, sx3, sx4],[sx2, sx3, sx4, sx5],[sx3, sx4, sx5, sx6]]
X=[]
for i in range(0,len(B)):
for j in range(0,len(B)):
C[j][i]=B[j]
if i>0:
C[j][i-1]=A[j][i-1]
X.append(np.linalg.det(C)/np.linalg.det(A))
p = X[0]
q = X[1]
r = X[2]
s = X[3]
, поэтому полиномиальная функция:
def polinomFunction(x): return p + q*x + r*(x**2) + s*(x**3)
Тогда Я делаю связку x
, чтобы построить линию с этим кодом:
xreg = np.array(np.arange(0,(x[-1]+1)*10))
xreg = xreg/10
yreg = polinomFunction(xreg)
Затем я достиг последнего шага, построив линию. Я использую этот код:
ax = plt.plot(x,y,'ro')
plt.plot(xreg,yreg,'b')
plt.title('Grafik Persamaan Polinomial')
plt.grid()
plt.xlabel('x')
plt.ylabel('y')
, но вдруг я получаю следующий график:
![graph_2](https://i.stack.imgur.com/G8uy1.png)
Линия находится далеко от точка. После нескольких попыток изменить код и ничего не получить, я пытаюсь запустить новый блокнот jupyter, скопировать данные и коэффициент полиномиального уравнения, а затем сделать функцию, основанную на этом коэффициенте, и, как ни странно, она работает.
Это код, который я запускаю на новом ноутбуке:
x = np.array((1, 2, 2.5, 4, 6, 8, 8.5))
y = np.array((.4, .7, .8, 1, 1.2, 1.3, 1.4))
p= 0.0142
q= 0.4510
r= -0.0638
s= 0.0035
xreg = np.array(np.arange(0,(x[-1]+1)*10))
xreg = xreg/10
yreg = p + q*xreg + r*(xreg**2) + s*(xreg**3)
ax = plt.plot(x,y,'ro')
plt.plot(xreg,yreg,'b')
plt.grid()
plt.title('Grafik Persamaan Polinomial')
plt.xlabel('x')
plt.ylabel('y')
Это график, который я получаю:
![graph_3](https://i.stack.imgur.com/DJsep.png)