簡體   English   中英

生成的多項式回歸值離坐標太遠

[英]Polynomial Regression values generated too far from the coordinates

根據多項式回歸系數值的以下代碼,當我計算任何 x 點的回歸值時。 獲得的值更遠離等效的 y 坐標(特別是對於下面的坐標)。 任何人都可以解釋為什么差異如此之大,可以將其最小化或理解上的任何缺陷。 目前的要求不是每點相差150多。


import  numpy as np
x=[0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100]
y=[0,885,3517,5935,8137,11897,10125,13455,14797,15925,16837,17535,18017,18285,18328,18914,19432,19879,20249,20539,20746]                                                                                                     
z=np.polyfit(x,y,3)
print(z) 

我還嘗試了 Java 中可用的各種代碼,但是這些數據的系數值在每個位置都是相同的。 請幫助理解。
例如


0.019168 * N^3 + -5.540901 * N^2 + 579.846493 * N + -1119.339450
N 等於 5 值等於 1643.76649
Y 值 885
N 等於 10 值等於 4144.20338
Y 值 3517
N 等於 100; 值=20624.29985
Y 值 20746

多項式擬合按預期執行。 這里沒有錯誤,只是你的數據有很大的偏差。 不過,您可能想要重新調整數據。 如果您將參數full=True添加到np.polyfit ,您將收到其他信息,包括殘差,其本質上是平方擬合誤差的總和。 有關更多詳細信息,請參閱此其他SO 帖子

import matplotlib.pyplot as plt
import  numpy as np

x = [0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100]
y = [0,885,3517,5935,8137,11897,10125,13455,14797,15925,16837,17535,18017,18285,18328,18914,19432,19879,20249,20539,20746]

m = max(y)
y = [p/m for p in y] # rescaled y such that max(y)=1, and dimensionless

z, residuals, rank, sing_vals, cond_thres = np.polyfit(x,y,3,full=True)

print("Z: ",z) # [ 9.23914285e-07 -2.67082878e-04  2.79497972e-02 -5.39544708e-02]

print("resi:", residuals) # 0.02188 : quite decent, depending on WHAT you're measuring ..

Z = [z[3] + q*z[2] +  q*q*z[1] + q*q*q*z[0] for q in x]

fig = plt.figure()
ax = fig.add_subplot(111)

ax.scatter(x,y)
ax.plot(x,Z,'r')
plt.show()

在此處輸入圖片說明

在查看@Magnus 的答案后,我減少了用於三階多項式中數據的限制。 如您所見,我粗略繪制的紅色圓圈內的點不能與附近的數據位於一條平滑的線上。 雖然我可以通過數據擬合平滑的直線,例如希爾 sigmoidal 方程,但數據方差(噪聲)本身似乎是使用此數據集實現 150 峰值絕對誤差的限制因素。

陰謀

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM